我们的rails应用程序正被一个随机垃圾邮件机器人抨击,他们正试图发布一些奇怪的东西。
我已经尝试了不同的解决方案:
我们的application_controller.rb文件中的一些自定义代码
before_filter方法。 before_filter :force_utf8_params
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
我不知道还能做什么。
答案 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