2014-06-05 39 views
0
Customer.find(:all, :select => 'id', :order => 'updated_at DESC', :readonly => true, :conditions => { :status_id => Customer.id_for_status(params[:id].to_sym) }, :offset => offset, :limit => 30).collect(&:id) 

拒绝以上是我在该查询我收到警告像获取警告:服务

Symbol conversion from unsafe string (parameter value) near line 33: params[:id].to_sym 

这是拒绝服务攻击的警告。任何人有任何想法如何解决这个警告?

在此先感谢

+1

方法'id_for_status'可以更改为接受字符串而不是符号? – Baldrick

+0

只是一个受过教育的猜测:尝试截断一些合理的最大长度:'params [:id] [0 ... 20] .to_sym'。我的猜测是铁轨试图保护你免于使用大量的符号实习空间(一旦使用符号,持有它的人物的空间永远不会被释放)。如果这不起作用,则必须在符号转换之前验证参数。 – Gene

+0

谢谢@Baldrick,这是有效的 –

回答

3

这里的问题是PARAMS [:ID] .to_sym

时将被转换为符号的字符串是开集,你不应该把它们转换成符号。每个创建的符号都不会被垃圾收集,并且可能会造成潜在的内存泄漏,从而使您的系统容易受到Dos攻击。

Ruby 2.2解决了问题。但仍然 - 白色列出任何将被转换为符号的东西。