我想从我网站上的任何其他网站上代理图像,例如:
http://example.com/image?url=xxx
XXX
是网络上任何图像的URL,很可能是Twitter,Facebook或其他社交网络的图像。
我该如何安全地执行此操作,
- 避免是开放的重定向(即停止黑客尝试使用
http://example.com/images?url=http://SomeHackerWebsite.com/steal_cookies_or_redirect
之类的URL - 无论如何
我正在使用Java/Jersey/Jaxrs,并且正在考虑将响应媒体类型设置为image/*
,但不确定这是否足够,因为我无法真正将任何URL放置,因为我可以't确定Twitter/facebook/等的最佳白名单
目前我已经在做以下操作:
- 使用安全,http只有cookie,所以第三方javascript无法窃取我的网站cookie
- 仅允许身份验证的请求
- 签署请求,因此用户无法轻易解决彼此的请求,尽管这并不能阻止原始请求作为非图像内容的请求。
这是非常巨大而棘手的问题。我认为必须使用多种方法来安全。例如,返回base64而不是图像。还有一些缺点:
- base64编码使文件大小大约比其原始二进制表示大约33%,这意味着更多的数据降低了电线(这可能在移动网络上非常痛苦)
- IE6或IE7 上不支持DATA URIS
- base64编码的数据可能比二进制数据需要更长的时间来处理(有人想对此进行研究?)(同样,对于移动设备而言,这可能非常痛苦,而移动设备的CPU和内存更有限)(旁注:旁注:CSS背景图像实际上比IMG标签更快)
另一种方法是我们有标签系统!在此系统图像中,访问许多时间的访问和人类考虑的图像。
第三种方法是考虑请求的来源。如果您有可疑网站,则可以考虑这些网站引用的图像。