0

Azureストレージを使用するMVC3アプリケーションでBLOBを削除しようとしています。

削除されるblobのURIをコントローラーに渡そうとしていますが、エラーがスローされます。

A potentially dangerous Request.Path value was detected from the client (:)

これはhttps:ウリの部分からのものだと思うので、解析する必要がありますが、その方法がわかりません。このエラーを修正する方法を考えています。

ストレージからblobを削除するためのより適切な方法はありますか?

4

3 に答える 3

1

URLを適切にURLエンコードする必要があります。正しくエンコードされていないURLの例を次に示します。

http://foo.com/controller/action?param=http://bar.com

次のようになります。

http://foo.com/controller/action?param=http%3A%2F%2Fbar.com

または、次の形式のURLを使用している可能性があります。

http://foo.com/controller/action/https://bar.com

これはさらに悪いことです。URLのパス部分で特殊文字を使用する場合は、次のブログ投稿が役立つ場合があります。

于 2011-07-19T05:28:38.010 に答える
1

安全でないコンテンツを通過させたい場合は[ValidateInput(false)]、アクションに追加できます-ただし、これはセキュリティのために存在する何かを開きます-したがって、コードが安全であることが確実な場合にのみこれを行ってください-Aの最初の回答を参照してください潜在的に危険なRequest.Form値がクライアントから検出されました

于 2011-07-19T05:29:05.147 に答える
0

私はそれを修正することができました、そしてそれは他の2つの答えからのビットと主にスコット・ハンゼルマンのブログ投稿からのビットを必要とするので、解決策を要約したいと思います。

これを機能させるには、いくつかのことを行う必要があります。

  • あなた[ValidateInput(false)]の行動方法を身につけなさい。

  • Urlが適切にエンコードされていることを確認してください(例は上記の投稿に示されています)。これはblobVariableName.Uri.AbsoluteUri、ビューからコントローラーに渡す文字列としてを使用するときに実行されるため、そこで何もする必要はありません。

  • クエリ文字列を次のよう に作成します 。後者は機能しませんhttp://site/controller/action?blobid=http%3A%2F%2F...http://site/controller/action/http%3A%2F%2F...

ちなみに、私が始めてから、機能要件が変更され、データベースに各BLOBに関する情報が保存されるようになりました。これにより、BLOBのuri以外のパラメーターを渡すことができます。これは、はるかに安全な方法のようです。

コミュニティの多くは、URIを渡し、アプリケーションを開いて許可するのは悪い考えであることに同意しているようです。

于 2011-07-19T19:25:47.890 に答える