C# 使用out文件处理程序保护静态图像/文件

C# 使用out文件处理程序保护静态图像/文件,c#,asp.net,C#,Asp.net,我在asp.net中有一个网站,用户可以在该网站上登录和上载图像/文件/Pdf等。我将文件/图像保留在服务器上,因此图像上载时间仍然很短 www.MyWeb.com/UserFolder/Img.jpg 我担心的是,当任何用户登录并查看任何图像时,图像都会保留在浏览器缓存中。因此,即使用户注销,任何人都可以访问图像。打 www.MyWeb.com/UserFolder/Img.jpg 如何保护图像?有几篇帖子建议编写一个文件处理程序,但我希望将图像保存在服务器上,并且不希望在单击图像时发送请求

我在asp.net中有一个网站,用户可以在该网站上登录和上载图像/文件/Pdf等。我将文件/图像保留在服务器上,因此图像上载时间仍然很短

www.MyWeb.com/UserFolder/Img.jpg

我担心的是,当任何用户登录并查看任何图像时,图像都会保留在浏览器缓存中。因此,即使用户注销,任何人都可以访问图像。打 www.MyWeb.com/UserFolder/Img.jpg

如何保护图像?有几篇帖子建议编写一个文件处理程序,但我希望将图像保存在服务器上,并且不希望在单击图像时发送请求

如何保护浏览器中缓存的静态内容


非常感谢您提供的任何帮助…

如果您正在使用IIS,请使用表单(或windows)身份验证来保护文件夹,并告知IIS,只要用户经过身份验证,它就只能提供文件

该建议可能不是一个文件处理程序,而是一个HTTP处理程序,但对于您当前的需要来说,这有点太复杂了

对于缓存,您始终可以选择在服务器的web响应头中设置缓存

编辑:

好的,对于您在评论中解释的escenario,我猜您没有使用asp.net引擎,您只是将IIS中的图片文件夹发布为web应用程序。这就是为什么您对渲染没有任何控制权。 您需要做的是创建一个处理图片的网页,然后为图片发送一个参数,例如:picture.aspx?id=picture1,例如,在加载页面中,检查是否允许用户查看该图片(您已经知道该帐户,因为他已登录)因此,如果用户被允许,您只需做出一个Response.write来提供图片,否则您可以说:Response.write(“您现在可以看到这个”)。这个想法是你需要一个中间人,这就是你为什么要使用asp.net的原因


如果有帮助,请告诉我。

如果您正在使用IIS,请使用forms(或windows)身份验证来保护文件夹,并告诉IIS,只要用户经过身份验证,它就只能提供文件

该建议可能不是一个文件处理程序,而是一个HTTP处理程序,但对于您当前的需要来说,这有点太复杂了

对于缓存,您始终可以选择在服务器的web响应头中设置缓存

编辑:

好的,对于您在评论中解释的escenario,我猜您没有使用asp.net引擎,您只是将IIS中的图片文件夹发布为web应用程序。这就是为什么您对渲染没有任何控制权。 您需要做的是创建一个处理图片的网页,然后为图片发送一个参数,例如:picture.aspx?id=picture1,例如,在加载页面中,检查是否允许用户查看该图片(您已经知道该帐户,因为他已登录)因此,如果用户被允许,您只需做出一个Response.write来提供图片,否则您可以说:Response.write(“您现在可以看到这个”)。这个想法是你需要一个中间人,这就是你为什么要使用asp.net的原因


如果有帮助,请告诉我,

感谢您的快速回复,即使用户已通过身份验证,他也可以访问其他用户的www.MyWeb.com/UserFolder/Img.jpg。如何将特定图像仅与特定用户关联?所以谁访问过www.MyWeb.com/UserFolder/Img.jpg都看不到它。但是如果一个非常特殊的用户登录并点击www.MyWeb.com/UserFolder/Img.jpg。他应该能够做到…你是对的,照片在文件夹中,我只是发布整个网站,包括文件夹。我有你的想法,在每次点击图像时对用户进行身份验证,Picture.aspx将对用户进行身份验证。但我担心的是,如果某个用户只是打开浏览器选项卡,然后写www.MyWeb.com/Images/UserFolder/Img.jpg并点击它。他不是通过picture.aspx?id=1进行检查,而是作为单独的用户请求进行检查。有可能处理这个案子吗?当用户不点击图像而只是写URL来访问静态图像时?好的,我理解您的担心,您需要做的是阻止文件夹(不要将其发布为web文件夹),只需将其保留在项目中,并将IIS设置为不允许在文件夹中浏览。这告诉IIS,只有asp.net可以触摸它,而不是从folder/picture.jpg这样的web请求,如果任何用户执行该请求,他/她将拥有未授权的访问权限。这就解决了你的问题。谢谢豪尔赫·阿尔瓦拉多。这在某种程度上起作用。我在我的WebDirectory中创建一个在IIS上发布的文件夹(UploadImage)。我已设置不浏览目录的权限。如果用户点击www.myweb.com/UploadImage/,并且不允许他直接浏览页面,则此功能有效。因此,在此之前,一切都非常有效。但是如果用户点击www.myweb.com/UploadImage/01.png,他就可以再次查看上传的特定图像。我想保护所有的图像,因为我必须使网站,必须保持从用户的动态图像。谢谢。感谢您的快速回复,即使用户已通过身份验证,他也可以访问其他用户的www.MyWeb.com/UserFolder/Img.jpg。如何将特定图像仅与特定用户关联?所以谁访问过www.MyWeb.com/UserFolder/Img.jpg都看不到它。但是如果一个非常特殊的用户登录并点击www.MyWeb.com/UserFolder/Img.jpg。他应该能够做到…你是对的,照片在文件夹中,我只是发布整个网站,包括文件夹。我有你的想法,在每次点击图像时对用户进行身份验证,Picture.aspx将对用户进行身份验证。但我担心的是,如果某个用户只是打开浏览器选项卡,然后写www.MyWeb.com/Images/UserFolder/Img.jpg并点击它。他不是通过图片进行的。aspx?id=1,但他是g