在一个类似的Rails应用程序中,我能够创建一个递归的哈希检查函数,然后运行Sanitize gem的clean/fragment方法,从传入的params哈希中删除任何HTML元素。我在application_controller中使用了一个before过滤器,以便整个应用程序都可以进行清理(它是一个大型应用程序)。
背景:XSS攻击是可能的,特别是在IE浏览器中,但实际上我们根本不希望这些东西保存到数据库中。最终目标是JSON输出不包含它。
我尝试在Sinatra应用程序中做同样的事情(其中包含一些ActiveSupport和JRuby ActiveRecord),但是Sanitize gem不会捆绑,因为这个特定的应用程序由于某些数据库原因在JRuby中运行。Sanitize需要Nokogiri,而Nokogumbo又需要构建在这个JRuby环境中。所以我在app.rb中尝试使用Rack::Util的内置html转义方法来做before过滤器,但是这会导致应用崩溃。
有没有其他的思路:
1)将所有传入的参数都进行清理并进入(JRuby)Sinatra应用程序
如果不行,还有一个次选项:
2)使所有解析的JSON都对其属性-值列表中的值进行清理?
PS-问题的一部分是包含的本地gem,它处理了许多参数并进行JSON渲染,这证明是不可能调试的。我将在主机应用程序和本地链接的gem中都包含Pry,当我尝试进入Gem时,无法查看params哈希(它只显示为空)-似乎存在作用域问题。
背景:XSS攻击是可能的,特别是在IE浏览器中,但实际上我们根本不希望这些东西保存到数据库中。最终目标是JSON输出不包含它。
我尝试在Sinatra应用程序中做同样的事情(其中包含一些ActiveSupport和JRuby ActiveRecord),但是Sanitize gem不会捆绑,因为这个特定的应用程序由于某些数据库原因在JRuby中运行。Sanitize需要Nokogiri,而Nokogumbo又需要构建在这个JRuby环境中。所以我在app.rb中尝试使用Rack::Util的内置html转义方法来做before过滤器,但是这会导致应用崩溃。
有没有其他的思路:
1)将所有传入的参数都进行清理并进入(JRuby)Sinatra应用程序
如果不行,还有一个次选项:
2)使所有解析的JSON都对其属性-值列表中的值进行清理?
PS-问题的一部分是包含的本地gem,它处理了许多参数并进行JSON渲染,这证明是不可能调试的。我将在主机应用程序和本地链接的gem中都包含Pry,当我尝试进入Gem时,无法查看params哈希(它只显示为空)-似乎存在作用域问题。
Rack::Utils.escape_html
的问题是什么? - matt