c# - 使用 Server.Transfer() 将请求传输到静态图像(.jpg、.png 等)是否安全?

标签 c# asp.net iis

我有一个实现 IHttpHandler 的类,该类旨在处理图像调整大小请求。它像这样处理 URL

http://mysite.com/imageHandler?image=myimg.jpg&width=100&height=100

当前处理程序在磁盘上查找 myimg.jpg,剪切 100x100 缩略图(如果尚不存在)并将客户端重定向到缩略图,如下所示

Response.RedirectPermanent("/some/virtualPath/to/thumbnail.jpg");

这非常有效,但我想避免强制客户端发出第二个 HTTP 请求。执行以下操作安全吗?

Server.Transfer("/some/virtualPath/to/thumbnail.jpg")

所有MSDN documentation讨论使用 Server.Transfer() 重定向到 aspx 页面,所以我不确定这是否正确。

谢谢

最佳答案

嗯,MSDN page明确表示:

The page transferred to should be another .aspx page. For instance, a transfer to an .asp or .asmx page is not valid.

因此,即使它可能有效,但从您可以依赖此功能的意义上来说,它并不“安全”。您违反了contract通过使用非 aspx 页面,因此理论上,该方法可以任意运行。

解决您的问题的一个安全解决方案是使用 Response 对象的适当方法将缩略图发送到客户端,例如 BinaryWrite (如果缩略图位于内存)或TransmitFile(如果图像位于磁盘上)。在这种情况下,不要忘记适当设置 HTTP header (Response.ContentType = "image/jpeg") 以通知客户端这是一张 jpg 图像。此方法的另一个优点是您的缩略图文件不需要驻留在网络服务器的可公开访问的目录中。

关于c# - 使用 Server.Transfer() 将请求传输到静态图像(.jpg、.png 等)是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935146/

相关文章:

C# 如何在用户控件上显示文本气泡?

一旦超出索引,C# 循环数组索引值回到数组的开头

c# - 如何使用依赖注入(inject)完成可变对象重构?

c# - jQuery 不加载响应

c# - 如何从 myclass 绑定(bind) CheckBox?

c# - 从服务器或客户端检查或更改键盘输入语言

asp.net - 不了解 IIS 经典模式和集成模式?

.net - GZip 压缩在 IIS 7.5 上不起作用

asp.net - 将 MVC 站点部署到 IIS 会导致它找不到默认的共享局部 View

c# - 正确处理responseStream和StreamReader关闭