ホームページ  >  記事  >  バックエンド開発  >  Asp.Net Core はミドルウェアを使用して画像のホットリンクを防止します

Asp.Net Core はミドルウェアを使用して画像のホットリンクを防止します

高洛峰
高洛峰オリジナル
2016-12-26 10:26:541425ブラウズ

1. 原則

ホットリンク防止を実装するには、まずホットリンク防止の実装原理を理解する必要があります。HTTP プロトコルには次のようなものがあります。 Referer と呼ばれるヘッダー フィールド。URL 形式を使用して、現在の Web ページまたはファイルへのリンク先を示します。言い換えれば、Web サイトはリファラーを通じて、ターゲット Web ページが訪問するソース Web ページを検出でき、それがリソース ファイルの場合は、それを表示する Web ページ アドレスを追跡できます。リファラーがソースを追跡すると、現時点では、ソースがこのサイトではないことが検出されると、ブロックされるか、指定されたページに戻されるため、処理が容易になります。 Web サイトをホットリンクから保護したい場合は、状況に応じて異なる方法で対処する必要があります。

Web サイトのサーバーが Apache を使用している場合、Apache に付属する URL 書き換え機能を使用すると、参照情報が他の Web サイトからのものである場合は、指定された画像にリダイレクトするか、または参照を確認することが簡単にできます。ウェブページ上で。

サーバーが IIS を使用している場合、ホットリンク対策機能を実装するにはサードパーティのプラグインを使用する必要があります。現在一般的に使用されている製品は ISAPI_Rewrite と呼ばれるもので、Apache と同様のホットリンク対策機能を実装できます。さらに、フォーラムはホットリンクを防ぐために「ログイン検証」方法を使用することもできます。

2. ホットリンク対策の実装

次に、アプリケーションとサイト ファイルを保護するために、ASP.NET Core にホットリンク対策テクノロジを実装しましょう。これには、ASP.NET Core のミドルウェア テクノロジを使用して、すべての受信要求を監視および処理し、これらの要求がアプリケーションからのものであるかどうかを確認する必要があります。

次のホットリンク防止ミドルウェア プログラムを作成してみましょう:

public class HotlinkingPreventionMiddleware
{
  private readonly string _wwwrootFolder;
  private readonly RequestDelegate _next;
 
  public HotlinkingPreventionMiddleware(RequestDelegate next, IHostingEnvironment env)
  {
    _wwwrootFolder = envWebRootPath;
    _next = next;
  }
 
  public async Task Invoke(HttpContext context)
  {
    var applicationUrl = $"{contextRequestScheme}://{contextRequestHostValue}";
    var headersDictionary = contextRequestHeaders;
    var urlReferrer = headersDictionary[HeaderNamesReferer]ToString();
 
    if(!stringIsNullOrEmpty(urlReferrer) && !urlReferrerStartsWith(applicationUrl))
    {
      var unauthorizedImagePath = PathCombine(_wwwrootFolder,"Images/Unauthorizedpng");
         
      await contextResponseSendFileAsync(unauthorizedImagePath);
    }
       
    await _next(context);
  }
}

このミドルウェアでは、ASP.NET Core の Request オブジェクトがリファラーを取得したい場合は、単に To be をカプセル化していないことがわかります。 HTTP ヘッダーを介してアクセスされます。

一般に、IApplicationBuilder 拡張機能があります:

public static class BuilderExtensions
{
  public static IApplicationBuilder UseHotlinkingPreventionMiddleware(this IApplicationBuilder app)
  {
    return appUseMiddleware();
  }
}

最後に、これを使用するには、Configure 関数で上記の拡張機能を呼び出すだけです。

app.UseHotlinkingPreventionMiddleware();

3. 本当に擁護できるのか?

アンチリーチを突破するにはどうすればよいですか?参照を確認する方法としては、まずページミドルウェアに宛先アドレスの別のページを入力してから、そのページの参照が宛先サイト独自のものになります。画期的なことが達成されます。この点で使用できるツールは数多くありますが、特に成熟した Web プロジェクト テスト パッケージ (HtmlUnit など) は、リクエスト内で直接参照を設定できます。

盗まれた Web サイトが https プロトコルを使用しており、画像リンクが http である場合、https から http へ開始されたリクエストにはセキュリティ規制によりリファラーが含まれず、それによりアンチホットリンクがバイパスされます。

最後に、この方法はある程度までしか防御できず、すべての攻撃を排除することは不可能であるとしか言えません。Nginx などの成熟したサーバー アプリケーション ソリューションを使用することをお勧めします。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

画像のホットリンクを防ぐための Asp.Net Core のミドルウェアの使用に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。