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

时间:2016-02-23 12:49:10

标签: html asp.net security query-string xss

我有这样的事情:

<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>

但它不起作用,因为所有页面都在已有表单的母版页中。 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您需要考虑几件事,主要的是要处理XSS。

是的,根据您当前的实施,您很容易受到XSS攻击。

内容相关编码

至少你应该做的是对不受信任的数据(在这种情况下是查询字符串)的CONTEXTUALLY编码。

重要的一点是确保您获得正确的编码上下文,根据您的示例,您希望编码HtmlAttribute。

根据您使用的.Net框架的版本,您有两种选择:

.NET Framework 4.6和4.5 - 使用System.Web.Security.AntiXss.AntiXssEncoder class

对于较旧的框架,请下载Microsoft Anti-Cross Site Scripting Library V4.2

然后你的代码看起来像这样:

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

有关XSS读取的更多信息:

隐藏字段

在您的示例中,您将信息放入隐藏字段中。确保您不是盲目信任这些数据,用户可以轻松查找和修改这些值(使用Chrome中没有插件的开发人员工具)。

参考文献:

常规Web应用安全参考

答案 1 :(得分:0)

可能是这样的:

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