使用无效的utf-8字符发送垃圾邮件

时间:2014-06-12 01:40:46

标签: ruby-on-rails utf-8 character-encoding

我们的rails应用程序正被一个随机垃圾邮件机器人抨击,他们正试图发布一些奇怪的东西。

我已经尝试了不同的解决方案:

def force_utf8_params
    traverse = lambda do |object, block|
      if object.kind_of?(Hash)
        object.each_value { |o| traverse.call(o, block) }
      elsif object.kind_of?(Array)
        object.each { |o| traverse.call(o, block) }
      else
        block.call(object)
      end
      object
    end
    force_encoding = lambda do |o|
      return redirect_to @MYAPP_URL+"/not-found" if o.is_a?(String) && !o.valid_encoding?
    end
    traverse.call(params, force_encoding)
  end

以下是我们收到的错误:invalid byte sequence in UTF-8

我不知道还能做什么。

1 个答案:

答案 0 :(得分:1)

你需要稍微改变你的代码,这个问题的原始解决方案使用lamda,这是合适的,因为它试图强制编码或剥离一些字符。但是你需要重定向并继续执行,所以你需要使用proc。

force_encoding = proc do |o|
 redirect_to @MYAPP_URL+"/not-found" and return if o.is_a?(String) && !o.valid_encoding?
end