簡體   English   中英

Rails:搜索子字符串而不注入SQL

[英]Rails: Search for substring without getting SQL Injected

我正在嘗試為Rails實現自動完成。 我的代碼中有類似以下內容的內容-

Location.where("name like ?", "%#{params[:location]}%")

恐怕這會導致SQL注入。 類似於以下內容-

SELECT * FROM Locations WHERE (name LIKE '%green%') OR 1=1--%'

params[:location]是這樣的green%') OR 1=1--

有什么辦法可以避免在Rails中針對子字符串搜索使用SQLi嗎?

戴夫是對的。 試試看,看看它輸出了什么。 它把整個東西包裝起來作為條件的一部分。 在我的課程模型中。

> x = "'') OR SELECT * FROM Users"
=> "'') OR SELECT * FROM Users"
> Course.where(["name like ?", "%#{x}%"])
  Course Load (38.7ms)  SELECT "courses".* FROM "courses" WHERE 
  (name like '%'''') OR SELECT * FROM Users%')
=> []

如果您使用的是Postgres,建議您在Postgres中使用Trigram支持。

將此內容進行遷移以進行設置:

CREATE EXTENSION pg_trgm;

然后像這樣運行查詢:

Location.select('*', "similarity(search_term, #{ActiveRecord::Base.sanitize(search_term)}) AS similarity").order('similarity DESC, search_term')

或者,只需執行您的操作,然后將參數包裝在#{ActiveRecord::Base.sanitize(search_term)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM