JBossで実行されているJavaWebアプリケーションで、特定のタイプのセッションハイジャックであるセッション固定を防止する必要があります。ただし、JBossでは標準のイディオムが機能しないようです。これは回避できますか?
4 に答える
この欠陥(ここにあります)は、解決策への道を示しています。JBossで実行されるTomcatインスタンスは、デフォルトの「false」ではなく、emptySessionPath="true"で設定されます。これはで変更できます.../deploy/jboss-web.deployer/server.xml
; HTTPコネクタとAJPコネクタの両方にこのオプションがあります。
この機能自体は、コンテキストパス( http://example.com/fooの「foo」など)がJSESSIONIDCookieに含まれないようにするために使用されます。falseに設定すると、一部のポータルフレームワークを使用して構築されたものを含む、クロスアプリケーション認証に依存するアプリケーションが破損します。ただし、問題のアプリケーションに悪影響を与えることはありませんでした。
1 つの回避策は、クライアント アドレスをセッションに保存することです。応答ラッパーは、セッションに設定されたクライアント アドレスがセッションにアクセスするものと同じであることを検証する必要があります。
フォーラムの1つから以下のコード設定スニペットを知りました。そして、以下の行を追加しました。しかし、アプリケーションにログインした後とログインする前にセッション ID を印刷すると、同じです。セッション固定をテストするにはどうすればよいですか。
D:\jboss-5.1.0.GA\bin\run.cof ファイルに次の行を追加します。「JAVA_OPTS=%JAVA_OPTS% -Dorg.apache.catalina.connector.Request.SESSION_ID_CHECK=false」を設定します
jboss アプリケーションの各 context.xml で。D:\jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\context.xml
この問題とそれが発生する特定のケースは、Tomcat および JBoss の問題です。Tomcat は emptySessionPath="true" 効果を共有します (実際、JBoss は Tomcat から継承します)。
セッション固定攻撃を防ごうとすると、Tomcat と JBoss のバグのように見えますが、サーブレット仕様 (少なくともバージョン 2.3) では、特定のロジックに従って JSESSIONID を定義または再定義する必要はありません。おそらく、これは後のバージョンでクリーンアップされています。