我有一个输入控件
<input id="firstNameField" type="text" runat="server" />
我给它一个值服务器端
firstNameField.Value = "Me!"
如何编码“!”输出的字符?我试过这个:
firstNameField.Value = "Me!"
但.Net以此回应:
<input name="firstNameField" type="text" id="firstNameField" value="Me&#33;" />
让用户在文本框中看到Me!
。据我所知,这是.Net内置XSS保护的一部分。如何让.Net对除&符号以外的特殊字符进行编码?
答案 0 :(得分:0)
在代码中分配值时使用HttpUtility.HtmlEncode(“text”)
答案 1 :(得分:0)
我最后扩展了HttpEncoder类:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Util;
using System.Text;
using System.IO;
/// <summary>
/// Summary description for CustomHttpEncoder
/// </summary>
public class CustomHttpEncoder : HttpEncoder
{
//
// TODO: Add constructor logic here
//
public CustomHttpEncoder()
{
}
protected override void HtmlEncode(string value, TextWriter output)
{
if (value != null) {
MyHtmlEncode(value, output);
}
}
protected override void HtmlAttributeEncode(string value, TextWriter output)
{
if (value != null) {
MyHtmlEncode(value, output);
}
}
private void MyHtmlEncode(string value, TextWriter output)
{
if (value != null) {
string encodedValue = "";
for (int i = 0; i <= value.Length - 1; i++) {
byte[] asciiVal = Encoding.ASCII.GetBytes(value.Substring(i, 1));
encodedValue += "&#" + asciiVal(0).ToString + ";";
}
output.Write(encodedValue);
}
}
}
然后在Web.config中引用它:
<system.web>
<httpRuntime encoderType="CustomHttpEncoder" />
之后,我所要做的就是设置正常的值:
firstNameField.Value = "Me!"
自动编码每个角色以获得最大的锡箔安全性:
<input name="firstNameField" type="text" id="firstNameField" value="Me!" />
这很适合我的目的,但在其他情况下我可以看到它是PITA。在这种情况下,需要修改MyHtmlEncode()
以适应这种情况。