渗透测试团队告诉我,下面的URL导致XSS攻击 -
这是我的download_msg.jsp
代码 <% String download_msg = null;
if (session == null || session.getAttribute("user") == null) {
download_msg = "Error message";
} else {
download_msg =
(OLSUser)session.getAttribute("user")).getReportInfo().getDownloadMsg();
}
%>
<html>
<head>
<SCRIPT LANGUAGE='JavaScript' SRC='/Test/test.js'></SCRIPT>
<SCRIPT LANGUAGE='JavaScript'>init('StmsReps');</SCRIPT>
<script language="JavaScript">
function redirect() {
if (window.focus)
self.focus();
this.location = "/test/DownloadReport?<%=request.getQueryString()%>";
}
</script>
<title>XSS</title>
</head>
<body marginwidth='0' marginheight='0' onload='javascript:redirect()'>
<table width='90%' height='100%' align='center' border='0' cellspacing='0'
cellpadding='0'>
<tr>
<td align='center' class='header2'> <%= download_msg %></td>
</tr>
</table>
</body>
</html>
我发现jstl可以处理XSS攻击。如果能做到以下情况,那么请您提出建议吗?或者我是否需要做其他事情?
<c:out value="<%= download_msg %>" escapeXml="true"/>
答案 0 :(得分:1)
没有。这还不够
this.location = "/test/DownloadReport?<%=request.getQueryString()%>";
攻击者可能能够发送带有查询字符串的链接,如
?</script><script>alert(1337)//
或
?%22/alert('Pwned')
可能会点击该链接并执行嵌入代码的天真用户。
您必须在任何地方应用适当的转义政策 将不受信任的输入内插到模板中。
我显然无法针对您的设置测试这些字符串,如果您使用它们进行测试它们可能无效,因为浏览器经常对查询字符串进行一些规范化,但您不应该依赖它来保护您免受HTML元素的影响。查询字符串中的字符。