Java 如何安全地从任何url代理图像并避免利用漏洞?

Java 如何安全地从任何url代理图像并避免利用漏洞?,java,jersey,jax-rs,Java,Jersey,Jax Rs,我想代理我网站上任何其他网站的图像,例如: 其中,XXX是指向网络上任何图像的url,很可能是来自twitter、facebook或其他社交网络的图像 如何安全地执行此操作,以及 避免成为黑客(即阻止黑客尝试使用像这样的URLhttp://example.com/images?url=http://SomeHackerWebsite.com/steal_cookies_or_redirect 强制浏览器将响应视为图像,无论发生什么情况 我正在使用Java/Jersey/JaxRS,并且正在

我想代理我网站上任何其他网站的图像,例如:

其中,
XXX
是指向网络上任何图像的url,很可能是来自twitter、facebook或其他社交网络的图像

如何安全地执行此操作,以及
  • 避免成为黑客(即阻止黑客尝试使用像这样的URL
    http://example.com/images?url=http://SomeHackerWebsite.com/steal_cookies_or_redirect
  • 强制浏览器将响应视为图像,无论发生什么情况
我正在使用Java/Jersey/JaxRS,并且正在考虑将响应媒体类型设置为
image/*
,但我不确定这是否足够,因为我无法将任何URL列入黑名单,因为我无法确定twitter/facebook/等的最佳白名单

目前,我已经在做以下工作:
  • 使用安全的、仅http的cookies,这样第三方javascript就不会窃取我的站点cookies
  • 仅允许经过身份验证的请求
  • 对请求进行签名,这样用户就不能轻易地处理彼此的请求,尽管这并不能阻止原始请求成为对非图像内容的请求

这是一个非常庞大而困难的问题。我认为必须使用多种安全方法。例如,返回base64而不是映像。还有一些缺点:

  • base64编码使文件大小比其原始二进制表示形式大约大33%,这意味着在传输过程中会有更多的数据(这在移动网络上可能非常痛苦)
  • IE6或IE7不支持数据URI
  • base64编码的数据可能比二进制数据需要更长的处理时间(有人想对此进行研究吗?)(同样,对于CPU和内存更有限的移动设备来说,这可能会非常痛苦)(旁注:CSS背景图像似乎比img标签快)
另一种方法是标记系统,在这个系统中,图像被访问了很多时间,而那些被人类考虑的图像。

第三的方式是考虑请求的来源。如果你有可疑的站点,你可以考虑那些站点引用它的图片。< /P>返回Base64字符串。HMM.…好点…这将取决于我们支持的浏览器,但这是值得考虑的……你应该把它作为答案!大点周围——第三路可能是P。可能性和将100%工作…我想我可以得到原始来源的要求,所以我可以从中判断他们是否合法…感谢伟大的想法!