如何处理需要编辑的编码输入?

时间:2008-11-28 01:14:11

标签: html-encode antixsslibrary

使用Microsoft的AntiXssLibrary,您如何处理以后需要编辑的输入?

例如:

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

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

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

用户不喜欢这样。

写入输入控件时是否可以编码?

更新

我仍然想弄明白这一点。下面的答案似乎是说在显示之前解码字符串,但是不允许进行XSS攻击吗?

表示在输入字段值中解码字符串的一个用户是ok的。

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您的问题似乎是双重编码; HTML需要转义一次(因此可以在页面上插入HTML而不会出现问题),但两次导致编码版本按字面意思显示。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

使用AntiXss可以通过将脚本和标记转换为文本来防止攻击。它没有做任何“清理”将直接呈现的标记。您将不得不从用户的输入中手动删除脚本标记等,以便在该场景中得到完全保护。

您需要删除法律元素上的脚本标记以及JavaScript属性。例如,攻击者可能会将恶意代码注入onclick或onmouseover属性。

答案 4 :(得分:-4)

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