0

我正在尝试将“通过 Google 进行身份验证”嵌入到我正在开发的简单网络应用程序中。我使用以下代码来执行此操作。

<html>
<head>
    <title> Home </title>
    <script src = "https://apis.google.com/js/platform.js?onload=onLoadCallback" ></script>
    <script>
        function changePage() {
            if (!gapi.auth2.getAuthInstance().isSignedIn.get()) {
                window.location.href = "login.jsp";
            }
        }
    </script>
    <script>
        gapi.load('auth2', function () {
            gapi.auth2.init().then(changePage);
        });

    </script>
    <script>

    </script>
    <script>
        var user;
        function signOut() {
            var auth2 = gapi.auth2.getAuthInstance();
            user = auth2.signOut().then(changePage);
        }
        ;
    </script>
    <meta name="google-signin-client_id" content="xxxxxxxxxxxx">

</head>
<body style="background-color:azure;">
<div class="vertcal-center">
    <div class="myclass">

        <h1>Welcome to home page
            </h1>
                <button type="button" class="button" onclick="signOut()">Log Out</button>
    </div>
</div>
</body>
</html>

然而,当我对我的代码运行 ZAP 分析时,它给了我一个低风险警报,说"The page includes one or more script files from a third-party domain". 它指向下一行作为问题所在。

<script src = "https://apis.google.com/js/platform.js?onload=onLoadCallback" ></script>

我参考了描述这个问题的OWASP 教程,我知道这可以引入他们提到的 3 个风险,它们是

  1. 失去对客户端应用程序更改的控制。

  2. 在客户端系统上执行任意代码。

  3. 向第三方披露或泄露敏感信息。

但是,我也明白,如果我要使用 Google 身份验证,我必须信任 Google,并假设他们不会在这里做任何坏事。

有没有更好的方法在我的代码中执行此操作,以便 ZAP 不会警告我?

可以忽略此警报吗?

4

2 回答 2

1

ZAP 查看的是您网页的主机名和嵌入的 javascripts 的主机名。由于您的网站主机名无论如何都不会是 google.com,因此 ZAP 总是会抱怨。唯一的问题是我们信任外部 JS。但是您可以下载外部 JS 文件并将其托管在您的 Web 应用程序中。这样你就调用了你自己的 JS 文件,然后 ZAP 会忽略它。但是,如果 google 之后修改了 JS 文件,您的本地 JS 文件将不会得到新的修改。所以我的观点是你可以证明这一点并忽略 ZAP 报告中的问题。

当您使用外部 JavaScript 时,请务必检查它们是否有任何已报告的已知漏洞。您可以参考 [1] 以了解有关类似主题的更多信息。

[1] https://medium.com/@PrakhashS/using-retire-js-with-zap-to-identify-vulnerabilities-in-javascript-libraries-7baad56690aa#.cotei58mk

于 2017-02-16T04:04:00.380 回答
0

ZAP 附带的帮助中描述了此规则的工作方式,该帮助也可在线获得:https ://github.com/zaproxy/zap-core-help/wiki/HelpAddonsPscanrulesPscanrules#cross-domain-script-inclusion :

跨域脚本包含

验证是否包含来自托管内容的域以外的域的脚本。通过查看响应中“script”标签的“src”属性。允许的跨域脚本:

  • 任何具有非空“完整性”属性的脚本都将被忽略 - 不检查完整性值,因为这将由浏览器检查
  • 在 MEDIUM 和 HIGH 阈值下,如果脚本 URL 落入还包括基本消息 URL 的上下文中,则不会引发警报。

因此,您可以指定一个“完整性”属性,也可以创建一个上下文并在其中包含您信任的所有域。

于 2017-02-17T12:12:32.743 回答