渗透测试小组告诉我,下面的URL导致了XSS攻击-
id=0&id=1369413198709cUjxb8IRCtTJcbYBHb0Qiph&id=1369413198709cUj
这是我的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"/>发布于 2013-05-24 21:11:41
不是的。这是不够的
this.location = "/test/DownloadReport?<%=request.getQueryString()%>";攻击者可能能够发送具有如下所示的查询字符串的链接
?</script><script>alert(1337)//或
?%22/alert('Pwned')对于那些可能点击链接并执行嵌入式代码的天真用户来说。
您必须在不受信任的输入被插入到模板的任何地方应用适当的转义策略。
显然,我不能根据您的设置测试这些字符串,而且如果您用它们进行测试,它们可能无法工作,因为浏览器通常会对查询字符串进行一些规范化,但是您不应该依赖它来保护您免受查询字符串中HTML元字符的影响。
https://stackoverflow.com/questions/16743043
复制相似问题