我有一个需要显示从外部非HTTPS URL来在某些页面图像的安全站点。我想创建一个仅用作代理的servlet,将图像数据传递给页面。一种方法是使用Apache的HttpClient下载图像数据,然后使用IOUtils.copy将数据复制到servlet的响应中。代理Servlet用于HTTPS
有没有更简单的方法?
UPDATE:这样做的原因是为了避免浏览器警告。
我有一个需要显示从外部非HTTPS URL来在某些页面图像的安全站点。我想创建一个仅用作代理的servlet,将图像数据传递给页面。一种方法是使用Apache的HttpClient下载图像数据,然后使用IOUtils.copy将数据复制到servlet的响应中。代理Servlet用于HTTPS
有没有更简单的方法?
UPDATE:这样做的原因是为了避免浏览器警告。
如果我没有理解好了,你不需要这样的事情,刚刚回归的图像或声音,或其他任何引用您的HTML响应,浏览器会照顾化妆请求到包含每个服务器的资源,如果它们可以访问,它们将显示在客户端上。
我会假设@Raphy不喜欢的警告浏览器将显示有关混合安全和非安全的内容,这就是为什么在servlet代理的想法 –
帕维尔是正确的。 – Ralphy
这是我最终使用:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
String url = request.getParameter("url");
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
InputStream inputStream = httpEntity.getContent();
response.setContentType("image/jpeg");
IOUtils.copy(inputStream, response.getOutputStream());
} catch (Exception e) {
AppLogger.log(e);
}
}
如果任何人有更好的方式来做到这一点,请张贴。
这是一个非常危险的技术,因为你允许任何人以代理通过你的任何部位,只是通过修改'?URL ='参数。如果恶意用户将URL设置为恶意软件或色情内容,会发生什么情况?你应该做一些确认URL是允许的,而不是接受任何东西。此安全风险在OWASP Top 10 Web应用程序安全风险列表中排名第10位,有关更多详细信息,请参阅http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202010.pdf。 – gutch
这只是示例代码,仅用于说明我提出的有关问题的部分,而非生产代码。此外,此页面位于验证区域(这就是为什么我需要https URL)。这表示,感谢提醒我在接受它之前验证url参数。 – Ralphy
只要使用HTTPS网址来引用外部资源。 – EJP
外部来源仅在http URL上可用。 – Ralphy
你确定吗?这将是最不寻常的。 – EJP