我使用以下插件:https://github.com/jhollingworth/bootstrap-wysihtml5/
这就是我在Rails应用程序中清理输入/输出的方法:
post.rb:
protected
def clean_input
self.content = sanitize(self.content, :tags => %w(b i u br p span blockquote pre code), :attributes => %w(id class style))
end
帖/ show.html.rb:
<p><%= sanitize @post.content, :tags => %w(b i u p span br blockquote pre code), :attributes => %w(id class style) %></p>
此解析器规则为 wysihtml5 (当然,编辑器允许使用b,i等标签作为默认值):
共享/ editor_toolbar:
parserRules: {
classes: {
"ruby": 1,
"variable": 1,
"string": 1
},
tags: {
span: {},
code: {},
pre: {}
}
},
所以,现在用户可以输入,应用程序可以输出如下内容:
<pre class="ruby">
<code>
<span class="variable">
$(</span><span class="string">'.wysihtml5'</span>).wysihtml5({<span class=
"string">'stylesheets'</span>: false});
</code>
</pre>
(用户可以从视觉和html视图切换)
我希望这不是一个愚蠢的问题(我对安全性不太熟悉),但这是相对安全还是危险?如果是这样,如何预防?
答案 0 :(得分:3)
我真的不了解Ruby,但是在PHP中你可以允许这样的标签,从我的实验中,它是 NOT 安全......原因是因为属性在这些授权标签上没有进行消毒,因此任何用户都可以输入一个非常温和且无害的<span></span>
标签,但将其添加到其中:
<span onmouseover="hack_the_whole_fucking_website();">contenthere</span>
这样,当用户将鼠标移到它上面时,就会执行JavaScript!从那里我猜一个黑客可以窃取用户的cookie +窃取会话cookie +劫持用户会话+可能劫持管理会话然后爆炸你的网站。这对黑客来说是敞开的大门。
我使用的解决方案是BBcode标签。它们是现有HTML标记的“替代品”。一些例子:
<i>
= [i]
<img src="#">
= [img=#]
<a href="#">text</a>
= [url=#]text[/url]
编辑器的输出应采用此格式,以便您可以运行正确删除所有实际HTML标记的清理脚本。然后,当需要将此数据输出给用户时,您可以使用一些正则表达式将实际HTML标记替换为这些替换标记。 :)