2017-01-29 4 views
1

(aurelia)アプリケーションのアップロードフォルダを開くdotnet core API(IIS8上)を設定しました。このようなフォルダへのアクセスを開けましたDotnet core:ブラウザ経由で画像への直接アクセスをブロックする最善の方法は何ですか?

app.UseFileServer(new FileServerOptions() 
     { 
      FileProvider = new PhysicalFileProvider(Configuration["ApiSettings:UploadsFolder"]), 
      RequestPath = new PathString("/uploads/"), 
      EnableDirectoryBrowsing = true 
     }); 

これは、アプリケーションがアップロードした画像をURLで開くことができるため、正常に動作します。今、URLがブラウザに直接入力されたときに、それらの画像へのアクセスをブロックしたいと思います。私はC#ソリューションを見たことがありますが、ドットネットのコアソリューションは見つけられませんでした。

私はミドルウェアを使用して、APIに送信されるリクエストを傍受しています。しかし、特定の画像要求をブラウザ経由で傍受してブロックすることはできませんでした。画像にアクセスできるのは、固定ドメイン上の私のaureliaアプリケーションだけです。

public async Task Invoke(HttpContext context) 
{ 
    StringValues referer; 
    context.Request.Headers.TryGetValue("Referer", out referer); 

    // Referer will contain the full URL of the image when requested 
    // via the browser. When its requested differently it will contain 
    // the url of the requesting application 
    if (referer.Any() && referer.First().Contains("/uploads/")) 
    { 
     context.Response.StatusCode = 401; 
     return; 
    } 

    await _next.Invoke(context); 
} 

画像への直接アクセスをブロックして特定のアプリケーションに画像を読み込ませることが最も良い方法を教えてもらえますか?

答えて

1

.NETのコアに到達する前に、IISの静的ファイルハンドラが要求を処理しているため、静的ファイルに対する要求が途中で発生することはありません。

「StaticFileModule」をIISの「モジュール」機能(.NET Core Webサイトまたはサーバーレベルのいずれか)から削除するだけで、要求が送信されます。ドキュメントによるとhttps://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#considerations

編集

ここではこれを言及公式.NETのコアのドキュメントだ

IIS静的ファイルハンドラが有効になっていて、ASPている場合。 NETコアモジュール(ANCM)が正しく構成されていない場合(たとえば、web.configがデプロイされていない場合)、静的ファイルが提供されます。

これは実際に私が上で述べたものとは逆です。静的ファイルハンドラを削除しても問題は解決するはずですが、ANCMの設定も確認する必要があります。

+0

返信いただきありがとうございます!だから '静的ファイルを削除している間'あなたは 'UseFileServer'を削除すると言っていますか?しかし、アップロードフォルダはもはやAPIで利用できなくなります。 ブラウザから直接URLを呼び出すとき(if local)、if文にヒットし、401を返しますが、ブラウザにはまだ画像が表示されます。 –

+0

いいえ、サーバー(またはローカルの場合はdev)のIIS(inetmgr)にアクセスし、Webサイトにアクセスして「モジュール」を選択し、「StaticFileModule」を削除します。すべてはGUIを介して。 –

+0

申し訳ありませんが、私はそれを行うことはできますが、ローカルで(dotnet cli経由で)ミドルウェアにヒットしますが、まだリクエストをブロックできません。それがどんなアイデアなのか? –

関連する問題