2009-08-12 58 views
6

在Ruby on Rails中阻止XSS的做法是什么? 我在网上发现了很多老文档,大部分时间都是关于使用 h/html_escape助手来转义来自用户的任何变量。Ruby on Rails和XSS预防

我从较新的文档理解,在版本2.0和以上有 消毒方法,其自动地从假想 恶意输入清洁输入。这是足够的还是你在做更多的事情来保护你的 应用程序?

回答

15

h方法仍然是转义字符串内部所有HTML的方法。您应该在输出内容的任何地方使用此方法。

<%=h @recipe.description %> 

这种行为将在Rails的3.会改变目前所有的输出将被默认逃脱,你将需要明确指定不能逃脱它。与此同时,如果您经常忘记使用此方法,您可能需要查看Safe ERB plugin

sanitize方法是选择性去除内容中某些标签的好方法。例如,如果您想允许用户在添加链接时加粗和斜体输出,则可以执行此操作。

<%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %> 

正如Oliver提到的,请查看Security Guide了解更多信息。

4

至于最佳做法,我想提出以下建议:

  1. 始终使用轨道形成佣工(的form_for等),如果你写你自己的形式,你打开自己到CSRF攻击。

  2. 虽然使用h()函数会在文本写入页面时转义文本,但仍然会以保存在数据库中的XSS漏洞最终结束。在保存时使用XSS_terminate插件条输入。

  3. 不要忘了你的应用程序运行在一堆其他应用程序(Rails,Apache,MySQL,你选择的操作系统)上,每个应用程序都有自己的安全问题。

2

Rails的清理方法很不错,但它不能保证格式良好,而且很可能会因为安装基础而受到攻击。更好的做法是使用html5lib(真的是最好的,如果不是最快或者最红宝石的话)或者或者Loofah