簡體   English   中英

Rails默認情況下如何污染活動記錄列?

[英]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_atpassword_saltcreated_at等列僅在內部創建和處理,無需使用任何用戶輸入。 phoneemailcountry等都來自用戶輸入,因此它們本質上是不值得信任的。

暫無
暫無

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

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