Puoi avere il meglio di entrambi i mondi sovrascrivendo il comportamento HtmlEncode. Questo si ottiene sovrascrivendo la classe HttpEncoder in questo modo:
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);
}
}
}
Dopo questo, devi solo fare riferimento alla tua classe di override in Web.config:
<system.web>
<httpRuntime encoderType="CustomHttpEncoder" />
La classe Encoder fornita qui è ciò che ho usato sui miei progetti al lavoro. La nostra suite di pentesting è MOLTO esigente per quanto riguarda la codifica dell'output, quindi la classe sopra semplicemente codifica ogni carattere nella stringa che gli viene assegnata. Sentiti libero di rimuovere il cappello di lamina e basta che MyHtmlEncode () codifichi solo determinati caratteri.