gpt4 book ai didi

sql - 如何使用?帮助防止 Rails 中的 SQL 注入(inject)?

转载 作者:行者123 更新时间:2023-12-04 20:56:43 25 4
gpt4 key购买 nike

我的 Rails 应用程序中有这段代码,但我不太确定它是如何工作的。

@dogs = Dog.where(breed: search_breed).where(<<-SQL, search_color, search_name)
color = ?
AND name = ?
SQL

在 SQL 部分,如何将 search_color 和 search_name 放在 SQL 开始和使用中? SQL 内部与此不同/更好?

@dogs = Dog.where(breed: search_breed).where(<<-SQL)
color = search_color
AND name = search_name
SQL

谢谢。

最佳答案

这里真的没有理由使用原始 SQL。该代码看起来真的很困惑,应该是:

@dogs = Dog.where(
breed: search_breed,
color: search_color,
name: search_name
)

如果您正在使用 AND,这就是 where 默认情况下的工作方式。这将为您妥善转义一切

当您犯了以下错误时会发生注入(inject):

Dog.where("breed = #{search_breed}") # WRONG!

你真的不想做的事。

安全的选择是这样的:

Dog.where("breed=?", search_breed)

在这种情况下,数据库驱动程序用正确转义的 search_breed 值替换 ?,这称为 占位符值。此处正确转义意味着“避免 SQL 注入(inject)问题”。

关于sql - 如何使用?帮助防止 Rails 中的 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47127894/

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