全部:
我正在使用C#MVC4的项目遇到问题
在项目中,我接受用户的URL和其他参数,然后进行一些处理并将处理结果发送到用户提供的URL。
使用以下代码发送结果:
var context = HttpContext.Current;
context.Response.Write("<html><head>");
context.Response.Write("</head><body>");
context.Response.Write(string.Format("<form name=\"myform\" method=\"post\" action=\"{0}\" >", postUrl));
context.Response.Write("</form>");
context.Response.Write("<script type=\"text/javascript\">document.myform.submit();</script></body></html>");
context.Response.Write("</body>");
context.Response.Flush();
context.Response.Clear();
context.ApplicationInstance.CompleteRequest();
每当用户尝试像传递javascript%3aalert('xss')%2f%2f的url值之类的XSS时,JavaScript就会运行并显示弹出窗口。
在将URL传递给string.Format之前,我曾尝试过Antixss.HtmlEncode()对URL进行编码,但仍然无法正常工作。我也尝试过Antixss.UrlEncode(),但这会导致错误,因为表单未提交到URL。
请帮帮我,我有什么想念的吗?我还可以做些什么?
提前致谢。
您将需要一种三管齐下的方法来解决此问题。
防止XSS注入:
请注意,如果用户注入了url值
" /> <script>alert('xss')</script>
这也会使您容易受到攻击:
<form name="myform" method="post" action="" /> <script>alert('xss')</script>" >
因此,您应该使用该HttpUtility.HtmlAttributeEncode
函数来解决这一问题。
但是,不要停在那里。如前所述,您应该针对javascript:
样式URL进行投影。为此,我将确保URL以http://
或开头https://
。如果不是,则抛出一个SecurityException
应该在服务器端记录和处理的,并向用户显示一个自定义错误页面。
最后,您想防御公开重定向漏洞。这是通过将用户重定向到其他域来阻止网络钓鱼攻击。同样,请使用白名单方法,并确保重定向到的域是您自己的域之一。在这里进行解析时要小心,因为它很容易弄错-URLhttp://example.org?http://example.com
将会通过验证过滤器,用于example.com
许多写得不好的验证例程。我建议Uri
在.NET中使用该对象并通过该对象检索域,而不是滚动自己的字符串函数。
您还可以检查该URL是否是相对URL,并在可接受的情况下允许它。使用类似此功能的功能,该功能使用内置的.NET库来确保它是相对的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句