2

侵入テストチームから、以下の 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"/>
4

1 に答える 1

1

いいえ、十分ではありません

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

攻撃者は、次のようなクエリ文字列を含むリンクを送信できる可能性があります

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

また

?%22/alert('Pwned')

リンクをクリックして埋め込まれたコードを実行する可能性のあるナイーブなユーザーに。

信頼できない入力がテンプレートに挿入されるすべての場所に、適切なエスケープ ポリシーを適用する必要があります。


これらの文字列をあなたのセットアップに対してテストすることはできません.ブラウザはクエリ文字列の正規化を行うことが多いため、これらの文字列をテストしても機能しない可能性があります.文字列。

于 2013-05-24T21:11:41.043 に答える