c# - 混淆旨在返回图像的 HTTP 处理程序

标签 c# asp.net iis-7 webforms

我正在尝试从 HTTP 处理程序中检索图像。

我遇到的一个问题是试图让它只有应用程序可以访问图像,我已经尝试编辑匿名 IIS 身份验证以允许应用程序池身份,但这仍然允许用户通过。

这是一个例子:

  1. ASPX 页面调用处理程序 (picService.ashx?id=1) 通过查询字符串传入 ID
  2. HTTP 处理程序发回图像
  3. 图片来源是Services/picService.ashx?id=1

一切正常。现在,如果用户想要访问 picService.ashx 并输入任何旧 ID,它将返回与该 ID 相关的图像。我正在处理敏感信息,所以这是 Not Acceptable 。

我看过 HTTP Forbidden 处理程序,但我不确定我走的路是否正确。

我也试过在 ASPX 页面中返回图像,但由于图像控件需要 URL,所以你不能这样做。

如何从数据库返回图像并确保图像来源安全?

我应该换一种方式吗?还是我在正确的轨道上(http 被禁止)?

最佳答案

我过去使用的一种技术是让页面(第 1 步)创建一个 GUID,并注册一个由 GUID 键控的缓存项,该 GUID 在对象中具有实际图像 URL。该页面使用 GUID 为处理程序构造 url 并传递给处理程序

处理程序(第 2 步)然后知道去缓存获取实际值并返回内容。

这样你只公开了临时的“魔法”值。它绝对是混淆,不能替代适当的安全性。

举个例子(凭内存,语法可能有点偏差)

在aspx或caller中

    string keyValue = Guid.NewGuid().ToString();
    int yourImageID = 5;

    Cache.Add(keyValue, yourImageID) //expire in 5 or 10 seconds
    string url = "Handler.ashx?imgID=" + HttpUtility.UrlEncode(keyValue);
    Response.Redirect(url, false);

在你的处理程序中(我主要使用ashx,选择适合你需要的)

 string key = HttpUtility.UrlDecode(context.Request.QueryString.Get("imgID"));

 int yourImageID = (int) context.Cache.Get(key);

 //get your image from the db and return the content

同样,仅仅因为我使用了 guid 并不意味着你必须这样做,但如果你想混淆 IDentity,那么请选择与 IDentity 不相关的东西。

关于c# - 混淆旨在返回图像的 HTTP 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16674588/

相关文章:

c# - 跨域 ajax POST 到 web-api 总是返回空响应

c# - 如何在标题下方的 Accordion 中添加箭头图像而不是标题背景?

asp.net - 如何在 IIS7 中进行 gzip 压缩?

c# - 阶乘的答案不相同(平行和正常)

c# - 编辑模式下 DataGridView C# 行中的默认值

c# - 普通 C# 和 Orleans 中的方法调用之间的区别

asp.net - 如何在 EditItemTemplate 中自动回发?

c# - ASP.net c# 试图在服务器上运行可执行文件

c# - 如何从 C# 代码或在运行 IIS 的服务器上使用 Powershell 生成 IIS7 CSR(用于 SSL)

c# - 如何在 C# 中从另一个表达式创建一个表达式?