2012-06-03 77 views
2

我有一个需要显示从外部非HTTPS URL来在某些页面图像的安全站点。我想创建一个仅用作代理的servlet,将图像数据传递给页面。一种方法是使用Apache的HttpClient下载图像数据,然后使用IOUtils.copy将数据复制到servlet的响应中。代理Servlet用于HTTPS

有没有更简单的方法?

UPDATE:这样做的原因是为了避免浏览器警告。

+0

只要使用HTTPS网址来引用外部资源。 – EJP

+0

外部来源仅在http URL上可用。 – Ralphy

+0

你确定吗?这将是最不寻常的。 – EJP

回答

-1

如果我没有理解好了,你不需要这样的事情,刚刚回归的图像或声音,或其他任何引用您的HTML响应,浏览器会照顾化妆请求到包含每个服务器的资源,如果它们可以访问,它们将显示在客户端上。

+0

我会假设@Raphy不喜欢的警告浏览器将显示有关混合安全和非安全的内容,这就是为什么在servlet代理的想法 –

+0

帕维尔是正确的。 – Ralphy

0

这是我最终使用:

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); 
     } 
    } 

如果任何人有更好的方式来做到这一点,请张贴。

+2

这是一个非常危险的技术,因为你允许任何人以代理通过你的任何部位,只是通过修改'?URL ='参数。如果恶意用户将URL设置为恶意软件或色情内容,会发生什么情况?你应该做一些确认URL是允许的,而不是接受任何东西。此安全风险在OWASP Top 10 Web应用程序安全风险列表中排名第10位,有关更多详细信息,请参阅http://owasptop10.googlecode.com/files/OWASP%20Top%2010%20-%202010.pdf。 – gutch

+0

这只是示例代码,仅用于说明我提出的有关问题的部分,而非生产代码。此外,此页面位于验证区域(这就是为什么我需要https URL)。这表示,感谢提醒我在接受它之前验证url参数。 – Ralphy