如何在.Net中的HtmlInputText控件中编码特殊字符?

时间:2016-04-12 16:23:51

标签: c# asp.net

我有一个输入控件

<input id="firstNameField" type="text" runat="server" />

我给它一个值服务器端

firstNameField.Value = "Me!"

如何编码“!”输出的字符?我试过这个:

firstNameField.Value = "Me&#33;"

但.Net以此回应:

<input name="firstNameField" type="text" id="firstNameField" value="Me&amp;#33;" />

让用户在文本框中看到Me&#33;。据我所知,这是.Net内置XSS保护的一部分。如何让.Net对除&符号以外的特殊字符进行编码?

2 个答案:

答案 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="&#77;&#101;&#33;" />

这很适合我的目的,但在其他情况下我可以看到它是PITA。在这种情况下,需要修改MyHtmlEncode()以适应这种情况。