0

我继承了一个 Web 应用程序,该应用程序显示了一个班级注册学生的“照片名册”。这些图像受到各种法规的保护,因此名册仅供班级讲师使用。图像作为二进制数据存储在 SQL Server 数据库中,

在最初的设计中,图像是通过 Web 处理程序文件 (.ashx) 提供的,该文件根据学生 ID 值返回图像。名册页面限制用户选择适合他们的课程,从而保护图像。

现在有些管理员已经学会了通过修改 URL 直接调用 web handler 文件。我想防止这种情况发生,而是通过另一个受保护的页面发送管理员,该页面根据业务规则限制他们的访问。

我有哪些选项可以锁定 Web 处理程序/Web 服务以仅响应嵌入在托管页面中的请求?如何防止用户直接调用处理程序?

4

1 回答 1

0

您可以像这样在处理程序中执行身份验证/授权逻辑。

例如,如果用户未登录,以下代码将显示 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; }
    }
}
于 2013-10-16T19:45:16.100 回答