簡體   English   中英

如何在Ruby中插入或更新之前轉義字符串

[英]how to escape a string before insert or update in Ruby

在ruby中ActiveRecord不提供動態綁定更新和插入sqls,當然我可以使用原始sql,但是需要維護連接,所以我想知道是否有更簡單的方法來逃避更新或插入sql之前執行下面的代碼:

ActiveRecord::Base.connection.insert(sql)

我想我可以用gsub編寫代碼,但我知道是否有一個現成的方法來做到這一點。

在Rails> = 3.2.5中,以下內容適用於我:

evil_input = '"\';%#{}\"foo'
ActiveRecord::Base.connection.quote(evil_input)
=> "'\"'';%\#{}\\\"foo'"

你可以這樣做:

ActiveRecord::Base.send(:sanitize_sql,["select * from my_table where description='%s' and id='%s'","mal'formed", 55], "my_table")

當然,這意味着您可以單獨使用params。 不確定它是否會起作用,但試試看。

你要求的並不是很明確,因為你的標題談到在插入或更新之前轉義字符串,然后在標簽中談論SQL注入。

如果您需要在插入或更新之前讓ActiveRecord自動編碼/修改內容,您是否檢查過ActiveRecord的回調 執行更新或創建時,將觸發before_save回調。 如果您想在存儲之前修改內容,那么這是一個很好的做法。

如果要使用SQL參數而不是將變量插入“update”或“insert”語句以避免SQL注入,則使用AR的變量綁定 向下滾動到“條件”部分。

暫無
暫無

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

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