c# - 如何防止 ASP.NET 解决方案中的 URL 文档访问?
问题描述
当我输入“ https://localhost:12345/Help/ExampleDocument.pdf ”时出现问题/错误,pdf 将在 IE 中成功呈现。我希望用户仅在经过身份验证后才访问此文档,并到达我挂钩的菜单点以在单独的页面上显示该文档/参考。如何确保用户无法从应用主页访问解决方案中的静态文件夹文档?我正在浏览一些相关文章,并看到一些暗示在 HTTP 请求级别工作的建议......但我想知道我是否应该放慢每个请求来检查这样的东西?
我们的 ASP 应用程序有一个Global.asax.cs
文件,其中包括以下方法:
protected void Application_Start(object sender, EventArgs e)
protected void Application_BeginRequest(object sender, EventArgs e)
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
所以我想我可以在这里抛出一些条件来阻止请求通过,或者至少尝试一下,但是有没有更好的方法来处理 Visual Studio 解决方案中的文档保护?
该文件目前位于Solution\WebApp\Help\ExampleDocument.pdf
解决方案
目前,您通过基本 HTTP 授予访问权限。旧的 HTTP 文件夹安全性是您可以做的限制。该系统从未设计用于登录或安全性。
HTTP 5 可能有更好的解决方案,但通常您必须:
- 不通过 HTTP 公开文件/文件夹
- 编写并注册一个 HTTP 处理程序,它将检索并返回数据。
- 在处理程序中,您可以执行所需的所有操作 - 包括登录检查 + 重定向
这些处理程序在从数据库中传递 blob 时特别使用。这可能是一个 blob/DB 场景。如果是这样,您可能需要做一些设计决策。
但是一些 WebServers 也将这些处理程序用于“将文件夹结构下载为 *.zip 文件”之类的东西。
ASP.Net HTTP 处理程序可能是最常用的工具,您从未意识到自己一直在使用: https: //support.microsoft.com/en-us/help/307985/info-asp-net-http-modules-and- http-handlers-overview
推荐阅读
- multidimensional-array - ndarray:如何拆分数组?
- c# - 如何在 Unity 中进行非 UI 倒计时?
- postgresql - 在 postgres 中使用 ilike 或 like 连接表时如何使用特殊字符?
- asp.net-core - HTTP 错误 500.35 - 同一进程中的 ANCM 多个进程内应用程序
- javascript - 将值传递给 chart.js - Laravel
- c++ - 如果我删除指针,我的 C++ 程序会意外删除系统文件吗?
- php - 从 PHP DOM 创建 WSDL 输出
- java - 如何计算可能的最大会议次数
- node.js - Create-react-app not working - packages looking for funding
- php - 我无法解决此错误 在 null 上调用成员函数 quote()