web-dev-qa-db-ja.com

X-Frame-Optionsが機能しないIIS web.config

私たちのサイトは現在クリックジャックから安全ではないので、web.configにアクセスして追加しました

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="X-Frame-Options" value="DENY" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

これは非常に単純なコードです。私の問題は、機能していないだけです私が持っている質問は:

  1. X-Frame-Optionsがヘッダー応答にあるかどうかを確認する方法はありますか?私はhttpfoxでそれを探しましたが、何も得られなかったので、web.configが実際にヘッダーに入れているかどうかを確認できません。
  2. なぜこれが機能しないのですか?テストまたは前進するにはどうすればよいですか?

Application_StartメソッドのGlobal.asaxに追加しようとしましたが、デバッグ時にこのメソッドを「ヒット」することはできません。ブレークポイントにはヒットしません。

private void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    HttpContext.Current.Response.AddHeader("x-frame-options", "DENY");

    LogHelper.Info("Cost of Care Web Application Starting");
}

私はそれをヘッドタグにまっすぐに追加しようとしたことを追加したいと思います、そして私はそうのようなメタタグにそれを追加しようとしました

<meta http-equiv="X-Frame-Options" content="deny">
18
Moi Hawk

私のコメントが質問に答えたので、ここに最終結果があります:

何らかの理由でX-Frame-Options web.configのドキュメントは、ドキュメントの説明どおりに動作しているように見えても、実際には機能していないようです。

簡単な回避策は、次を使用してヘッダーを手動で設定することです。

Response.AddHeader("X-Frame-Options", "DENY");

例外なしですべてのリクエストにこのセットが必要な場合は、Application_BeginRequest to Global.asax:

protected void Application_BeginRequest()
{
    Response.AddHeader("X-Frame-Options", "DENY");
}
18
siva.k

X-Frame-Optionsヘッダーを使用して、ページをIFRAMEに配置できるかどうかを制御できます。 Framesniffing技術は、被害者のサイトをIFRAMEに配置できることに依存しているため、Webアプリケーションは適切なX-Frame-Optionsヘッダーを送信することで自身を保護できます。

特定のサイトのすべての応答にX-Frame-Optionsヘッダーを追加するようにIISを構成するには、次の手順に従います。

  1. インターネットインフォメーションサービス(IIS)マネージャーを開きます。
  2. 左側の[接続]ウィンドウで、[サイト]フォルダーを展開し、保護するサイトを選択します。
  3. 中央の機能リストでHTTP Response Headersアイコンをダブルクリックします。 enter image description here
  4. 右側の[操作]ウィンドウで、[追加]をクリックします。
  5. 表示されるダイアログボックスで、[名前]フィールドにX-Frame-Optionsと入力し、[値]フィールドにSAMEORIGINまたはDENYと入力します。 enter image description here
  6. [OK]をクリックして変更を保存します。
19
Voltur

ヘッダーがここで2回生成されるため、siva.kの答えはMVC5に関連して機能しません。次のコードが機能するはずです。

protected void Application_Start()
{
  //  MVC5 generates the "X-Frame-Options SAMEORIGIN" header by default, the following line disables the default behaviour
  System.Web.Helpers.AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
}

protected void Application_BeginRequest() 
{
  Response.AddHeader("X-Frame-Options", "DENY");
}

SuppressXFrameOptionsHeaderフラグはここで言及されました: https://stackoverflow.com/a/20262211/393644

11
ViRuSTriNiTy

考慮すべきもう1つの事項を次に示します。

RESTベースのサイトで非常に一般的です)別のバックエンドプロジェクトとUIプロジェクトがある場合、UI web.configにX-Frame-Optionsを必ず配置してください。おそらくクロスサイトコールを許可しているため、APIプロジェクトにヘッダーを追加しても意味がありません。

3
MarzSocks
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Content-Security-Policy" value="default-src: https:; frame-ancestors 'self' X-Frame-Options: SAMEORIGIN" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

以前に減価償却されていなかった現在のコーディングを利用するには、web.configエントリがコンテンツセキュリティポリシーの下にある必要があります。コンテンツセキュリティポリシーのvalue="default-src: https:の値は、Webサイトに固有です。

重要なコンテンツは「value = "default-src:https:」の後にありますが、最も重要なのはコンテンツセキュリティポリシーに含まれています。

2
Brian Kunick

一部のファイルの種類(.aspおよび.htmファイル)がこのメカニズムによって追加されたX-Frame-Optionsヘッダーを取得しており、他の種類(.js)は取得していないことがわかりました。 IIS Adminユーティリティを使用して、アプリケーションレベルからヘッダーを削除し、サーバーレベルで追加すると、すべてのファイルにヘッダーが追加されました。

1
BlueMonkMN