我正在使用Rails3和tinymce.如何呈现用户关闭浏览器javascript然后输入xss?

Jcr*_*crt 6 ruby xss tinymce ruby-on-rails

我有一个由Rails3编写的网站.我的帖子模型有一个文本列,命名为"content".在后面板中,html表单使用tinymce将"content"列设置为textarea字段.在首页中,由于使用了tinymce,post.html.erb代码需要用raw方法实现<%= raw @post.content %>.

好的,现在如果我关闭浏览器javascript,这个textarea可以输入没有tinymce,也许用户会输入任何xss之类的<script>alert('xss');</script>.我的前面会显示警报框.

我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式.例如,<span style='color:red;'>foo</span>将成为<span>foo</span>.

我的问题是:如何过滤xss输入并同时保留tinymce风格?

小智 2

可以将消毒剂设置为允许样式属性。在您的config/application.rb添加中:

config.action_view.sanitized_allowed_attributes = ['style']
Run Code Online (Sandbox Code Playgroud)

sanitize 方法还具有其允许的 css 属性和关键字的默认值。请参阅sanitizer.rb allowed_css_propertiesallowed_css_keywords获取默认值列表。

要添加一些当前不允许的内容,请将其添加到您的config/application.rb

config.action_view.sanitized_allowed_css_keywords = ['puke']
Run Code Online (Sandbox Code Playgroud)

--

如果您要做的事情比这更复杂,那么您需要编写一些代码。我不建议从头开始执行此操作,请查看Loofah Gem以获得用于编写 html 洗涤器的良好库。