首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标记和XSS

标记和XSS
EN

Stack Overflow用户
提问于 2009-11-06 21:30:43
回答 5查看 6.7K关注 0票数 11

好的,我在这里和其他地方读到了关于标记的内容,用户输入和db之间的步骤通常如下所示

  1. 将标记转换为html
  2. sanitize html (w/whitelist)
  3. 插入数据库

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

  1. 清洁标记(删除所有标签-无例外)
  2. 转换为html
  3. 插入数据库

我是不是遗漏了什么?在我看来,这几乎是防伪的。

EN

回答 5

Stack Overflow用户

发布于 2011-07-25 22:55:50

请查看此链接:

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

代码语言:javascript
运行
复制
> hello <a name="n"
> href="javascript:alert('xss')">*you*</a>

化作

代码语言:javascript
运行
复制
<blockquote>
 <p>hello <a name="n"
 href="javascript:alert('xss')"><em>you</em></a></p>
</blockquote>

∴​转换为HTML后,您必须对其进行净化。

票数 24
EN

Stack Overflow用户

发布于 2009-11-06 21:40:27

你的建议有两个问题:

  1. 我没有办法让你的用户能够格式化文章。例如,您利用Markdown提供了漂亮的编号列表。在提议的无标签-无例外的世界,我不知道最终用户将如何能够做这样的事情。
  2. 要重要得多:当使用Markdown作为“原生”格式化语言时,以及白名单其他可用的标记时,您不仅限制了输入端,而且还限制了输出。换句话说,如果您的显示引擎期望Markdown,并且只允许白色内容删除,即使(上帝禁止)有人进入数据库并将一些恶意代码注入到一堆帖子中,实际站点及其用户也会受到保护,因为您在显示时也会对其进行消毒。

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

  • 净化用户数据:在何处以及如何进行
  • 输出消毒 (我的客户之一,他将保持无名,其受影响的系统不是由我开发的),被这个蠕虫击中了。当然,自那以后,我们就确保了这些系统的安全。
  • BizTech:最佳实践:从未听说过XSS?
票数 6
EN

Stack Overflow用户

发布于 2009-11-06 21:43:24

当然,删除/转义所有标记将使标记语言更加安全。然而,Markdown的全部意义在于它允许用户包括任意HTML标记以及它自己的标记形式(*)。当您允许HTML时,无论如何您必须清除/白名单输出,所以您最好在标记转换之后进行,以捕获所有内容。

*:这是一个我完全不同意的设计决定,而且我认为这个决定并没有被证明是有用的,但它是一个设计决定,而不是一个错误。

顺便说一句,步骤3应该是“输出到页面”;这通常发生在输出阶段,数据库包含原始提交的文本。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1690601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档