まあ、それは最悪です。
これは、SecurityHeaders.com で F 評価を受けた私のポッドキャスト Web サイトです。どうしたんだ?この数か月前にお世話になりました!
最近、Windows から Linux on Azure に移行しました。
Windows で IIS を使用している場合、web.config に次のようなセクションを作成できます (実際に作成しました)。
<ブロック引用>私はいくつかのカスタムのものを追加したことに注意してください。これをコピーして貼り付けるだけではないことを確認してください.あなたのもの、あなたのものを作ってください。
サイトが機能することを確認するために、多数のドメインをホワイトリストに登録したことに注意してください。また、アイデアではない「unsafe-inlines」がいくつかあることにも注意してください。
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000"/>
<add name="X-Content-Type-Options" value="nosniff"/>
<add name="X-Xss-Protection" value="1; mode=block"/>
<add name="X-Frame-Options" value="SAMEORIGIN"/>
<add name="Content-Security-Policy" value="default-src https:; img-src * 'self' data: https:; style-src 'self' 'unsafe-inline' www.google.com platform.twitter.com cdn.syndication.twimg.com fonts.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com cse.google.com cdn.syndication.twimg.com platform.twitter.com platform.instagram.com www.instagram.com cdn1.developermedia.com cdn2.developermedia.com apis.google.com www.googletagservices.com adservice.google.com securepubads.g.doubleclick.net ajax.aspnetcdn.com ssl.google-analytics.com az416426.vo.msecnd.net/;"/>
<add name="Referrer-Policy" value="no-referrer-when-downgrade"/>
<add name="Feature-Policy" value="geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';"/>
<remove name="X-Powered-By" />
<remove name="X-AspNet-Version" />
<remove name="Server" />
</customHeaders>
</httpProtocol>
...
ただし、IIS を使用していない場合、つまりコンテナーまたは Linux で ASP.NET アプリを実行している場合、これは無視されます。私は最近 Linux に移行したので、(ここでテストを行わなかったのは残念ですが) Linux は問題なく動作すると思い込んでいました。
私のサイトは Azure App Service for Linux でホストされているため、これらのヘッダーを同じ方法で出力したいと考えています。オープン ソースの NuGet ライブラリの形で役立ついくつかの優れた選択肢があります。 ASP.NET Core ミドルウェア パイプラインを使用すると、これらのヘッダーが出力され、Windows と Linux の両方で同じように機能します。
ASP.NET Core 用の NWebsec Security Libraries を使用します。必要なヘッダーを追加するための簡単で流暢な方法を提供します。
<ブロック引用>明確にするために: はい、私またはあなたは AddHeader を使用してこれらのヘッダーを手動で追加できますが、これらの単純なライブラリにより、コンマとセミコロンが正しいことが保証されます。また、高速で使いやすい厳密に型指定されたミドルウェアも提供します。
上記と同じ web.config を取り、それを Startup.cs の Configure Pipeline with NWebSec に変換すると、次のようになります。
app.UseHsts(options => options.MaxAge(days: 30));
app.UseXContentTypeOptions();
app.UseXXssProtection(options => options.EnabledWithBlockMode());
app.UseXfo(options => options.SameOrigin());
app.UseReferrerPolicy(opts => opts.NoReferrerWhenDowngrade());
app.UseCsp(options => options
.DefaultSources(s => s.Self()
.CustomSources("data:")
.CustomSources("https:"))
.StyleSources(s => s.Self()
.CustomSources("www.google.com","platform.twitter.com","cdn.syndication.twimg.com","fonts.googleapis.com")
.UnsafeInline()
)
.ScriptSources(s => s.Self()
.CustomSources("www.google.com","cse.google.com","cdn.syndication.twimg.com","platform.twitter.com" ... )
.UnsafeInline()
.UnsafeEval()
)
);
Feature-Policy と呼ばれる、NWebSec が (まだ) サポートしていない実験的な HTTP ヘッダーが 1 つあります。これは、Web サイトがサーバー側で「私のサイトでは Web カメラの使用が許可されていません」と宣言できる方法です。これにより、悪意のある人物が Web カメラやその他のクライアント側機能を使用するローカル スクリプトを挿入するのを防ぐことができます。
私ができることを強調するためと、選択したセキュリティ ライブラリによって制限されないようにするために、手動で行います。
<ブロック引用>注: もう 1 つの優れたセキュリティ ライブラリは、Feature-Policy やその他の優れた機能を含む Andrew Lock の NetEscapades です。
これは、すべての応答に Feature-Policy ヘッダーを追加するだけの単一のミドルウェアです。
//Feature-Policy
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Feature-Policy", "geolocation 'none';midi 'none';notifications 'none';push 'none';sync-xhr 'none';microphone 'none';camera 'none';magnetometer 'none';gyroscope 'none';speaker 'self';vibrate 'none';fullscreen 'self';payment 'none';");
await next.Invoke();
});
ここで、コミット、ビルド、デプロイ (すべて Azure DevOps を使用して自動的に行われます) を行い、サイトを再度スキャンします。
これは非常に簡単で、1 時間もかかりませんでした。走行距離は異なる場合がありますが、それが一般的な考え方です!
スポンサー :Dotfuscator のメーカーである PreEmptive を使用して、リバース エンジニアリングや改ざんからアプリを保護します。 Dotfuscator は 2003 年以来、Microsoft Visual Studio に組み込まれています。プロフェッショナル ライセンスの節約については、HANSELMAN に言及してください!