【问题标题】:Handle XSS and Unicode characters in C#在 C# 中处理 XSS 和 Unicode 字符
【发布时间】:2013-10-29 02:30:38
【问题描述】:

我有一个处理 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 字符。

【问题讨论】:

  • 这还能编译吗?您需要转义这些引号。
  • 基本上是我设计的一个例子,但我正在寻找解决方案
  • 什么是txtResult?一些网络表单控件的Text 属性采用标记和其他纯文本。对于纯文本控件,根本不需要转义。我不确定 URL-escape-and-remove-pluses 步骤应该实现什么。

标签: c# unicode xss handle


【解决方案1】:
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 等。

我有点困惑,你真正需要什么......所以如果你觉得有必要投反对票,那么在做出决定之前,让我们在 cmets 中讨论细节。

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2014-06-14
    • 1970-01-01
    • 2011-04-07
    • 2012-03-03
    • 2018-12-05
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多