gpt4 book ai didi

ruby - 轨道安全 : converting parameters to symbols for hash lookup

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:16 25 4
gpt4 key购买 nike

我有一个常量散列,我在整个代码中都引用了这些常量,例如:

CATEGORIES = {
business: '1002',
education: '1003',
entertainment: '1004',
# etc...
}

在我的一个 Controller 中,我需要通过参数测试类别的存在,所以通常我会做类似的事情:

CATEGORIES.has_key? params[:category].to_sym

然而,这似乎是对拒绝服务攻击的邀请,因为攻击者可以通过为 category 参数提供随机字符串来轻易地破坏 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 中是否有更好或更惯用的方法来做到这一点?

最佳答案

Is there a better or more idiomatic way to do this in Rails?

我见过的最常见的方法是您提供的第二种解决方案,即:

def self.valid_category(category_s)
CATEGORIES.keys.any? { |key| key.to_s == category_s }
end

不过,我会将方法命名为 self.valid_category?。也许我也会将 category 变量上的 .to_s 移动到这个方法,比如:

def self.valid_category?(category)
category = category.to_s
CATEGORIES.keys.any? { |key| key.to_s == category }
end

关于ruby - 轨道安全 : converting parameters to symbols for hash lookup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com