我们有一个旧的asp.net网站(.Net 2.0),称之为“ChildWeb”,它有数百个pdf文档。通过从父网站接收GUID完成对此网站的身份验证,将其称为“ParentWeb”。用户将登录“ParentWeb”,然后单击链接以导航到“ChildWeb”。
在“ChildWeb”中,有一个条件检查来检查Sessions中是否有GUID或某些值以允许用户。如果有非,则用户将被重定向到登录“ParentWeb”页面。
由于此“ChildWeb”实际上未在站点级别配置任何身份验证,因此如果有人知道该文档的URL,则所有文档都将通过身份验证公开。我正在寻找解决此问题的方法。
我在想的是将应用程序配置为使用Forms Authentication并将重定向URL设置为“ParentWeb”(它们位于同一域下)并让“ParentWeb”重定向到“ChildWeb”中已配置的页面允许匿名访问并根据相同的GUID或Session变量检查在该页面中设置FormAuthentication cookie。然后,我可以使包含所有文档的文件夹仅供经过身份验证的用户访问。
上述方法是否存在任何问题或风险?使用Heep Handler或其他什么方法还有其他更好的方法吗?
答案 0 :(得分:1)
有几种方法可以解决这个问题。
首先,一个简单的方法是创建一个下载ashx处理程序。传入GUID进行身份验证和PDF文件名。这将掩盖PDF文件的位置,并假设您的GUID过期,它将阻止他们在路上使用相同的URL。
如果您在专用服务器上运行,另一种简单的方法是将PDF文件移到ASP.NET应用程序文件夹之外。在C:驱动器的根目录上创建一个目录并将文件复制到那里。然后创建一个通用的.ashx处理程序。将GUID作为查询参数传递给处理程序,并在处理程序中,让它验证您的GUID并提供相应的PDF文件。如果您使用的是共享主机,则还可以将文件移动到自动受ASP.NET保护的App_Data文件夹中。
另一种方法,如果可行的话,是加密所有PDF文件并创建一个通用的.ashx处理程序,再次验证GUID,解密PDF文件,然后提供它。
另一种方法是将PDF文件存储在SQL数据库中。如果您的应用程序有大量流量,则不建议使用此方法。如果有大量流量,这将大大减慢您的应用程序。但要执行此操作,请将PDF存储在SQL中,然后创建.ashx处理程序以对GUID进行身份验证并提供相应的PDF文件。
当然,最后的方法是按照您的建议使用Forms身份验证。您可以使用location tag拒绝用户访问您的web.config中的目录。