【问题标题】:How to do neo4j parameter safe for Ruby on Rails?如何为 Ruby on Rails 做 neo4j 参数安全?
【发布时间】:2018-01-24 06:15:58
【问题描述】:

比如句子是"I'm playing football"

参数需要为"I\'m playing football",单引号指向neo4j架构...

我尝试了variable.html_safe,但不幸的是,它不起作用。

运行时信息:

Neo4j database version: neo4j 3.3.1

neo4j gem version: 9.0.7

neo4j-core gem version: 8.1.0

【问题讨论】:

    标签: ruby-on-rails ruby database neo4j nosql


    【解决方案1】:

    对于参考,这是在 an issueneo4j 存储库中回答的。在此处复制/粘贴:

    您可以做一些事情。我要说的第一件事是你永远不应该(或至少很少)将数据直接注入查询字符串。可以是:

    • 如果您对字符串进行了不适当的转义,则会出现问题
    • 很慢,因为 Neo4j 无法在查询字符串每次更改时优化查询计划
    • 如果此数据来自用户,则不安全,因为他们可能会产生 Cypher 注入攻击

    理想情况下,sqlParametre 应该是一个数组,以便您可以这样做:

    tablo = Word.query_as(:w).where('w.ad IN {ads}').params(ads: sqlParametre)
    # or as a shortcut:
    tablo = Word.query_as(:w).where('w.ad IN ?', sqlParametre)
    

    但是由于您有一个ActiveNode 模型,您还可以在更高级别上工作并将第 89 行和第 91 行替换为:

    kayitSayisi = Word.as(:w).where(ad: sqlParametre).pluck('SUM(w)').first
    

    请注意最后一行,如果 sqlParametre 是一个数组,neo4j gem 会自动检测并创建 Cypher 语法 WHERE w.ad IN {param} 而不是 WHERE w.ad = {param}

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多