【问题标题】:What does a dangerous query string look like?危险的查询字符串是什么样的?
【发布时间】:2010-06-19 21:26:11
【问题描述】:

我想看看我的编码是否有效,但是我制作的示例在返回页面后只是恢复为未编码。

<a href="http://search.msn.com/results.aspx%3fq%3dIamBad">Click Here!</a>

变回

<a href="http://search.msn.com/results.aspx?q=IamBad">Click Here!</a>

编辑

UrlEncode 不可信的输入用于 URL(例如 查询字符串)单击 这里!

http://msdn.microsoft.com/en-us/library/aa973813.aspx

所以我的问题是我正在尝试查看是否有问题(即为什么它使查询字符串部分再次看起来正常)。

是不是因为查询字符串中没有任何异常。还是有什么东西把它重新编码回原来的形式?

【问题讨论】:

  • 我不明白这个问题?为什么要编码?你的例子中的坏是什么意思?
  • 根据 MS 的说法,查询字符串中可能包含不受信任的输入,这可能是有害的并进行 XSS 攻击。见编辑
  • 我相信这里的每个人都知道这一点。你有什么问题?我还是一头雾水。
  • 我正在尝试验证我的代码是否实际上对查询字符串进行了编码。每次我通过萤火虫看它时,它看起来都不是。我试图弄清楚是否是查询字符串的输入很重要,或者是否有其他问题而不是编码。

标签: c# html security query-string


【解决方案1】:

您根本不会重新显示通过表单提交或通过查询字符串输入的用户输入,直接将其重新显示给该用户或将其存储在数据库中,然后将其显示给站点的其他用户。

假设你有一个像这样的超链接

/default.aspx?message=%3cscript%3ealert('Hello+world')%3b%3c%2fscript%3e

你做想做的就是这个

string message = Request.QueryString["message"];
if (!string.IsNullOrEmpty(message))
    directlyDisplayedLiteral.Text = message; 

因为会发生的是,当页面加载时,用户会看到屏幕上弹出一个消息框。这个脚本产生的只是一个愚蠢的小消息框,但它可能对您的用户做其他恶意的事情。

相反,您希望在显示输入之前对其进行编码,这样它就变得无害了。

string message = Request.QueryString["message"];
if (!string.IsNullOrEmpty(message))
    directlyDisplayedLiteral.Text = Server.HtmlEncode(message); 

所以所有发生的事情就是&amp;lt;script&amp;gt;alert('Hello world');&amp;lt;/script&amp;gt; 被写入屏幕,这实际上是HTML 中的&amp;lt;script&amp;gt;alert('Hello world');&amp;lt;/script&amp;gt;。没有消息框,没有实际执行的脚本,只是屏幕上的良性文本。

【讨论】:

    【解决方案2】:

    下面是一个危险的查询字符串示例。

    <a href="results.aspx?q=<script>alert('Attack')</script>">Click Here!</a>
    

    您真正应该测试的不仅仅是 URL 是否被编码 - 而是当攻击在您的页面上执行时会发生什么。

    【讨论】:

    • 嗨。我没有测试 url 是否被编码。我正在尝试通过 MS XSS 库在服务器端自己对 url 进行编码。我正在尝试验证它是否确实进行了编码
    • 反 XSS 库?您是否尝试使用 httpmodule 然后自动编码您的代码?它仅适用于服务器控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多