代码之家  ›  专栏  ›  技术社区  ›  Quibblesome

限制对ASP.NET网站上文件的公共访问

  •  2
  • Quibblesome  · 技术社区  · 16 年前

    试图阻止访问特定的文件,而不是具有特定扩展名的任何文件,只访问一个特定的文件。 问题是,最终用户只需在浏览器中键入/filename.xml,就能看到这个文件的内容,我希望他们看不到。


    我尝试过的事情:

    1) 把文件放在别处

    作为托管帐户的一部分,我有一个“安全”文件夹。所以我想我只需将路径改为:“..\..\..\ssl\filename.xml”,然后将文件移到那里。ASP.NET在此上崩溃,错误为:

    • 不能使用前导..从上面的目录退出

    所以我认为这是出于安全考虑。

    2) web.config中的位置

    接下来我尝试在web.config中使用它:

      <location path="FileName.xml">
        <system.web>
          <authorization>
            <deny users="*"/>
          </authorization>
        </system.web>
      </location>
    

    这似乎没什么作用……有人知道为什么吗?我没有在这个应用程序中特别使用ASP.NET身份验证,这就是为什么它不起作用的原因吗?

    3) 使用IIS阻止访问

    唉,我没有权限访问IIS,因为我有一个非常糟糕的托管帐户。


    那么,有人知道我在上面的尝试中犯了什么错误吗,或者有其他我可以尝试的解决方案吗?

    再见!

    2 回复  |  直到 16 年前
        1
  •  8
  •   womp    16 年前

    可以将ASP.NET文件夹“app_data”添加到应用程序中,并将XML文件放入其中吗?此文件夹专门用于保存此类型的数据并对浏览器/用户进行隐藏,但要将其保留在应用程序范围内。

    alt text http://img178.imageshack.us/img178/7708/appdata.png

    至于web.config文件中的authorization指令为何不起作用,是因为ASP.NET管道不处理.xml文件扩展名。您需要将IIS配置为通过ASP.NET请求处理程序发送XML文件的所有请求,以便对其应用该安全指令。

        2
  •  0
  •   user170442    16 年前

    IIS不处理XML文件(只是将其发送给请求者),因此安全性不起作用。令人惊讶的是,在Mono平台中…无论如何,您可以采取以下解决方法:

    1. 将文件存储在真正安全的文件夹中,并使用ASPX页(文件名作为参数)访问它。
    2. 将文件存储在数据库中,然后像在1中一样进行休息
    3. 将文件存储在宿主帐户文件夹中,并为其指定guid名称,然后将guid和真实文件名连接存储在db中,并通过aspx页处理文件下载。