允许以下HTML元素(例如代码,pre)是否存在安全风险?

时间:2012-12-09 07:06:22

标签: ruby-on-rails security wysihtml5

我使用以下插件: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视图切换)

我希望这不是一个愚蠢的问题(我对安全性不太熟悉),但这是相对安全还是危险?如果是这样,如何预防?

1 个答案:

答案 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标记替换为这些替换标记。 :)