如何解决 HTML/aspx 站点中的反射跨站点脚本 (XSS) 漏洞
How to solve Reflected Cross-Site Scripting (XSS) Vulnerabilities in HTML/aspx site
我有这样的东西:
<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>
但它不起作用,因为所有页面都在已经有表单的母版页中。
有什么建议吗?
可能是这样的:
<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>
有几件事情你要考虑,主要的是处理XSS。
是的,您当前的实施很容易受到 XSS 攻击。
上下文编码
您至少应该对不受信任的数据(在本例中为查询字符串)进行上下文编码。
重要的一点是确保您获得正确的编码上下文,根据您的示例,您要为 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 应用程序安全参考资料
我有这样的东西:
<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>
但它不起作用,因为所有页面都在已经有表单的母版页中。 有什么建议吗?
可能是这样的:
<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>
有几件事情你要考虑,主要的是处理XSS。
是的,您当前的实施很容易受到 XSS 攻击。
上下文编码
您至少应该对不受信任的数据(在本例中为查询字符串)进行上下文编码。
重要的一点是确保您获得正确的编码上下文,根据您的示例,您要为 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 应用程序安全参考资料