内容安全策略阻止Twitter登录(abraham / twitteroauth)

时间:2019-03-01 13:30:58

标签: twitter-oauth content-security-policy

我正在为我的应用设置社交媒体登录,但是我的内容安全策略阻止了Twitter登录按预期方式工作。

我使用window.open创建弹出窗口并将其发布到twitter库php文件中。这部分工作正常。我可以单击“授权应用程序”按钮,然后用户登录。问题是弹出窗口无法关闭,并且用户未重定向到成员页面。

这是每次错误发生时我收到的csp日志。

{
    "csp-report": {
        "document-uri": "https://dev.example.com/twitter-callback.php?oauth_token=Fr5kdwAAAAAAy_TdAAABaTlfL8o&oauth_verifier=i418eqFom1jKd3jYrpirNvAlPJnOBedG",
        "referrer": "https://api.twitter.com/oauth/authorize",
        "violated-directive": "script-src-elem",
        "effective-directive": "script-src-elem",
        "original-policy": "upgrade-insecure-requests; default-src https:; connect-src 'self'; font-src 'self' data:; frame-src accounts.google.com platform.twitter.com syndication.twitter.com staticxx.facebook.com www.facebook.com www.google.com; frame-ancestors 'none'; img-src 'self' data: platform.twitter.com syndication.twitter.com *.twimg.com; script-src 'self' 'unsafe-inline' platform.twitter.com/widgets.js apis.google.com/ cdn.polyfill.io/v2/polyfill.min.js cdn.syndication.twimg.com/timeline/profile cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js connect.facebook.net/en_GB/sdk.js connect.facebook.net/en_US/sdk.js platform.twitter.com www.google.com/recaptcha/api.js www.gstatic.com/charts/ www.gstatic.com/recaptcha/ 'nonce-cjJas4W2X3GtCJszEQ0UZtZqie1hGOWr'; style-src 'self' 'unsafe-inline' blob: cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/ www.gstatic.com/charts/ platform.twitter.com *.twimg.com; base-uri 'none'; object-src 'self'; manifest-src 'self'; report-uri /csp-report/csp.php;",
        "disposition": "enforce",
        "blocked-uri": "inline",
        "line-number": 1,
        "source-file": "https://dev.example.com/twitter-callback.php?oauth_token=Fr5pdwAAAy_TAABaTlfL8o&oauth_verifier=i418eqFm1jrNvAlPJnOBedG",
        "status-code": 0,
        "script-sample": ""
    }
} at Date: March 01 2019 13:08:56

如果我关闭csp,则登录工作正常,因此肯定是引起问题的csp。

编辑:我曾尝试向CSP添加script-src-elem策略,例如script-src-elem 'self' 'unsafe-inline' api.twitter.com/oauth/authorize,但没有用。

1 个答案:

答案 0 :(得分:0)

最后我自己弄清楚了。

该问题是由script-src中的随机数引起的。我的php脚本注入了内联JavaScript,以关闭弹出窗口并重定向,但我忘了向这些脚本标签添加随机数。

    // close child window and redirect parent window then exit
    echo "<script nonce=\"$nonce\">
    if (window.opener) {
    window.opener.location.href = 'members.php';
    window.close();
    } else {
     window.location.href = 'members.php';
    }
    </script>";
    exit;

完成