我确定这是一个常见问题...ASP.NET控件中的安全HTML
我希望用户能够输入和格式化描述。
现在我有一个多行文本框,他们可以输入纯文本。这将是很好,如果他们可以做一个小格式的HTML。这是我必须处理的事情吗?解析输入并只验证是否存在诸如<ul><li><b>
等“安全”标签?
我将此说明保存在SQL数据库中。为了正确显示这个HTML,我需要在页面上使用一个文字,然后将它转储到适当的区域,或者对于我正在做的事情有更好的控制吗?
此外,是否有像SO上的用户输入/小编辑的自由控制?
我确定这是一个常见问题...ASP.NET控件中的安全HTML
我希望用户能够输入和格式化描述。
现在我有一个多行文本框,他们可以输入纯文本。这将是很好,如果他们可以做一个小格式的HTML。这是我必须处理的事情吗?解析输入并只验证是否存在诸如<ul><li><b>
等“安全”标签?
我将此说明保存在SQL数据库中。为了正确显示这个HTML,我需要在页面上使用一个文字,然后将它转储到适当的区域,或者对于我正在做的事情有更好的控制吗?
此外,是否有像SO上的用户输入/小编辑的自由控制?
查看AntiXSS库。当前版本(3.1)有一个名为GetSafeHtmlFragment
的方法,可用于执行您正在讨论的解析类型。
Literal可能是输出此HTML的正确控制方式,因为Literal只是输出所放入的内容并让浏览器呈现任何HTML。标签将输出包括标签的所有标记。
AJAX控制工具包有text editor。
此外,有没有自由控制像 一个在SO用于用户输入/次要 编辑?
#1使用the WMD control and markdown为解释在这里:
http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/
您需要检查正在输入的内容标签,以避免交叉侧脚本攻击等。您可以使用正则表达式来检查任何标签在你的“白名单”上,并且删除任何其他人。
您可以查看此link获取富文本编辑器列表。
除了其他答案,您还需要在包含文本框的页面的@Page指令中设置ValidateRequest =“false”。这会关闭标准ASP.NET验证,以防止HTML从文本框中发布。然后你应该使用你自己的验证程序,比如@PhilPursglove提到的一个。
+1非常感谢。 – Jason 2010-01-20 18:46:29
不客气。 :) – 2010-01-20 19:02:02