0

私はオンライン出版購読サイトに取り組んでいます。ASP.NET MVC 1 で開発しました。

基本的に、ユーザーが雑誌や新聞を購入すると、その出版物へのパスが利用可能になります。ただし、キャッチ 22 は、セキュリティで保護されていないため、パブリケーションへのファイルパスを表示することは許可されていません。

ファイルパスをユーザーに表示せずに出版物を取得してダウンロードできる機能を構築しましたが、雑誌や新聞を表示するには同じディレクトリに他のファイルとフォルダーが必要な HTML ファイルであるため、これは問題です。

ディレクトリ フォルダ全体をダウンロードすると言うかもしれませんが、最大 200MB になる可能性があるため、これは不合理です。ファイルパスを取得してから、パブリケーションを iframe にロードするページにリダイレクトする可能性があると思いましたが、これはセキュリティ上のリスクになると思います。また、ブラウザーの知識が少しあれば誰でもソースを表示してそこからファイルパスを取得できます。 .

html ファイルを取得してブラウザに表示するための安全な方法を誰かが提案している場合は、助けていただければ幸いです。ありがとう。

4

2 に答える 2

1

簡単!秘密の URL をデータベース テーブルに保存し、代わりに ID で参照します。

次のように、新しいコントローラー アクションを設定します。

public ContentResult ShowNewspaper(long Id) {
    var mySecretURL = db.SecretURLs.Where(k=>k.Id == Id).FirstOrDefault(); // Grab URL entry the database
    string htmlCode = "";
    if(mySecretURL != null) {
         WebClient client = new WebClient();
         htmlCode = client.DownloadString(mySecretURL.URL);
    }else{
         htmlCode = "Page not found!";
    }
    return Content(htmlCode,"text/html");
}

したがって、次のように呼び出すと:

mysite.com/Home/ShowNewspaper/5

これにより、レコード 5 のデータベースに保存されている URL で HTML が読み込まれます。

さらに一歩進んで、リファラーを確認することで、このコントローラー アクションが (直接ではなく) サイトから呼び出されたかどうかを確認することもできます。

お役に立てれば...

編集: データベース レコードにも「承認済みユーザー ID」を保存し、ID が現在ログインしているユーザー ID と一致する場合にのみアクセスできるようにチェックして、このコントローラー アクションへの不正アクセス、つまりマガジンへの不正アクセスを防ぐこともできます。 ..そうでない場合は、ログイン画面にリダイレクトします

return Redirect("/MyLoginURL");
于 2013-05-10T09:21:16.210 に答える