ExecutionEngine.execute(String,Map<String,Object>) 会阻止“NoSQL 注入攻击”吗?

Posted

技术标签:

【中文标题】ExecutionEngine.execute(String,Map<String,Object>) 会阻止“NoSQL 注入攻击”吗?【英文标题】:Will ExecutionEngine.execute(String,Map<String,Object>) prevent "NoSQL Injection Attacks"? 【发布时间】:2013-05-05 15:17:19 【问题描述】:

所以,我通过 JDBC 在基于 SQL 的数据库中使用 PrepareStatements 来防止 SQL 注入攻击。

我想知道如果使用得当,使用 Neo4J 的 Java API ExecutionEngine.execute(String,Map&lt;String,Object&gt;)(参见 1)是否可以防止对 Cypher 的注入攻击?

详细说明,如果参数的替换提前执行然后解析 Cypher,我看不出这将如何帮助防止注入攻击,但如果解析 Cypher 然后稍后替换参数,然后我可以看到它如何防止注入攻击。

众所周知,JDBC/SQL 中的 PrepareStatements 可以防止 NoSQL 攻击,我想确保使用 ExecutionEngine.execute(String,Map&lt;String,Object&gt;) 可以为我提供相同级别的保护。

谢谢!!

巴里

【问题讨论】:

【参考方案1】:

是的。这不是简单的字符串替换,它实际上是先解析,缓存查询对象,然后填充参数。这对性能也有好处,因为只需更改参数就不需要重新解析查询。

【讨论】:

在docs.neo4j.org/chunked/stable/cypher-parameters.html 上,Brad 写道:“啊,好吧,这很有道理,谢谢 Peter。我想我更多地考虑的是防止 Cypher 注入攻击的参数,我想在这些情况下我应该只是写我自己的保障?”并由 Peter Neubauer 回答,他写道:“是的,这可能是目前最简单的解决方案 :)”。任何人都可以对此发表评论吗?这似乎与上面的答案直接矛盾。

以上是关于ExecutionEngine.execute(String,Map<String,Object>) 会阻止“NoSQL 注入攻击”吗?的主要内容,如果未能解决你的问题,请参考以下文章

象棋相关

象棋相关

s-s-rS 报告 - 从没有 s-s-rS 服务器的 C# 导出

字符串常用操作

s-s-rS 报告需要在 s-s-rS 2008 (VS 2008) 中重用来自 s-s-rS 2005 (VS 2005) 的 rdl 文件

安装后:无法在 wd %s %s (wd=%s) 中运行