我一直在研究如何在我的网站上使用Google,但是由于默认的Google包含代码被我的服务器上的mod安全安装程序阻塞,我在第一个障碍上失败了:
标准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 -->国防部的回应-保安:
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可能会认为iframe带有“显示:无;可见性:隐藏”可能是恶意的,并且删除样式属性可以阻止规则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*)?%)"发布于 2014-04-11 14:25:45
经过大量实验后,我发现以下代码工作正常:
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXXXXX"
height="21" width="21" class ="noDisplay"></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 -->似乎规则981000将对任何小于21像素或3%宽度或高度的iframe开火。将可见性和显示样式信息移动到外部样式表可防止规则981001触发。
.noDisplay {
display:none;
visibility:hidden;
}该代码现在通过了国防部的安全性,并在页面中包含了GTM,(基本上)符合谷歌的意图。
我希望这能帮助其他人解决同样的问题:-)
发布于 2017-06-20 10:57:26
很好的解决方案,谢谢你贴出答案!在一个紧迫的时间表上急需帮助!
新推荐的GTM实现建议将代码分成两部分,因此为了每个人的利益,下面是我如何修改上面的答案以符合首选实现。它还防止403禁止错误。
在<head>中添加尽可能高的内容:
<!-- Google Tag Manager -->
<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=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->在<body>中添加尽可能高的内容:
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src=""https://www.googletagmanager.com/ns.html?id=GTM-XXXXXX""
height=""21"" width=""21"" class =""noDisplay""></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->要添加到外部样式表中(通常为style.css):
.noDisplay {display:none;visibility:hidden;}所有的学分@underscorePez为原来的解决方案,使我到上述!
https://stackoverflow.com/questions/22964411
复制相似问题