您对上传HTML有何看法?

时间:2009-08-24 19:00:05

标签: .net html security

我正在.net 2.0中构建一个控件,允许用户将HTML写入textarea然后上传它。 .NET不允许他们上传它,除非我设置页面ValidateRequest = false。当然,这会带来潜在的安全威胁。但是,我的计划是将代码上传,仅扫描我允许的基本标记(如<B>),可能在其自己的区域中。有没有人看到这个问题?我会在这个过程中扫描得太晚吗?

4 个答案:

答案 0 :(得分:2)

这实际上取决于您上传代码后对代码的处理方式。只要您在重新显示或存储数据之前过滤它,就应该限制曝光。理想情况下,您将使用HTML编码内容,但如果您需要实际呈现其HTML,则不能选择此选项,我猜是这样的。

注意我并不是说过滤是一项微不足道的任务,但您的曝光矢量会有所不同,具体取决于您对数据的处理方式以及查看信息的人员。例如,允许用户输入仅为其存储和显示的自由格式HTML输入,您可以降低影响其他访问者或网站较大部分的风险。但是,如果您说在论坛系统上工作,并且用户发布格式错误的HTML或恶意HTML,您可能会破坏所有用户的整个网站。

但请记住,如果您允许自由格式的HTML输入,您还必须确保处理未关闭的标记和不正确的HTML标记。

如果您必须接受来自某种形式的RichTextEditor控件的用户的HTML输入,我个人会建议。类似于FCKEditor,Telerik RadEditor,TinyMCE,甚至是Markdown编辑器(在Stack Overflow中使用)。这有助于减少HTML格式错误的暴露点,更不用说为用户提供更好的体验了。

答案 1 :(得分:0)

我会看一下Sanitize HTML utility撰写的Jeff Atwood

简而言之,小心

如果您要让用户上传HTML进行展示,那么您会遇到很多潜在的问题,其中大部分问题可能要到很晚才能看到。

答案 2 :(得分:0)

考虑使用一种工具,允许您让用户控制其文本的显示,而不必允许HTML。例如,许多论坛网站使用方括号来表示标记,例如[b]某些文本[/ b]。更好的是考虑使用像Markdown这样的东西(这是本网站使用的,顺便说一下。)。

Markdown维基百科: http://en.wikipedia.org/wiki/Markdown

答案 3 :(得分:0)

我建议反对它除非你只允许使用无属性的几个(marktup)标签。所以你应该有一个匹配

的正则表达式

&LT b取代; &LT; I&GT; &LT; U&GT;

如果你打算支持和和样式这样的东西。算了吧。要么确保你是该领域的专家,要么雇用或使用现有的图书馆。

要想知道它有多难,请看一下RSnake的xss备忘单:

http://ha.ckers.org/xss.html

请注意,此列表还远未完成。