我一直在考虑在我的网站上使用 Google 跟踪代码管理器,但由于默认的 Google 包含代码被我的服务器上的 mod-security 安装阻止,我在第一个障碍中失败了:
标准 GTM 包括代码:
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->
来自 mod-security 的回应:
WARNING: Possibly malicious iframe tag in output
Message: Outbound Anomaly Score Exceeded (score 15): Possibly malicious iframe tag in output
触发的规则是 ids 981000 和 981001。
我可以理解为什么 mod-security 可能认为带有“display:none;visibility:hidden”的 iframe 可能是恶意的,并且删除 style 属性会阻止规则 981001 触发,但由于规则 981000,请求仍然失败。
981000 似乎对宽度和高度属性应该是什么有强烈的看法,但我尝试将它们设置为“1”和“10”无济于事:-(
有谁知道如何格式化 iframe 以适应此规则?或者如何更改 GTM 包含代码,使其不包含 iframe?
谢谢
PS:我知道你可以通过删除整个noscript区域来解决这个问题,但我正在寻找一种不会改变包含代码功能的解决方案。
PPS:这是规则 981000 匹配的模式,在我的大脑在嵌套的捕获组云中爆炸之前我可以理解大约一半;-)
Pattern match "<\W*iframe[^>]+?\b(?:width|height)\b\W*?=\W*?["']?[^"'1-9]*?(?:(?:20|1?\d(?:\.\d*)?)(?![\d%.])|[0-3](?:\.\d*)?%)"