是的,Matomo可以和CSP.然而,你不能在Matomo UI中使用由跟踪代码生成器生成的标准跟踪代码,因为当启用CSP时不允许使用内联脚本。CSP是一种用于防止跨站脚本攻击(XSS)及相关攻击的安全概念。

设置JavaScript跟踪器

相反,请确保将跟踪代码放入如下文件:
< script src = " https://example.com/tracking.js " > < /脚本>
.

该文件matomo.js应该从你的Matomo服务器加载和tracking.js应该包含像这样的实际跟踪调用:

var idSite = 1;var matomoTrackingApiUrl = 'https://matomo.example.com/matomo.php';Var _paq = window。_paq = window。_paq || [];_paq。推动([setTrackerUrl, matomoTrackingApiUrl]);_paq。推动([setSiteId, idSite]);_paq.push ([' trackPageView ']);_paq.push ([' enableLinkTracking ']);

一定要指定正确的idSite如果需要和替换Matomo跟踪API URL。您可以通过追加来构建此URL/ matomo.php到您的Matomo域。

tracking.js文件将是唯一的每个网站,你将安装Matomo JavaScript跟踪代码,将需要存储在你的webserver根文件夹。

设置Matomo标签管理器

如果你使用Matomo标签管理器而不是标准的JavaScript跟踪代码,你可以设置跟踪代码与CSP一起工作,如下所示:

< script src = " https://example.com/tracking.js " > < /脚本>
.

该文件js / container_XXXXX.js应该从你的Matomo服务器加载,替换容器ID生成的Matomo和tracking.js应包含以下内容:

Var _mtm =窗口。_mtm = window。_mtm || [];_mtm.push ({mtm。开始时间”:(新的日期().getTime()),“事件”:“mtm.Start”});

重要提示:上面的例子假设您使用Matomo标签管理器作为默认跟踪器,并且Matomo Javascript跟踪器与Matomo标签管理器容器捆绑在一起。如果同时使用JavaScript跟踪器和Matomo标签管理器,则需要将上述两种方法结合使用。

配置Content-Security-Policy

如果你加载matomo.js从一个不同的域确保允许Matomo域像这样:Script-src 'self' http://matomo.example.com.如果你加载第三方JavaScript文件,或者你有一个CDN,你可能不得不向白名单中添加更多的域名。

一个响应头的例子如下:

“default-src 'self';connect-src https://matomo.example.com;Script-src 'self' https://matomo.example.com;Img-src 'self' https://matomo.example.com;style-src“自我”;frame-ancestors“自我”;frame-src“自我”;“

如果CSP应该在所有浏览器中都能工作,你可能需要添加更多的头文件。在撰写本文时,您可能还需要设置X-WebKit-CSP用于Safari和X-Content-Security-Policy获取Internet Explorer支持。阅读更多内容安全策略

使用nonce来启用内联JavaScript

你可以使用内联JavaScript,如果你在你的CSP配置中设置了一个nonce,并在包括内联Matomo JavaScript时将nonce属性的值设置为相同的nonce:
<!——Matomo——>
<脚本nonce = " the_nonce_from_your_csp_config " >
...Matomo跟踪代码…
> < /脚本
<!——结束Matomo代码——>

这种方法也适用于Matomo标签管理器,对于Matomo 4.12版本以后,这意味着任何作为自定义Html标签一部分的JavaScript都将自动继承nonce,而不会被CSP阻止。有关在CSP中使用nonce的更深入信息,请参见MDN网络文档

下一个常见问题内容跟踪开发者指南
以前的常见问题JavaScript跟踪客户端API参考
Baidu