0

アプリケーションで X-Frame-Options ヘッダーの領域固有の動作を作成しようとしています。

次の構造を持つ単一の MVC 5 プロジェクトがあります。

  • MVC 構造の「ルート」にある複数の WebApiController
  • 2 つの「エリア」 - 1 つはメイン サイト (「アプリ」と呼ばれる) 用で、もう 1 つはブックマークレット (「ブックマークレット」と呼ばれる) 用です。

「アプリ」は私のアプリケーションのメインエリアです。「ブックマークレット」を使用すると、ユーザーがブックマークレットをクリックするたびに (ユーザーがどのサイトにいるかに関係なく)、ページが iFrame に表示されます。

API と「アプリ」領域を X-Frame-Options ヘッダーで保護したいのですが、ブックマークレットにこのヘッダーを含めてはなりません。その目的は、任意の Web サイトの iframe 内に表示することだからです (ユーザーはブックマークレットをクリックします)。 、iframe を開き、現在のページのタイトルと URL を保存するフォームを事前入力します。お気に入りのリンクをアプリケーションに保存する「お気に入りに追加」機能と考えてください)。

現在、Global.asax 内で以下を使用しています。

    保護された void Application_Start()
    {
        ...

        AntiForgeryConfig.SuppressXFrameOptionsHeader = true;                       
    }

残念ながら、これにより、すべての領域で X-Frame-Options ヘッダーが抑制されます。この動作をアプリケーションのルートや他の領域ではなく、ブックマークレット領域に特に適用する方法はありますか?

X-Frame-Options を開くことに関連するクリックジャッキングのセキュリティ リスクを認識していることに注意してください。サイトの「アプリ」領域内にログイン機能を配置することで、このリスクを軽減しようとしています (X-Frame-Options で保護したい)。したがって、「ブックマークレット」機能 (ユーザーがアクセスしている任意のサイトから開くことができるため、X-Frame-Options で保護することはできません) には、限られたデータ入力のみが含まれます。

4

1 に答える 1

2

このシナリオを処理するカスタム属性を作成できます。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class SuppressHeadersAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        //suppress headers here
        //filterContext has access to the HttpContext
    }
}

次に、このパターンに従う必要があるコントローラーを、この属性を持つ基本コントローラーから継承させます。

 [SuppressHeader]
 public class BaseController : Controller
 {
 }

 public class YourController : BaseController
 {
     //Do Stuff
 }

これを使用すると、必要なものだけのヘッダーを抑制することができます。

于 2014-03-28T17:53:35.873 に答える