限制 ASP.Net 中经过身份验证的用户访问静态文件

Restrict static files access to authenticated users in ASP.Net

我们有一个旧的 asp.net 网站 (.Net 2.0),称之为 "ChildWeb",其中有数百个 pdf 文档。通过从父网站接收 GUID 完成对该网站的身份验证,称之为 "ParentWeb"。用户将登录 "ParentWeb",然后单击 link 导航至 "ChildWeb"。

在"ChildWeb"中有一个条件检查,检查Session中是否有GUID或某些值允许用户。如果没有,则用户将被重定向到 "ParentWeb".

的登录页面

由于此 "ChildWeb" 实际上并未在站点级别配置任何身份验证,因此如果有人知道该文档的 URL,则所有文档都会在未经身份验证的情况下公开。我正在寻找解决此问题的方法。

我在想的是将应用程序配置为使用表单身份验证并将重定向 URL 设置为 "ParentWeb"(它们在同一域下)并让 "ParentWeb" 重定向"ChildWeb" 中配置为允许匿名访问的页面,并根据相同的 GUID 或会话变量检查在该页面中设置 FormAuthentication cookie。然后我可以使包含所有文档的文件夹仅供经过身份验证的用户访问。

上述方法有没有问题或风险?使用 Heep Handler 或其他方法是否有其他更好的方法?

有几种方法可以解决这个问题。

首先,一个简单的方法是只创建一个下载 ashx 处理程序。传入用于验证的 GUID 和 PDF 文件名。这将掩盖 PDF 文件的位置,假设您的 GUID 已过期,它将阻止他们在路上使用相同的 URL。

如果您 运行 在专用服务器上,另一种简单的方法是将 PDF 文件移出 ASP.NET 应用程序文件夹。在 C: 驱动器的根目录上创建一个目录,并将文件复制到那里。然后创建一个通用的 .ashx 处理程序。将您的 GUID 作为查询参数传递给处理程序,在您的处理程序中,让它验证您的 GUID 并提供适当的 PDF 文件。如果您使用的是共享主机,您还可以将文件移动到您的 App_Data 文件夹,该文件夹由 ASP.NET.

自动保护

如果可行,另一种方法是加密所有 PDF 文件并创建一个通用的 .ashx 处理程序,再次验证 GUID,解密 PDF 文件,然后提供它。

另一种方法是将 PDF 文件存储在 SQL 数据库中。如果您的应用程序流量很大,则不建议使用此方法。如果流量很大,这将大大降低您的应用程序的速度。但要做到这一点,请将 PDF 存储在 SQL 中,然后创建一个 .ashx 处理程序来验证 GUID 并提供适当的 PDF 文件。

当然,最后一种方法是按照您的建议,使用表单身份验证。您可以使用 location tag 拒绝用户访问您在 web.config.

中的目录