3

私の JSP の次のコードは、input タグでクロス サイト スクリプティングの脆弱性を引き起こしました。

<form name="acctFrm" method="post" action="<%=contextPath%>/form/acctSummary?rpt_nm=FIMM_ACCT_SUMM_RPT">
<table>
 <tr>
  <td>Account Id:</td>
  <td>
   <input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<%=rptBean.getAcctId()%>"/>
   <a href="javascript:doAcctSubmit()"><img class="tbl1" src="<%=contextPath%>/img/Submit.gif" border="0" /></a>
  </td>
 </tr>
</table>
</form>

侵入テスト中に、次のようにタグの値属性にアラート スクリプトを挿入することで、ユーザーにランダムなメッセージを警告することができました。

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="1"><script>alert(12345)</script>" />

ここで何が問題で、何が修正されるのでしょうか。

XSS に関するいくつかのオンライン リファレンスを読んでいましたが、何が問題なのか 100% 確信が持てませんでした。

どんな助けでも大歓迎です。

ありがとう、ディーナ

4

4 に答える 4

6

私は次の解決策を使用しました、

value 属性のスクリプトレットが問題です。jstl タグに置き換えました。jstl タグには、xss の問題を回避するためのエスケープ メカニズムが組み込まれていることをどこかで読みました。

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<c:out value=${rptBean.acctId}"/>"/>

これは私の問題に適しています。

ありがとう

于 2012-08-14T18:06:45.347 に答える
2

侵入テスターは、 rptBean.getAcctId() が任意の文字列を返すようにセッションを操作できたようです。引用符と右括弧を挿入できれば、タグを「強制的に閉じて」input独自のscriptタグを挿入できます。

侵入テスターは文字列を返すメソッドを取得したよう1"><script>alert(12345)</script>です。

これは、ページへの書き込み時にデータをエスケープする必要があることを示しています。jsp での HTML のエスケープに関する回答をご覧になることをお勧めします。

また、ブラウザが「正しく」レンダリングするために、コードが「完全に」フォーマットされている必要はないことを覚えておいてください。攻撃者が XSS フィルターを回避しようとする方法については、次のリンクを参照してください。

ユーザーデータは常に「危険」なものとして扱い、ページに表示するときは注意してください。

于 2012-08-13T19:33:56.960 に答える
1

jstl値属性でタグを使用するとタグ<c:out value="">でエラーが発生するようですがjstl <form options>

詳細情報 JSP/サーブレット Web アプリケーションでの XSS 防止

于 2016-07-20T05:51:09.723 に答える
0

返されたデータがDBからのものである場合getAcctId()、クライアントに送信する前にフィルタリングできます。たとえば、check is data は数値である必要があります。

于 2012-10-02T20:10:43.447 に答える