asp.net如何解决 HTML/aspx 站点中的反映跨站点脚本 (XSS) 漏洞

标签: Asp.net HTML
发布时间: 2017/3/26 0:58:01
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这样的事情︰

<td>
     <a href="pagina3.aspx?u=<%=request.querystring.get("u")%>&t=2&p=<%=Request.QueryString.Get("p")%>">
         <img src="image.png" />
     </a>
 </td>

但这种方式有一个 XSS 漏洞检测到。还有一个适当的办法,使用查询字符串,避免出现安全漏洞或者我要改变我传递参数的方式? 我试过这样的事情︰

    <td>
        <form method="post" action="pagina3.aspx">
            <input type="hidden" value="<%=request.querystring.get("u")%>" name="u" />
    <input type="hidden" value="2" name="t" />
    <input type="hidden" value="<%=request.querystring.get("p")%>" name="p" />
<input type="image" value="submit" src="image.png" alt="submit Button" />
        </form>
     </td>

但它不工作,因为每一页都是在已经有一个窗体的主网页。 任何建议吗?

解决方法 1:

有几件事情要考虑,其中最主要有对付 XSS。

是的与你当前的执行你是易受 XSS 攻击。

语境的编码

至少你应该做什么上下文编码的不受信任的数据 (在本例中的查询字符串)。

重要的一点要确保您得到正确的上下文的编码,每你的榜样,你想要编码为 HtmlAttribute。

取决于你使用的什么版本的.Net 框架,你有两个选项︰

.NET 框架 4.6 和 4.5-使用System.Web.Security.AntiXss.AntiXssEncoder 类

对于较旧的框架,下载微软反跨站点脚本库 V4.2

然后您的代码将如下所示︰

<input type="hidden" 
       value="<%= AntiXssEncoder.HtmlAttributeEncode(request.querystring.get("u")) %>" 
       name="u" />

有关 XSS 读取的详细信息︰

隐藏的字段

在您的示例中您把信息到隐藏字段。 请确保你不盲目地信任此数据,这是便于用户查找和修改的值 (它与铬与无插件开发人员工具)。

参考文件︰

一般 Web 应用程序安全的引用

官方微信
官方QQ群
31647020