我想看看我的编码是否正常工作,但是我做的示例在它返回页面后才恢复为非编码。
<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不受信任的输入用于a URL(例如a中的值) 查询字符串)单击 这里!
http://msdn.microsoft.com/en-us/library/aa973813.aspx
所以我的问题是我正在尝试查看某些内容是否正常工作(即为什么它会使查询字符串部分再次看起来正常)。
是否因为查询字符串不包含任何与众不同的内容。或者是将其重新编码为原始形式的东西?
答案 0 :(得分: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);
所有这一切都是<script>alert('Hello world');</script>
被写入屏幕,实际上是HTML中的<script>alert('Hello world');</script>
。没有消息框,没有实际执行的脚本,它只是屏幕上的良性文本。
答案 1 :(得分:0)
下面是危险查询字符串的示例。
<a href="results.aspx?q=<script>alert('Attack')</script>">Click Here!</a>
你真正应该测试的不仅仅是网址是否被编码 - 而是在你的网页上进行攻击时会发生什么。