如何防止AntiXSS Sanitizer从AjaxControlToolkit中删除html5 <br/>标签HtmlEditorExtender生成的html

时间:2012-07-09 16:00:20

标签: asp.net tinymce sanitization xss html-encode

我已经在我的asp.net Web应用程序中添加了一个Htmleditorextender ajax控件,并为其安装了XSS清理程序,但现在当我从Htmleditorextender检索文本时,清理程序会从中移除HTML5,并且所有输入都来自在一个单一的。 我在互联网上搜索并发现这种情况正在发生,因为XSS清理工具将HTML5标签识别为未知的不安全标签,这就是为什么所有HTML5标签都从htmleditorextender的格式化HTML中删除了,现在我使用htmleditorextender使EnableSanitization =“false”了我从我的项目中删除XSS清洁剂,或者我应该去找

  1. TinyMCE或
  2. CKEditor的

  3. 但这些都没有配置为图片上传和用户hava添加他们自己的第三方图像上传器。
    请告诉我如何在不丢失htmleditorextender中格式化的html标签的情况下阻止我的网站进行XSS攻击。

2 个答案:

答案 0 :(得分:1)

您是否知道最新的HtmlEditorExtender出于这个原因提供替代消毒剂?它被称为HtmlAgilityPackSanitizerProvider。如果您使用Nuget下载,不确定是否包含它,但如果您从CodePlex下载zip,它包含一个名为“SanitizerProviders”的文件夹,其中包含备用清洁剂所需的dll。然后,您可以在配置文件中指定备用清理程序(包含在下载中)。

以下是Stephen Walther博客的链接,他解释了这一点: http://stephenwalther.com/archive/2012/06/25/announcing-the-june-2012-release-of-the-ajax-control-toolkit.aspx

我不确定这是否解决了您的问题,或者是否更新到最新的工具包是一个选项,但您没有提及尝试这样做,所以听起来值得一试。

答案 1 :(得分:0)

作为此问题的解决方法,我将在排毒前用未知短语替换所有<br>标签。并将它们放回到PreRender()上。它适用于所有主流浏览器。

在aspx页面中:

<asp:TextBox runat="server" ID="txtSign" TextMode="MultiLine"/>
<ajaxToolkit:HtmlEditorExtender TargetControlID="txtSign" OnPreRender="htmlEditorExtender1_PreRender"  ID="htmlEditorExtender1" runat="server" />
代码背后的

protected void Page_Load(object sender, EventArgs e)
{
   if (IsPostBack)       
      txtSign.Text = Server.HtmlDecode(txtSign.Text.Replace("&lt;br&gt;", "~_!_~"));           
}

protected void htmlEditorExtender1_PreRender(object sender, EventArgs e)
{
   txtSign.Text = txtSign.Text.Replace("~_!_~", "<br>");
}