13

JSESSIONID Cookie に httponly フラグを設定しようとしています。ただし、私は Java EE 5 で作業しており、setHttpOnly(). doPost()最初に、を使用して、サーブレット内から独自の JSESSIONID Cookie を作成しようとしましたresponse.setHeader()

それがうまくいかなかったとき、私は試しresponse.addHeader()ました。それもうまくいきませんでした。次に、サーブレットがセッションを JSESSIONID Cookie に変換し、それを http ヘッダーに挿入する処理を行っていることを知りました。そのため、その Cookie を操作するには、フィルターを作成する必要があります。setHeader()フィルターを書いて/で遊んでみましたaddHeader()が、やはり役に立ちませんでした。

次に、応答オブジェクトがフィルターに到達する前にいくつかのフラッシュ/クローズ アクションが行われていることを知りました。そのため、データを操作したい場合は、それを拡張HttpServletResponseWrapperして に渡す必要がありfilterChain.doFilter()ます。これは完了しましたが、まだ結果が得られません。明らかに私は何か間違ったことをしていますが、何がわかりません。

これが当面の質問に関連しているかどうかはわかりませんが、サーブレットからブラウザーに返される html ドキュメントはありません。実際に起こっていることは、一部のオブジェクトが取り込まれ、JSP ドキュメントに返されることだけです。私は、Session オブジェクトが JSESSIONID Cookie に変換され、ブラウザーに送信される前に、要求に追加されたオブジェクトと共に http ヘッダーにラップされていると想定しています。

喜んでコードを投稿したいと思いますが、最初に理論の誤解が原因で問題が発生する可能性を排除したいと思います。

4

2 に答える 2

11

Cookie は servletcontainer によって管理されるためJSESSIONID、この設定は servletcontainer 固有です。使用しているものが不明であるため、サーブレットコンテナを探す必要がある方向がわかるように、 Apache Tomcat 6.0useHttpOnlyを対象とした回答を次に示します。webapplication の<Context>要素の属性を に設定する必要がありますtrue

<Context useHttpOnly="true">
    ...
</Context>

この要素に関するTomcat のドキュメントも参照してください。<Context>

于 2010-06-07T20:00:11.933 に答える
5

これは Java EE 5 で使用できます。

Java EE 6 より前のバージョンの Java Enterprise Edition の一般的な回避策は、SET-COOKIE http 応答ヘッダーを、明示的に HttpOnly フラグを追加するセッション Cookie 値で上書きすることです。

String sessionid = request.getSession().getId();
// be careful overwriting: JSESSIONID may have been set with other flags
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");

ソース: https://www.owasp.org/index.php/HttpOnly

私はフィルターにそれをテストします

于 2013-06-21T11:24:34.830 に答える