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