在C#中处理XSS和Unicode字符

时间:2013-10-29 02:30:39

标签: c# unicode xss handle

我有一个处理Unicode字符的C#代码。以下代码也编码XSS代码。

String s = "<<SCRIPT>alert("Hack");//<</SCRIPT>";
var resultText = Microsoft.Security.Application.AntiXss.HtmlEncode(s);
string encodedValue = HttpUtility.UrlEncode(resultText, Encoding.UTF8).Replace("+", "")

txtResult.Text = encodedValue;// display in the text box in UI

但是上面以不同的方式显示数据。我想显示文本

<<SCRIPT>alert("Hack");//<</SCRIPT> 
文本框中的

(txtResult)

任何人都可以帮助我实现这一目标。 基本上我正在尝试处理XSS和Unicode字符。

1 个答案:

答案 0 :(得分:0)

void Main()
{
    string _js = @"<<SCRIPT>alert(""Hack+"");//<</SCRIPT>";

    // Break it down into bytes
    byte[] _bytes = UTF8Encoding.UTF8.GetBytes(_js);    

    // Use the single unicode character literal representation of the characters wanting to strip
    //      '+' = +, etc...
    byte[] _sanatizedBytes = _bytes.Where(b => b != '+').ToArray();

    // Dump the bytes back into a UTF8 string
    string sanitizedJavascript = UTF8Encoding.UTF8.GetString(_sanatizedBytes);

    string _safeJavascript = Microsoft.Security.Application.Encoder.HtmlEncode(sanitizedJavascript);

    string decode = HttpUtility.HtmlDecode(_safeJavascript);

    var txtdecoded = new TextBox() { Text = decode};    

}

这可能是最冗余的方式,因为你要打破它,运行你自己的敏感,然后重新插入它。

就我个人而言,我只会使用Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(_js);来删除所有列入黑名单的标签,例如脚本,以及它之间的任何内容,无论UTF8,ANSI等等。

我对你真正需要的东西感到有点困惑......所以,如果你觉得有必要进行投票,那么在做出决定之前,先让评论中的细节搞清楚。