我有一个名为“报告”的共享文件夹。在这个文件夹中有pdf文件。
fd6.pdf fd3.pdf
用户“fd3”通过身份验证后,用户可以通过 url 访问此文件夹中的任何 pdf。有没有简单的方法来防止这种情况?
我有一个名为“报告”的共享文件夹。在这个文件夹中有pdf文件。
fd6.pdf fd3.pdf
用户“fd3”通过身份验证后,用户可以通过 url 访问此文件夹中的任何 pdf。有没有简单的方法来防止这种情况?
有几种方法可以做到这一点。我假设您的身份验证是 Forms Auth 或其他一些此类自定义应用程序身份验证,而不是通过模拟进行管理(如果您使用的是 Windows 身份验证/模拟,那么您可以直接在文件上使用 ACL 来解决这个问题)。
IHttpModule
,或添加到您的 Web 应用程序的 Global.asax.cs。您要做的是附加到应用程序的AuthorizeRequest
事件。Global.asax.cs 示例:
protected void Application_AuthorizationRequest(object sender, EventArgs e)
{
var application = (HttpApplication)sender;
var context = application.Context;
if (context.User.Identity.IsAuthenticated
&& Path.GetFileName(Path.GetDirectoryName(context.Request.Path)).Equals("reports", StringComparison.OrdinalIgnoreCase)
&& Path.GetExtension(context.Request.Path).EndsWith("pdf", StringComparison.OrdinalIgnoreCase))
{
var fileName = Path.GetFileNameWithoutExtension(context.Request.Path);
if (!context.User.Identity.Name.Equals(fileName, StringComparison.InvariantCultureIgnoreCase))
{
context.Response.StatusCode = 403;
context.Response.StatusDescription = "You are forbidden to view this file.";
}
}
}
我喜欢使用 web.config 中的本地属性保护文件
<location path="pdfs/files">
<system.web>
<authorization>
<allow roles="superuser,admin,VolunteerCoordinator,presenter,ReferralMaker"/>
<deny users="*"/>
</authorization>
</system.web>
然后确保您已定义角色以防止访问您正在保护的目录