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<String,Object>)
(参见 1)是否可以防止对 Cypher 的注入攻击?
详细说明,如果参数的替换提前执行然后解析 Cypher,我看不出这将如何帮助防止注入攻击,但如果解析 Cypher 然后稍后替换参数,然后我可以看到它如何防止注入攻击。
众所周知,JDBC/SQL 中的 PrepareStatements 可以防止 NoSQL 攻击,我想确保使用 ExecutionEngine.execute(String,Map<String,Object>)
可以为我提供相同级别的保护。
谢谢!!
巴里
【问题讨论】:
【参考方案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 文件