0

我正在尝试删除使用 azure 存储的 mvc 3 应用程序中的 blob。

我正在尝试将要删除的 blob 的 Uri 传递给控制器​​,但是会引发错误:

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

我认为这是来自https:Uri 的一部分,我需要将其解析出来,但是我不知道该怎么做。我想知道如何解决这个错误。

有没有更优雅的方式从存储中删除 blob?

4

3 回答 3

1

您必须正确地对您的网址进行 URL 编码。这是一个编码错误的 url 示例:

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

它应该是这样的:

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

或者,也许您有以下形式的网址:

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

我能够修复它并且我想总结一下解决方案,因为它需要其他两个答案中的一些内容,并且主要来自Scott Hanselman 博客文章中的一些内容。

你需要做一些事情来完成这项工作:

  • [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 回答