2016-04-01 11 views
-1

最近、悪意のあるユーザーがHTMLファイルを直接取得しないようにhttpHandlerを設定しました。私は前にこのようなことをしたことが一度もなかったし、多くの研究をした後、httpHandlerを使うのが最良の結果だったようだ。しかし、すべてのチュートリアルでハンドラを設定する方法が説明されていましたが、すべてが "今すぐ要求が正当かどうかを確認するだけです!これがどのように行われるか説明することなく説明します。HttpHandlerで要求が正当であるかどうかを確認する

他のドメインからの要求を停止する方法の例がたくさんあります。たとえば、イメージリーチを止めるなどです。私がしたいのは、Angularレイヤーで作成されたHTMLファイルの要求を許可し、ブラウザーで直接要求をブロックすることです。つまり、AngularがHTMLテンプレートをリクエストした場合は取得する必要がありますが、誰かが "mysite.com/static/templates/template.html"をブラウザバーに入力した場合はブロックする必要があります。

私が思いついた解決策は、Angularがすべてのリクエストでカスタムヘッダーを送信することです。 httpHandlerはこのヘッダーの存在を探し、ヘッダーが存在する場合はHTMLファイルを返します。したがって、要求がAngularエコシステム内から来ない場合、ヘッダーはなく、バウンスされます。この方法には2つの問題があります。

  1. 少し壊れています。私たちは、ユーザーからの報告が拒否されたときに(まれにしかない)報告していましたが、なぜこれが起こるのかを特定できませんでした。

  2. たとえば、javaScriptファイルでは機能しません。 JSファイルは同じ方法で読み込まれないので、同じ方法でそれらを保護することはできません。

要求は、ブラウザバーから、または合法的に私のUIから直接来たかどうかを伝えるためのより良い方法はありますか?

フロントエンドは角度があり、バックエンドは.NET 4.5です。

答えて

0

いいえありません。あなたができることはヘッダーを見ることです。 「悪意のある」ユーザーは、正当なヘッダーがどのようなものであっても複製し、データを取得することは自明です。

あなたは何が起こっているか考えてみると、URLの入力、ブラウザのリソースのダウンロード、またはajax呼び出し(ヘッダーを除く)に技術的な違いはありません。 httpsを使用していても、Fiddlerなどのツールや、現代の言語では2〜3行のコードで簡単に複製できます。

私はなぜこれをやっているのか分かりませんが、帯域幅や何かが原因であればキャッシングをお勧めします。それはここに入るトピックの詳細な方法ですので、私はそうしません。

あなたの後ろにあなたのファイルのセキュリティがある場合(たとえば、ブラウザのほかにjsファイルやhtmlファイルを見たいと思わない場合)、基本的に運が悪いです。可能でさえありません。

関連する問題