我已经在我的asp.net Web应用程序中添加了一个Htmleditorextender ajax控件,并为其安装了XSS清理程序,但现在当我从Htmleditorextender检索文本时,清理程序会从中移除HTML5,并且所有输入都来自在一个单一的。 我在互联网上搜索并发现这种情况正在发生,因为XSS清理工具将HTML5标签识别为未知的不安全标签,这就是为什么所有HTML5标签都从htmleditorextender的格式化HTML中删除了,现在我使用htmleditorextender使EnableSanitization =“false”了我从我的项目中删除XSS清洁剂,或者我应该去找
但这些都没有配置为图片上传和用户hava添加他们自己的第三方图像上传器。
请告诉我如何在不丢失htmleditorextender中格式化的html标签的情况下阻止我的网站进行XSS攻击。
答案 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("<br>", "~_!_~"));
}
protected void htmlEditorExtender1_PreRender(object sender, EventArgs e)
{
txtSign.Text = txtSign.Text.Replace("~_!_~", "<br>");
}