限制 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.
中的目录
我们有一个旧的 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.
中的目录