これは、2010 年以降の Internet Explorer の Web サイトの脆弱性というよりも、ブラウザの脆弱性です。
Checkmarx Research Labs は、ハッカーが Web アプリケーションを簡単に危険にさらす可能性がある Internet Explorer の新しい重大な脆弱性を特定しました (他のブラウザーもおそらく同じ方法で公開されます)。
これはブラウザーによる同一生成元ポリシーの違反であり、Web アプリケーションで修正する必要はありません。報告された脆弱性は、おそらくあなたが行っているリダイレクトを参照しています。
request.getSession().getAttribute("sesStrUID")!=null
調子。セッション値に基づいてサーバー側をリダイレクトしている場合、攻撃者は Web サイトを IFrame する可能性があり、リダイレクトしていることを検出すると、 nullsesStrUIDかどうかを推測できると言っています。sesStrUID
これは、ユーザーが壊れたブラウザーを使用している場合にのみ問題になります。ユーザーが最新のブラウザーを使用している場合、IMO を修正する価値はありません。安全性を高め、クリックジャッキング攻撃からも保護したい場合は、X-Frame-Options: DENYHTTP ヘッダーを出力してフレーミングを防ぐことができます。これは、IFrame バージョンの攻撃からのみ保護されることに注意してください。詳細に説明されているその他の攻撃ベクトルについては、この XSHM ペーパー を参照してください。
@adarの答えの後に編集:
Adar の回答は私のものと非常に似ており、ポスターがこれがまだ問題であると述べていることを除いて、ほとんど同じ情報を含んでいます。
locationただし、 HTTP ヘッダーを介してサーバー側をリダイレクトする場合、XSHM は問題になりません。HTTP 3xx最新のブラウザでは、リダイレクトによって の値history.lengthが増加することはないため、これを使用して、ユーザーが特定のサイトにログインしているかどうかを判断することはできません。
リダイレクト後に JavaScript コードを出力している場合
if(request.getSession().getAttribute("sesStrUID")!=null)
コードの場合、サーバー側をリダイレクトしている場合、XSHM が問題になります
<%
String redirectURL = "http://example.com/myJSPFile.jsp";
response.sendRedirect(redirectURL);
%>
そうすれば、あなたは無防備ではありません。
@adarの回答IIの後に編集:
@adar は正しいです: 次の攻撃シナリオを試した場合:
Login.jspIFrame で開く- 履歴にはLogin.jsp.
- 開いている - サーバーが HTTP 3xx で
ShowSecretInfo.jspリダイレクトする場合、サーバーが示す場合は同じままです- 1 ずつ増加します。Login.jsphistory.lengthShowSecretInfo.jsphistory.length
したがって、history.length増加する場合は、ユーザーがログインしていると判断できます。Windows 7 で IE 11 と Firefox 33.1 を使用して上記を再現できました。
ユーザーがログインしていない場合、(クエリなしで)に/ShowSecretInfo.jspリダイレクトすると仮定します。/Login.jsp
/ShowSecretInfo.jspIFrame で開く- 履歴には/ShowSecretInfo.jsp.
- IFrame src を
/Login.jsp-に設定しhistory.lengthます。増加しない場合は、ユーザーがログインしていることがわかります。
srcがすでに現在の URL に設定されている場合、Chrome はリダイレクトを試行しないようです。これを IE と Firefox で再現することもできました。