【问题标题】:Getting warning : Denial of Service收到警告:拒绝服务
【发布时间】:2014-06-05 17:32:00
【问题描述】:
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

这是拒绝服务的警告。有人知道如何解决此警告吗?

提前致谢

【问题讨论】:

  • 方法id_for_status可以改成接受字符串而不是符号?
  • 只是一个有根据的猜测:尝试截断到一些合理的最大长度:params[:id][0...20].to_sym。我的猜测是,rails 试图保护您不使用大量符号实习生空间(一旦使用符号,保存其字符的空间就永远不会释放)。如果这不起作用,则必须在符号转换之前验证参数。
  • 感谢@Baldrick,它的作品

标签: ruby-on-rails ruby-on-rails-3 denial-of-service


【解决方案1】:

这里的问题是params[:id].to_sym

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

问题已在 Ruby 2.2 中解决。但仍然 - 将任何将转换为符号的内容列入白名单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多