我已实施Request.QueryString["somestr"].ToString();
我通过执行HttpUtility.HtmlEncode(Request.QueryString["somestr"].ToString();
我仍然遇到用户可以执行的问题:
myfriendlydomain.com/?somestr ='; alert(WOO XSS SUCCEDED); test ='
如何防止这种情况发生?
根据要求:
//Code Behind
if(request.querystring["somestr"] != null)
{
AffiliatesEmail = HttpUtility.HtmlEncode(Request.QueryString["somestr"].ToString();
}
//Front End
<script type="text/javascript">
//<![CDATA[
/*** Do not change ***/
var SomeVAR = {};
SomeVAR.Tracking.Sale.orderRef = '<%= AffiliatesEmail %>';
//]]>
</script>
<script src="https://www.somethirdparty.com/somejscript.js" type="text/javascript" defer="defer"> </script>
这是我们的实施。之后的任何事情我都不相信是相关的。
答案 0 :(得分:2)
您可以使用JavaScriptStringEncode() Method来清理字符串并对其进行编码以防止这种情况发生。
另一种方法是使用AntiXSS库。
答案 1 :(得分:1)
通过了解使用AffiliatesEmail
字符串的上下文,有助于了解验证和清理字符串的过程。
比方说,我们知道AffiliatesEmail
只有在数字时才有效。这样,如果您拒绝任何未验证为数字的Request.QueryString["somestr"]
,您将受到保护。
现在,我怀疑AffiliatesEmail
实际上应该是有效的电子邮件地址。
使用这些知识,我们现在可以将其验证为电子邮件地址并拒绝其他所有内容:
using System.Net.Mail;
try
{
MailAddress ma = new MailAddress(AffiliatesEmail);
}
catch (FormatException fe)
{
//Email isn't valid, so don't output it to the client!!!
}
上面的代码只是验证字符串是否是电子邮件地址(由.NET定义) - 如果不是,那么我们不需要担心 是 < / strong>,因为我们根本不信任它。
所以不要过于依赖于在查询字符串中放置的东西 - 只要知道可接受的范围,就可以避免复杂的正则表达式和XSS清理程序。
答案 2 :(得分:0)
您需要验证每个查询字符串输入,以确保您有有效的数据。我不会直接将值写入页面。