0

CSRF防止を追加する必要があるコードを継承し、struts2tokenSessionインターセプターを使用してこれを実行しようとしています。次のようにstruts2トークンタグを使用してフォームにトークンを追加しています。

<form id="updateObject" name="updateObject" action="<%=request.getContextPath()%>/prv/updateObject.action" method="POST">
    <fieldset class="x-fieldset">
        <legend>Update object - Action Required</legend>
        <div>...</div>
        <s:token />
        <s:hidden name="id" id="objectId" />
            more stuff here...
        <input type="submit" value="Update Object" onclick="javascript:return doUpdateObject('myAction');"/>
    </fieldset>
</form>

私のjavascript関数では、いくつかの検証ルールを追加/削除しています(必要なアクションに応じて、フォームを送信します:

function doUpdateObject(action){
    actionPanel.registerAction(action); // this function places the action name in an in-scope variable
    doUpdateObjectValidationSetup(action); // this function adds/removes jquery validation rules depending upon the action

    if($("#updateObject").valid()){
        $("form#updateObject").submit();
    }
    return false;
}

リクエストをインターセプトし、トークンを追加していますが、struts2tokenSessionインターセプターがinvalid.tokenを返しています。このインターセプターがなくても、コードは期待どおりに機能します。(struts2 xmlファイルは投稿されていません-必要に応じて関連するセクションを投稿します)。また、基本的なhtml送信ボタンを使用する(つまり、javascriptまたはjqueryを経由しない)他のページでtokenSessionインターセプターを使用しましたが、これも期待どおりに機能します。トークンを無効にしているのは何ですか?

注意:私が継承したプロジェクトでは、標準のhtml、struts2タグ、ExtJS、JQueryの奇妙な組み合わせを使用しています。いつかこれをクリーンアップしますが、現時点では、tokenSessionインターセプターをコード内でできるだけ早く機能させる必要があります(数百ページに同様の修正を適用する必要があるため...)。

ヘルプ/ポインタ/ヒントなどは大歓迎です!

よろしく、

ジョン

4

2 に答える 2

0

2 つの送信を生成していませんか? (Web サーバーのログを調べてください)

もしそうなら、おそらくこれが原因です:

onclick="javascript:return doUpdateObject('myAction');".

これは正しくありません。疑似プロトコルは、イベント ハンドラではなくjavascript:URL (ej) でのみ使用する必要があります。href="..."に置き換えますonclick="return doUpdateObject('myAction')"

ただし、問題がこれによって引き起こされているとは思えません。

于 2010-06-15T20:08:02.457 に答える
0

これは現在、変更なしで機能しています。完全な再構築、キャッシュの消去、再起動などを行っただけです。元の問題の原因がわかりません。時間を無駄にして申し訳ありません。

ジョン

于 2010-06-16T10:10:01.113 に答える