Markdown和XSS

psb*_*psb 11 xss markdown sanitization

好吧,所以我在SO和其他地方一直在阅读关于降价的信息,用户输入和数据库之间的步骤通常给出为

  1. 将markdown转换为html
  2. 清理HTML(带白名单)
  3. 插入数据库

但对我来说,做以下事情更有意义:

  1. 清理markdown(删除所有标签 - 没有例外)
  2. 转换为HTML
  3. 插入数据库

我错过了什么吗?在我看来,这几乎是xss证明

Jor*_*ter 24

请看这个链接:

http://michelf.com/weblog/2010/markdown-and-xss/

> hello <a name="n"
> href="javascript:alert('xss')">*you*</a>
Run Code Online (Sandbox Code Playgroud)

<blockquote>
 <p>hello <a name="n"
 href="javascript:alert('xss')"><em>you</em></a></p>
</blockquote>
Run Code Online (Sandbox Code Playgroud)

∴ 转换为HTML 必须清理.


Joh*_*udy 6

你提出的建议有两个问题:

  1. 我没有看到您的用户能够格式化帖子的方法.例如,您利用Markdown提供了很好的编号列表.在提议的无标签 - 无异常的世界中,我没有看到最终用户将如何做这样的事情.
  2. 更重要的是:当使用Markdown作为"原生"格式化语言,并将其他可用标签列入白名单时,您不仅限制了世界的输入端,还限制了输出.换句话说,如果您的显示引擎需要Markdown并且只允许白名单内容,即使(上帝禁止)有人进入数据库并将一些讨厌的恶意软件代码注入到一堆帖子中,实际站点及其用户也会受到保护因为你在展出时也要对它进行消毒.

网上有一些关于输出消毒的好资源:

  • 至于第1点,我认为你误解了OP.你仍然会使用Markdown风格的编号列表,没问题,因为在*Markdown转换为1之前,HTML标签的删除会发生*.Foo`进入`<li> Foo </ li>`. (2认同)