我曾经使用PHP和Prepared语句,现在当我从rails查看以下代码时(因为我是一个新的rails并且不确定语法和东西),我想知道代码是否容易出现到SQLI注入
代码段(控制器),param q是搜索框中的值:
def index
query = %w(% %).join params[:q].to_s.gsub('%', '\\%').gsub('_', '\\_')
@posts = Post.where("name LIKE ? OR body LIKE ?", query, query).order(params[:order])
end
由于
答案 0 :(得分:2)
你拥有的是安全的。如果不是,那么它就是Rails中的一个错误。
.where
接受多种格式的条件。一个是原始字符串。如果你自己构建了这个字符串,那么所有的赌注都会被关闭,你很容易受到攻击。
正如最近的一些文件所说:
请注意,从用户输入构建您自己的字符串可能会泄露您的 如果操作不当,应用于注入攻击。作为一个 另外,建议使用以下方法之一。
换句话说,所有“跟随”(所有其他支持方式)的做事方式都可以。
因此,如果您使用字符串参数以外的任何内容进行.where
,那么您应该没问题。
答案 1 :(得分:2)
只要您不在where
条款中进行插值,就应该是安全的。 SQL注入代码here