[英]How does Rails taint active record columns by default?
關於Rails魔術的問題:
我在玩IRB並受到污染? 方法,然后我只是做了以下:
>> User.first.attributes.collect { |column, value| [column, value.tainted?] }
=> [["phone", true], ["state", false], ["persistence_token", true], ["last_login_ip", true], ["country", true], ["login_count", false], ["last_request_at", false], ["id", false], ["forname", true], ["current_login_at", false], ["name", true]]
有誰知道為什么有些參數被污染了,有些則沒有? 如果有辦法選擇哪個列應該被污染?
編輯 :
謝謝你的回答。
@sgtFloyd:我剛剛嘗試手動更新國家/地區。 這是正在發生的事情:
>> u = User.first
>> u.country = "USA"
=> "USA"
>> u.country.tainted?
=> false
>> u.save
=> true
>> u.country.tainted?
=> false
>> u.reload
>> u.country.tainted?
=> true
>> u.country.class
=> String # it's also string in the database
編輯2 :
我刪除了User模型中的所有內容,並且一些String列沒有出現污點,而有些則...
非常感謝!
污染和污染? 是Ruby的Object類的方法。 如果您想在Rails應用程序中查找已修改的對象,您可能正在尋找更改?
@customer.email = 'new@email.com'
do_something if @customer.email_changed?
AFAIK,Rails沒有使用污點,它跟蹤變化和html_safe條件,但我還沒有看到任何污點。 用於污染的ruby文檔說當它來自外部源時它應該被污染,我猜這與使用的sql庫有關。 但是,如果沒有看到圖書館本身,我無法猜測為什么有些人被污染而有些人沒有。
在我的項目上運行該代碼會出現所有錯誤。 它可能取決於您正在運行的ruby / rails等版本,並且由於它不是由rails定義的,因此可能不適合依賴。
來自編程Ruby
從某些外部源派生的任何Ruby對象(例如,從文件讀取的字符串或環境變量)都會自動標記為受污染。 如果您的程序使用受污染的對象來派生新對象,那么該新對象也將被污染......
在您的示例中, last_login_at
, password_salt
和created_at
等列僅在內部創建和處理,無需使用任何用戶輸入。 phone
, email
, country
等都來自用戶輸入,因此它們本質上是不值得信任的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.