繁体   English   中英

限制对文件的访问

[英]restricting access to files

我目前正在MVC3上开发图片存储,并且有一个问题如何限制对图像的访问。 如果我将图像插入HTML虱子<img src="/ImagesFolder/image0001.jpg"> ,它将正确显示,但是在浏览器中写完整路径的任何人也将获得该图像。 我不愿意允许它。 一种方法是将图像作为base64字符串嵌入,但仅适用于小图像,我有大图像。

我看到了创建图像访问操作的建议,并使用了类似<img src="/GetImage?ID=1123"> ,但是在该GetImage页面上,我仍将使用直接路径方法还是base64方法? 并以第一种方式将imagefile的完整路径转换为父视图,并且仍然可以在图片属性中看到?

有没有办法在<img src="">使用System.Drawing.Image或其他任何方式? 你知道样品吗?

一种方法是将所有图像放入http服务器未发布的路径。 这样,用户就没有直接路径可以进入浏览器。

脚本本身在服务器上,因此它们可以访问此路径。 您的图片访问方法应该是一个脚本,该脚本返回实际数据并将其自身标识为正在为jpeg提供图片/ jpeg的数据。 这样,如果有人通过您设计的脚本之外的其他方式访问GetImage方法,则可以(通过引用或其他方式)检测到它,并且不返回任何内容。

我认为您提到的“图像访问操作”解决方案是最容易实现的解决方案。 例如,GetImage脚本可以检查您在应用程序中设置的cookie,以便只有第一次访问您网站的人才能接收图像。

现在,如果您想防止人们在访问您的网站通过在浏览器中键入URL来显示图像,这将变得更加棘手,并且我认为没有一个简单的解决方案。 您可能会检查Referer HTTP标头,以查看请求是否与您的网站有关(因为将URL放入URL栏中时Referer将为空,但是当<img src=...>包含该图像时,它将包含页面的URL。 <img src=...> ),但是该解决方案有一个缺点,因为它将阻止浏览器不发送Referer标头(通常出于隐私原因;这不是一个非常广泛的配置,但是会发生这种情况)根本看不到您的图像。 第二个可能的缺点是,除非您可以配置服务器为服务器提供一些不允许缓存的标头,否则人们可能会通过输入URL来查看已在浏览器中缓存的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM