使用“代理”在HTTPS站点中显示HTTP内容

时间:2015-09-16 11:30:45

标签: security iframe https

我有一个https网络应用程序,我们在iframe中显示外部内容(完全可由用户自定义)

由于混合内容被许多浏览器阻止,我对HTTP内容执行以下操作:
iframe链接到我自己的JSP并将请求的url作为参数发送。然后,JSP使用url创建输入流并返回响应。

BufferedReader reader = null;
URL url;
String strUrl = (String) request.getParameter("url");
try {
    url = new URL(strUrl);
    reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

    for (String line; (line = reader.readLine()) != null;) {
        out.println(line);
    }
} catch (Exception e) {
    log.warn("Error on URL " + strUrl);
} finally {
    if (reader != null)
        try {
            reader.close();
        } catch (IOException ignore) {
        }
}

这很有效。
问题是:
有人可以解释这里的安全问题,这是我想要做的吗? (从技术上讲,我可以说只支持HTTPS网址...)。

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,这肯定是一个安全问题。您创建的内容称为“open redirect”,它用于网络钓鱼攻击。

攻击者可能滥用用户对您网站的信任(使用您的SSL证书进行签名和加密的通信),以将其重定向到恶意网站。

即使他们可能无法在您的网站上控制此JSP的使用,他们也可以在电子邮件或网站评论中使用它。有关详细信息,请参阅this question

您可以通过在服务器端维护要从HTTP转换为HTTPS的站点列表来解决此问题,并通过索引或关键字引用它们,例如:

https://myserver/proxy.jsp?url=site1