MVC3 でユーザーがアクセスしている Web ページを取得する最善の方法を見つけようとしています。
ファイルのダウンロード機能を構築しています。ユーザーが自分の Web サイトからファイルにリンクされていない場合は、選択したページにリダイレクトしたいと考えています。
私は基本的に、最初に私の Web サイトを通過せずに、人々が私のファイルに直接リンクするのを阻止したいと考えています。
最も信頼できる方法でこれを行うにはどうすればよいですか?
MVC3 でユーザーがアクセスしている Web ページを取得する最善の方法を見つけようとしています。
ファイルのダウンロード機能を構築しています。ユーザーが自分の Web サイトからファイルにリンクされていない場合は、選択したページにリダイレクトしたいと考えています。
私は基本的に、最初に私の Web サイトを通過せずに、人々が私のファイルに直接リンクするのを阻止したいと考えています。
最も信頼できる方法でこれを行うにはどうすればよいですか?
非常に簡単な方法 (ほとんどの場合はこれでうまくいきます) はRequest.UrlReferrer
、コントローラーで at を確認することです。これには、訪問者の元の URL が含まれている必要があります。
MVC3 には、ベースとして ASP.NET がまだあります。したがって、ASP.NET のすべての機能も使用できます...
もう 1 つの方法は、IIS 拡張を使用することです => https://www.iis.net/community/default.aspx?tabid=34&g=6&i=1288 (Microsoft の LeechGuard)
これでとりあえず解決しました。ファイルに関する情報を表示するページにファイルのリクエストが来ると、表示されます。ファイルをダウンロードするには、ユーザーは同じページへのリンクをクリックします。
ユーザーがファイル自体の URL からファイルを要求していることをコードが検出すると、ファイルがユーザーに提供されます。
private bool RequestIsCommingFromSamePage()
{
if (Request.UrlReferrer == null)
return false;
string requestURL = Request.UrlReferrer.ToString();
string pageURL = Request.ServerVariables["HTTP_HOST"] + Request.RawUrl;
requestURL = requestURL.Replace("http://", "").Replace("https://", "");
if (requestURL == pageURL || pageURL == null || requestURL == null)
return true;
return false;
}