Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Server.Transfer()将请求传输到静态图像(.jpg、.png等)是否安全?_C#_Asp.net_Iis - Fatal编程技术网

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

C# 使用Server.Transfer()将请求传输到静态图像(.jpg、.png等)是否安全?,c#,asp.net,iis,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.jp

我有一个实现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")
所有关于使用Server.Transfer()重定向到aspx页面的讨论,所以我不确定这样做是否正确

谢谢,

好吧,这封信明确地说:

传输到的页面应该是另一个.aspx页面。例如,传输到.asp或.asmx页面无效

因此,即使它可能会工作,它也不是“安全”的,因为您可以依赖此功能。您使用非aspx页面违反了,因此,理论上,该方法允许任意行为


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

不确定此方法在最初编写问题时是否适用,但从.NET 4.8开始,
server.TransferRequest()
似乎更适合传输静态文件

请参阅MSDN上的:

使用IIS 7.0中的集成管道模式运行时,使用此方法,以允许在使用正确的请求上下文执行目标请求时,将请求处理从一种资源类型传输到另一种资源类型。例如,您可以使用TransferRequest方法将对ASPX页面的请求转换为对XML页面的请求


是的,我在问题中说了。我在以这种或那种方式寻找轶事证据,或者寻找其他解决方案的建议,例如更新的HttpServerUtility.TransferRequest()方法。@twerq:好的,我明白了。我不确定,因为您链接到的是KB文章而不是MSDN文档。我已经为您的问题添加了其他解决方案的建议。