web-dev-qa-db-ja.com

Java WebアプリケーションのhttponlyとセッションCookieを設定する方法

XSS(クロスサイトスクリプティング)の問題に取り組んでいます。私のアプリケーションは、Oracle Weblogicポータルで実行されます。サーブレットバージョン2.5を使用します。

以下の3行のコードをフィルターに追加して、httponlyと安全なcookieを設定しました。

_String sessionid = req.getSession().getId();
res.setHeader("Set-Cookie", "JSESSIONID=" +  sessionid + ";HttpOnly");
res.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");
_

問題は、同じブラウザーでログアウトしてすぐにログインしたときです。ログインできますが、その後、jspページでセッションタイムアウトの問題が発生します。 weblogic関連のAPIを使用しています。 request.getuserprinical() apiはnullを返します。nullに設定されていると思います。

どんなアイデアでも共有してください。

Httponlyまたはセキュアフラグを設定する他の方法がある場合は、助けてください。

13
Kiran

Webコンテナーの仕様によっては、アプリ内のコンテナー管理セッションCookieを変更すると、アプリサーバーが既存のセッションを破棄して新しいセッションを作成する場合があります。これはTomcatで確認しましたが、Weblogicでも同様です。

サーブレット3.0を使用している場合、実際にすべてのセッションCookieが次のフラグメントでHttpOnlyおよびセキュアであることを確認するようにアプリケーションサーバーに指示できます。

<session-config>
  <cookie-config>
    <secure>true</secure>
    <http-only>true</http-only>
  </cookie-config>
</session-config>

これは、フィルターを使用してCookieを手動でハッキングするよりも優れたアプローチです。

参考までに、サーブレットベースのアプリにセキュリティ関連の応答ヘッダーを挿入する Javaライブラリ も作成しました。

20
Jason Nichols

HttponlyフラグとSecureフラグの両方を設定するには、次の構文を使用する必要があります

JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure
1
Koray Güclü