【问题标题】:ASP.NET failing to make folder not accessibleASP.NET 无法使文件夹无法访问
【发布时间】:2017-04-03 19:02:42
【问题描述】:

我有一个 C# Webform 应用程序。

其中包含一个 Report 文件夹,其中包含一些 pdf 文件。

我的应用程序将按需显示这些报告。

但我不希望有人通过输入直接 url 来访问这些

例如:www.abc.com/Reports/a.pdf

我在报告文件夹中创建了以下 Web.config:

<configuration>
<system.web>
            <authorization>
                <deny users="?" />                
            </authorization>
</system.web>
</configuration>

不过,在测试时,我可以直接访问 pdf 文件。

另外根据业务规则,我不能使用表单身份验证。

【问题讨论】:

    标签: c# asp.net vb.net


    【解决方案1】:

    &lt;system.web&gt; 控制 ASP.NET 管道的配置,而不是 IIS。如果您在 IIS 下运行,则不会为静态文件请求调用 ASP.NET,例如您提到的 PDF 文件。

    要拒绝这些请求,请改用&lt;system.webServer&gt;。请参阅此 QA:How to make IIS7 stop serving a folder?

    <configuration>
       <system.webServer>
            <security>
                <requestFiltering>
                   <hiddenSegments>
                       <add segment="My_Directory" />
                   </hiddenSegments>
                </requestFiltering>
            </security>
        </system.webServer>
    </configuration>
    

    请注意,&lt;system.webServer&gt; 需要 IIS7 或更高版本 (Windows Server 2008)。如果您运行的是 IIS6(Windows Server 2003 或 Windows XP),那么这将不起作用。

    【讨论】:

    • 我测试了您的解决方案,但现在我无法从应用程序中访问该文件。
    • @SNash 如果您的应用程序通过重定向到静态文件来提供文件,那么就不可能过滤对文件的请求。为了保护文件,您应该让您的应用程序使用 Response.WriteFile 通过您自己的代码返回文件(不要忘记设置 Content-Type 标头)。
    • 如果 ASP.NET 处于经典模式,则此答案是正确的,但在 integrated pipeline mode 时则不正确。
    • 我担心的是用户将 pdf 的直接 URL 放在浏览器中以访问文件。
    • 测试了您的解决方案。工作完美。目前使用带有 AD 身份验证/组织身份验证的 ASP.Net 框架(Web 窗体)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2018-08-02
    • 2021-06-28
    相关资源
    最近更新 更多