gpt4 book ai didi

ruby-on-rails - 我的代码库中的这个 ActiveRecord/SQL 语句是否容易受到 SQL 注入(inject)的影响?

转载 作者:行者123 更新时间:2023-11-29 14:11:03 25 4
gpt4 key购买 nike

我正在阅读 Rails 指南中有关 SQL 注入(inject)攻击的内容,想知道以下行是否容易受到 SQL 注入(inject)攻击:

accounts.where("lower(name) LIKE '%#{params[:query].downcase}%'")

如果我正确阅读并理解了指南,用户可以做类似的事情吗

 `'\''; DROP TABLE users;`

我的 table 会掉下来吗?

------编辑------

同样适用于这些示例:

Account.where(id: account_id).first
current_user.actions.where(id: params[:clear_action_reminder]).first
edits.where.not(account_id: non_human_ids)
Rating.where(project_id: @project.id, account_id: current_user.id).first_or_initialize

这些当然是特定于应用程序的查询,但是因为查询中没有?,这些都可能是灾难性的吗?

最佳答案

Account.where("lower(name) LIKE '%#{params[:query].downcase}%'")

是的,上述查询易受攻击
根据用户输入构建您自己的字符串可能会使您的应用程序遭受注入(inject)攻击。

除了将字符串传递给条件选项之外,您还可以传递一个数组来清理受污染的字符串,如下所示:

query = params[:query].downcase
Account.where('lower(name) LIKE ?', "%#{query}%")

这将使您的代码在复杂查询中安全且可读。如果使用多个参数调用 #where,则这些参数将被视为作为单个数组的元素传递。您也可以使用 hash 调用。 arrayhash 都是安全的。

您的以下查询是安全的:

Account.where(id: account_id).first 
current_user.actions.where(id: params[:clear_action_reminder]).first
Edit.where.not(account_id: non_human_ids)
Rating.where(project_id: @project.id, account_id: current_user.id).first_or_initialize

关于ruby-on-rails - 我的代码库中的这个 ActiveRecord/SQL 语句是否容易受到 SQL 注入(inject)的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com