使用Microsoft的AntiXssLibrary,您如何处理以后需要编辑的输入?
例如:
用户输入:
<i>title</i>
保存到数据库:
<i>title</i>
在编辑页面上,在文本框中显示如下内容:
<i>title</i>
因为我在文本框中显示之前对其进行了编码。
用户不喜欢这样。
写入输入控件时是否可以编码?
更新
我仍然想弄明白这一点。下面的答案似乎是说在显示之前解码字符串,但是不允许进行XSS攻击吗?
表示在输入字段值中解码字符串的一个用户是ok的。
答案 0 :(得分:2)
看起来你不止一次编码它。在ASP.NET中,使用Microsoft的AntiXss库,您可以使用HtmlAttributeEncode方法对不受信任的输入进行编码:
<input type="text" value="<%= AntiXss.HtmlAttributeEncode("<i>title</i>") %>" />
这导致了
<input type="text" value="<i>title</i>" />
在呈现的页面标记中,并在输入框中正确显示为<i>title</i>
。
答案 1 :(得分:1)
您的问题似乎是双重编码; HTML需要转义一次(因此可以在页面上插入HTML而不会出现问题),但两次导致编码版本按字面意思显示。
答案 2 :(得分:0)
您可以调用HTTPUtility.HTMLDecode(MyString)将文本恢复为未编码的表单。
答案 3 :(得分:0)
如果您允许用户输入将在网站上呈现的HTML,则您需要做的不仅仅是编码和解码。
使用AntiXss可以通过将脚本和标记转换为文本来防止攻击。它没有做任何“清理”将直接呈现的标记。您将不得不从用户的输入中手动删除脚本标记等,以便在该场景中得到完全保护。
您需要删除法律元素上的脚本标记以及JavaScript属性。例如,攻击者可能会将恶意代码注入onclick或onmouseover属性。
答案 4 :(得分:-4)
是的,输入框内的代码不受脚本攻击的影响,不需要编码。