【问题标题】:Rails 4 - Prevent SQL injection using LIKE operator in SQL queryRails 4 - 在 SQL 查询中使用 LIKE 运算符防止 SQL 注入
【发布时间】:2014-08-21 00:46:41
【问题描述】:

我想对我的 Rails 4 应用程序使用以下查询,但担心 SQL 注入攻击:

@persons = People.where("persons.name LIKE ?", "%#{params[:search]}%")

有人可以告诉我写上述语句的安全方法吗?我尝试了以下方法,但不确定它是否防 SQL 注入:

search = "%" + params[:search] + "%"
@persons = People.where("persons.name LIKE ?", search)

谢谢!

【问题讨论】:

    标签: ruby-on-rails-4 sql-injection params sql-like


    【解决方案1】:

    你的例子很好,正如紫舍所说。

    每当您在方法中使用问号并将另一个参数作为搜索查询传递时,它都会清理您的查询字符串。

    手动进行字符串连接来创建查询是很危险的,例如:

    Project.where("name = '#{params[:name]}'")
    

    Click here for more information

    【讨论】:

    • 谢谢,@Migore!我感谢额外的资源以及为什么我的示例是防 SQL 注入的解释!
    【解决方案2】:

    你的两个陈述都是安全的。你也可以这样写:

    @persons = People.where("persons.name LIKE concat('%', ?, '%')", params[:search])
    

    Simlilar qestion

    【讨论】:

    • 不,模式必须是字符串。您没有引号中的 SQL 字符串。但是您不能将占位符放在 SQL 字符串中。这会起作用:"persons.name LIKE CONCAT('%', ?, '%')"
    • @zishe - 感谢您回答我的问题以及提供更简洁的代码。我接受 Migore 的回复,因为他提供了一些附加信息,说明为什么我的示例不易受到 SQL 注入的影响。谢谢!
    猜你喜欢
    • 2017-07-24
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多