在可能有很多用户的 Rails 应用程序中使用“原始”助手是否安全?
我会将 TinyMCE 与我的应用程序集成,以便用户将 HTML 内容添加到某种形式的帖子中。使用“原始”显示其内容是否存在安全问题?
或者有更合适的做事方式吗?
谢谢!
最佳答案
来自fine manual :
This method outputs without escaping a string. [...] This is not recommended if the data is coming from the user’s input.
所以,是的,使用 raw
可能会有点安全问题(对您的用户而言),除非您正确清理传入的 HTML。
您不应该信任客户。即使您使用一组有限的标签设置了 TinyMCE,您也无法保证您的服务器收到的 HTML 确实来自 TinyMCE,或者有人没有以某种方式解决 TinyMCE。
如果您接受来自用户的 HTML,那么您需要在存储之前将标签和属性列入白名单。
您可以使用 Nokogiri按标签解析传入的 HTML 标签,如果标签在您的白名单中,则让它通过,如果您没有明确允许该标签(即它不在您的白名单中),则将其丢弃。而且,您需要检查允许通过的标签上的属性,以便只有您希望通过的属性和属性值。任何不在白名单上的标签、属性或属性值都会被丢弃。清理传入的 HTML 后,您可以存储它并使用 raw
帮助程序安全地将其呈现给用户。
这种增加的复杂性是许多网站使用 Markdown、BB-Code 或其他生成 HTML 的标记语言的原因之一。
关于ruby-on-rails - Rails 'raw' 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166146/