Asp.net 显示数据库中的图像,但仅当请求通过安全页面时才显示
我继承了一个web应用程序,它显示一个班级注册学生的“照片名册”。这些图像受到各种规定的保护,因此名册只对本课程的讲师开放。图像作为二进制数据存储在SQL Server数据库中 在原始设计中,图像通过web处理程序文件(.ashx)提供,该文件返回基于学生ID值的图像。花名册页面限制用户选择适合他们的课程,从而保护图像 现在,一些管理员已经学会了通过修改URL直接调用web处理程序文件。我希望防止这种情况,而是通过另一个受保护的页面发送管理员,该页面根据业务规则限制他们的访问Asp.net 显示数据库中的图像,但仅当请求通过安全页面时才显示,asp.net,.net,web-services,Asp.net,.net,Web Services,我继承了一个web应用程序,它显示一个班级注册学生的“照片名册”。这些图像受到各种规定的保护,因此名册只对本课程的讲师开放。图像作为二进制数据存储在SQL Server数据库中 在原始设计中,图像通过web处理程序文件(.ashx)提供,该文件返回基于学生ID值的图像。花名册页面限制用户选择适合他们的课程,从而保护图像 现在,一些管理员已经学会了通过修改URL直接调用web处理程序文件。我希望防止这种情况,而是通过另一个受保护的页面发送管理员,该页面根据业务规则限制他们的访问 我有哪些选项可以锁
我有哪些选项可以锁定web处理程序/web服务,以便只响应嵌入托管页面中的请求?如何防止用户直接调用处理程序?您可以像这样在处理程序内部执行身份验证/授权逻辑 例如,如果用户未登录,以下代码将显示404错误
public class ImageHandler : IHttpHandler, IRequiresSessionState
{
// 1x1 transparent GIF
private readonly byte[] GifData =
{
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};
public void ProcessRequest(HttpContext context)
{
//if (context.User.IsInRole("Administrators"))
if (context.User.Identity.IsAuthenticated)
{
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}
else
{
context.Response.Write("File not found.");
context.Response.StatusCode = 404;
}
}
public bool IsReusable
{
get { return false; }
}
}
Thx用于响应。我已经通过IIS强制执行windows身份验证。问题是授权需要用户和课程信息的特定配对。我想我可以在处理程序中进行额外的授权查询,但这似乎需要做很多额外的工作。希望能核实一下申请是通过表格来的。