如何防止XSS攻击

时间:2013-05-24 20:21:33

标签: java jsp web-applications xss

渗透测试团队告诉我,下面的URL导致XSS攻击 -

https://some-site.com/test/jsp/download_msg.jsp?&report_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"/>

1 个答案:

答案 0 :(得分:1)

没有。这还不够

this.location = "/test/DownloadReport?<%=request.getQueryString()%>";

攻击者可能能够发送带有查询字符串的链接,如

?</script><script>alert(1337)//

?%22/alert('Pwned')

可能会点击该链接并执行嵌入代码的天真用户。

您必须在任何地方应用适当的转义政策 将不受信任的输入内插到模板中。


我显然无法针对您的设置测试这些字符串,如果您使用它们进行测试它们可能无效,因为浏览器经常对查询字符串进行一些规范化,但您不应该依赖它来保护您免受HTML元素的影响。查询字符串中的字符。