好吧,我不知所措。我到处都找过了,但还是会出错。我有一个文件夹,里面存储了几个pdf文件。这个文件夹名为"docs",位于我项目的根目录中。我在文件夹中放置了一个web.config文件,其中包含以下代码。。。
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
我还尝试使用以下代码将代码放在我的根web.config文件中。。。
<location path="/docs">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
这两个代码块都会产生一个500服务器错误。不幸的是,我无法访问详细的服务器错误,因为我在共享主机上。有什么想法吗?
编辑:对不起。。。这就是我凌晨1点发布问题的结果。我想保护文件夹的安全,这样只有那些登录并获得授权的用户才能访问它并下载文件。
我也遇到了类似的问题(请参阅此处)。解决方案是将web.config添加到目录中,但也向其中添加一个处理程序指令。这对我很有效。
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<add name="PDFHandler" verb="*"
path="*.pdf"
type="System.Web.StaticFileHandler"
resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
我想保护文件夹的安全,以便只有那些已登录的用户中并获得授权的用户可以访问它并下载文件。
如果你只想将下载限制在登录和经过身份验证的用户,那么GlenBee的解决方案是迄今为止最简单、最有效的解决方案。
如果您需要按角色和/或索赔限制访问,您有两个选择:
- 如果您对模糊的安全性感到满意,则可以控制对具有文件链接的页面的访问。这些文件存储在wwwroot中,因此您所需要做的就是在执行角色/声明筛选的页面上链接到它们。不利的一面是,任何人都可以猜测文件路径和名称,并在没有正确角色/声明的情况下访问它们(尽管根据GlenBee的解决方案,您仍然应该只为经过身份验证的用户保护文件目录)
- 如果您需要确保,无一例外地,除了那些根据其角色/声明(或某些其他要求,如直接所有权)授权访问文件的人之外,没有人可以访问这些文件,您不仅需要保护带有链接的页面(过滤角色/声明/所有权),而且还创建了一个文件处理程序,将文件传递给要下载的用户(文件流等),并将文件本身存储在wwwroot之外,因此无法通过纯HTTP访问这些文件。这种"文件移交脚本"确保被移交文件的用户实际上具有所需的角色/声明/所有权,而不仅仅是能够盲目猜测文件的路径;将文件存储在wwwroot之外可以确保只有脚本才能首先获取文件
我正在做同样的事情,这是我放在文件夹中的web.config的内容:
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
还有错误:
我做的一个简单的解决方案是打开健康监测,并让它通过电子邮件向我发送错误,这是在我的根web.config中:
<system.web>
<healthMonitoring enabled="true">
<eventMappings>
<clear/>
<!-- Log ALL error events -->
<add name="All Errors" type="System.Web.Management.WebBaseErrorEvent, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" startEventCode="0" endEventCode="2147483647"/>
<!-- Log application startup/shutdown events -->
<!--<add name="Application Events" type="System.Web.Management.WebApplicationLifetimeEvent" startEventCode="0" endEventCode="2147483647"/>-->
</eventMappings>
<providers>
<clear/>
<!-- Provide any customized SqlWebEventProvider information here (such as a different connection string name value -->
<add name="SqlWebEventProvider" connectionStringName="ConnectionString" maxEventDetailsLength="1073741823" buffer="false" type="System.Web.Management.SqlWebEventProvider"/>
<add name="EmailWebEventProvider" buffer="false" type="System.Web.Management.SimpleMailWebEventProvider" from="website@example.com" to="webmaster@example.com" subjectPrefix="Website Error: "/>
</providers>
<rules>
<clear/>
<add name="All Errors Default" eventName="All Errors" provider="SqlWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00"/>
<!--<add name="Application Events Default" eventName="Application Events" provider="SqlWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00"/>-->
<add name="All Errors To E-Mail" eventName="All Errors" provider="EmailWebEventProvider" profile="Default" minInstances="1" maxLimit="Infinite" minInterval="00:00:00"/>
</rules>
</healthMonitoring>
</system.web>
<system.net>
<mailSettings>
<smtp from="no_reply@example.com">
<network host="mail.example.com" userName="website@example.com" password="P@$$w0rd"/>
</smtp>
</mailSettings>
</system.net>