我有常數我指的是在我的代碼一樣的哈希值:導軌安全:轉換參數符號哈希查找
CATEGORIES = {
business: '1002',
education: '1003',
entertainment: '1004',
# etc...
}
在我的控制器之一,我需要測試通過一個類別的現有參數,所以通常我會做這樣的事情:
CATEGORIES.has_key? params[:category].to_sym
但是這似乎是邀請服務拒絕攻擊,因爲攻擊者可以很容易地通過category
PARAMS提供隨機字符串炸燬了Ruby符號表。
似乎是最簡單的解決方案是將CATEGORY
鍵轉換爲字符串,而不是符號:
CATEGORIES = {
'business' => '1002',
'education' => '1003',
'entertainment' => '1004',
# etc...
}
或許:
def self.valid_category(category_s)
CATEGORIES.keys.any? { |key| key.to_s == category_s }
end
有沒有更好的或者更地道方式來做到這一點Rails的?
這是代表類別的哈希鍵,而不是它們的值。測試密鑰是否存在是驗證該類別是否存在。 –
夠公平,我誤解了。我認爲使用字符串作爲鍵是一個很好的解決方案。 –