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

时间:2009-09-14 22:23:11

标签: asp.net security

尝试阻止访问特定文件,而不是任何具有特定扩展名的文件,只能访问一个特定文件。 问题是最终用户只需在他们的浏览器中输入:/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,因为我有一个非常蹩脚的托管帐户。


所以有人知道我在上述尝试中做错了什么,或者我可以尝试任何其他解决方案吗?

kthxbye!

2 个答案:

答案 0 :(得分:8)

您可以将ASP.Net文件夹“App_Data”添加到您的应用程序中,并将xml文件放在那里吗?此文件夹专门用于保存此类数据并将其从浏览器/用户隐藏,但将其保留在您的应用程序范围内。

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

至于为什么web.config文件中的授权指令不起作用,这是因为ASP.Net管道不处理“.xml”文件扩展名。您需要将IIS配置为通过ASP.Net请求处理程序发送所有xml文件请求,以便将该安全指令应用于它。

答案 1 :(得分:0)

IIS不处理xml文件(只是将它们发布给请求者),因此安全性不起作用。令人惊讶的是,在Mono平台上工作......无论如何,你可以做这个解决方法:

  1. 将文件存储在非常安全的文件夹中,并使用aspx页面(文件名作为参数)访问它
  2. 将文件存储在db中并像1
  3. 一样休息
  4. 将文件存储在您的主机帐户文件夹中,并为其指定GUID名称,然后在数据库中存储GUID和实际文件名连接,并通过aspx页面处理文件下载。