【问题标题】:Protecting folders in MVC在 MVC 中保护文件夹
【发布时间】:2012-06-03 10:20:06
【问题描述】:

我的内容文件夹中有一些文件,我不希望用户在未经授权的情况下下载这些文件。如何防止用户通过在地址栏中键入 ...Content/{filename} 来访问文件?

【问题讨论】:

    标签: asp.net-mvc model-view-controller


    【解决方案1】:

    一种方法是将它放在 IIS 的上下文之外,而不是将它们放在 C:\inetpub\wwwroot

    将其更改为C:\temp\files

    在您的数据库中有一个与文档名称关联的 GUID,并使用 GUID 显示文件的链接。

    在您的控制器操作中,您只需接受 GUID,获取文件名,然后在响应中提供文件。

    【讨论】:

      【解决方案2】:

      有几种可能性。第一个包括在 web.config 中使用 <location> 标签:

      <location path="Content">
          <system.web>
              <authorization>
                  <deny users="?" />
              </authorization>
          </system.web>
      </location>
      

      另一种可能性是将这些文件放在任何人都无法访问的文件夹中(例如 App_Data 文件夹),然后有一个控制器操作将服务于那些将使用 [Authorize] 属性修饰的文件。

      【讨论】:

      • 这在 web.config 中的什么位置?
      • &lt;configuration&gt; 元素内部和&lt;system.web&gt; 外部。它在根。
      • 好的,谢谢,没有让它立即工作,因为它应该是 不是 :)
      • 是的,我犯了一个错误。你是对的:应该使用&lt;deny users="?" /&gt;。我已经更新了答案。
      【解决方案3】:

      它对我不起作用。

      <configuration>
          <appSettings>
          ...
          </appSettings>
          <system.web>
          ...
          </system.web>
          <system.webServer>
          ...
          </system.webServer>
          <location path="Content">
              <system.web>
                  <authorization>
                      <deny users="?" />
                  </authorization>
              </system.web>
          </location>
      </configuration>
      

      我运行我的 MVC 4.0 应用程序,登录和注销,无法访问任何应用程序页面,但仍然可以通过直接链接访问文件,如

      http://localhost:80966/Content/Files/home.jpg
      

      【讨论】:

        猜你喜欢
        • 2014-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多