1

アプリケーションの CSRF 脆弱性を修正するために、CSRFGuard ライブラリを組み込んでいます。ただし、ここで指定されているように構成した後、アプリケーションをナビゲートすると、ログに次のメッセージが表示されます。

WARNING: potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:169.xx.x.xxx, uri:/myapp/MyAction, error:request token does not match session token)

以下を含めることにより:

<script src="/sui/JavaScriptServlet"></script>

私のmain.jspページでは、リンクはすべて組み込まれていますCSRFGuard token

......./myapp/MyAction?CSRFTOKEN=BNY8-3H84-6SRR-RJXM-KMCH-KLLD-1W45-M18N

そのため、リンクが期待値以外のトークンを渡す原因となる可能性のある間違ったことを理解できません。

分かりやすくするための追加情報があれば教えてください。

4

3 に答える 3

1

誰かが同様の問題に出くわした場合:

IE を使用してアプリにアクセスすると、AJAX 呼び出しにトークンが渡されないことが判明しました。これにより、トークンが更新されますが、既にレンダリングされたページのリンクが残り、クリックすると不一致が発生します。

ソースからCSRFGuardを自分で構築し、追加のログを追加することで問題を発見しました。

于 2013-07-01T23:31:36.603 に答える
0

Primefaces commandlink と commandbutton は、csrfguard JavaScript の誤動作を引き起こすようです。これら 2 つのコンポーネントを ajax を true (デフォルト) に設定して使用すると、ajax 呼び出し後にトークンが挿入されるのを防ぐことができます。

于 2015-04-15T14:02:34.050 に答える
-1

考えられる修正の 1 つは、Owasp.CsrfGuard.js ファイルの次の 2 行を変更することです。

変化する

 function injectTokenForm(form, tokenName, tokenValue, pageTokens) {
    var action = form.attribute("action");

 function injectTokenForm(form, tokenName, tokenValue, pageTokens) {
    var action = form.attributes["action"].value;

変化する

 function injectTokenAttribute(element, attr, tokenName, tokenValue, pageTokens) {

    location = element.getAttribute(attr);

 function injectTokenAttribute(element, attr, tokenName, tokenValue, pageTokens) {
    var location = null;
    if (attr == "action") {
        location = element.attributes[attr].value;

    } else {
        location = element.getAttribute(attr);
    }
于 2013-07-09T15:45:06.310 に答える