首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google标记管理器包括通过Apache中的mod-安全规则的

Google标记管理器包括通过Apache中的mod-安全规则的
EN

Stack Overflow用户
提问于 2014-04-09 13:40:40
回答 2查看 4.9K关注 0票数 4

我一直在研究如何在我的网站上使用Google,但是由于默认的Google包含代码被我的服务器上的mod安全安装程序阻塞,我在第一个障碍上失败了:

标准GTM包括代码:

代码语言:javascript
复制
<!-- 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 -->

国防部的回应-保安:

代码语言:javascript
复制
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匹配的模式,在我的大脑在一团嵌套捕获组中爆炸之前,我可以理解其中的大约一半;-)

代码语言:javascript
复制
Pattern match "<\W*iframe[^>]+?\b(?:width|height)\b\W*?=\W*?["']?[^"'1-9]*?(?:(?:20|1?\d(?:\.\d*)?)(?![\d%.])|[0-3](?:\.\d*)?%)"
EN

回答 2

Stack Overflow用户

发布于 2014-04-11 14:25:45

经过大量实验后,我发现以下代码工作正常:

代码语言:javascript
复制
<!-- 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触发。

代码语言:javascript
复制
.noDisplay {
display:none;
visibility:hidden;
}

该代码现在通过了国防部的安全性,并在页面中包含了GTM,(基本上)符合谷歌的意图。

我希望这能帮助其他人解决同样的问题:-)

票数 10
EN

Stack Overflow用户

发布于 2017-06-20 10:57:26

很好的解决方案,谢谢你贴出答案!在一个紧迫的时间表上急需帮助!

新推荐的GTM实现建议将代码分成两部分,因此为了每个人的利益,下面是我如何修改上面的答案以符合首选实现。它还防止403禁止错误。

<head>中添加尽可能高的内容:

代码语言:javascript
复制
<!-- 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>中添加尽可能高的内容:

代码语言:javascript
复制
<!-- 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):

代码语言:javascript
复制
.noDisplay {display:none;visibility:hidden;}

所有的学分@underscorePez为原来的解决方案,使我到上述!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22964411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档