0

使用微软的 AntiXssLibrary,你如何处理需要稍后编辑的输入?

例如:

用户输入: <i>title</i>

保存到数据库中: <i>title</i>

在编辑页面上,它会在文本框中显示如下内容: &lt;i&gt;title&lt;/i&gt;因为我在显示在文本框中之前已经对其进行了编码。

用户不喜欢这样。

写入输入控件时可以不编码吗?

更新:

我仍在努力解决这个问题。下面的答案似乎是在显示之前对字符串进行解码,但这不会允许 XSS 攻击吗?

一位说可以在输入字段值中解码字符串的用户被否决了。

4

5 回答 5

2

看起来您不止一次对其进行编码。在 ASP.NET 中,使用 Microsoft 的 AntiXss 库,您可以使用 HtmlAttributeEncode 方法对不受信任的输入进行编码:

<input type="text" value="<%= AntiXss.HtmlAttributeEncode("<i>title</i>") %>" />

这导致

<input type="text" value="&#60;i&#62;title&#60;&#47;i&#62;" />
在呈现页面的标记中,并<i>title</i>在输入框中正确显示。

于 2009-05-15T15:09:10.750 回答
1

您的问题似乎是双重编码;HTML 需要转义一次(因此它可以毫无问题地插入到页面上的 HTML 中),但两次会导致编码版本出现字面意思。

于 2008-11-28T01:35:47.627 回答
0

您可以调用 HTTPUtility.HTMLDecode(MyString) 将文本恢复为未编码的形式。

于 2008-11-28T01:29:08.623 回答
0

如果您允许用户输入将在网站上呈现的 HTML,您需要做的不仅仅是对其进行编码和解码。

使用 AntiXss 通过将脚本和标记转换为文本来防止攻击。它不会对将直接呈现的“清理”标记做任何事情。您将不得不从用户的输入中手动删除脚本标签等,以便在这种情况下得到完全保护。

您需要去除合法元素上的脚本标签和 JavaScript 属性。例如,攻击者可以将恶意代码注入到 onclick 或 onmouseover 属性中。

于 2009-07-10T18:19:37.910 回答
-4

是的,输入框内的代码不受脚本攻击,不需要编码。

于 2008-11-28T01:27:57.987 回答