4

ウェブサイトで Google タグ マネージャーを使用することを検討していましたが、サーバーの mod-security インストールによってブロックされているデフォルトの Google インクルード コードが原因で、最初のハードルで失敗しました。

標準 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

トリガーされるルールは、ID 981000 および 981001 です。

mod-security が "display:none;visibility:hidden" を持つ iframe が悪意のある可能性があると判断し、スタイル属性を削除するとルール 981001 のトリガーが停止する理由を理解できますが、ルール 981000 のためにリクエストは依然として失敗します。

981000 は幅と高さの属性がどうあるべきかについて強い意見を持っているようですが、私はそれらを '1' と '10' に設定しようとしましたが無駄でした :-(

このルールに合うように iframe をフォーマットする方法を知っている人はいますか? または、iframe が含まれないように GTM インクルード コードを変更する方法を教えてください。

ありがとう

PS: noscript領域全体を削除することでこの問題を解決できることはわかっていますが、インクルード コードの機能を変更しない解決策を探しています。

PPS: これはルール 981000 が一致するパターンです。ネストされたキャプチャ グループのクラウドで脳が爆発する前に、その約半分を理解できます ;-)

Pattern match "<\W*iframe[^>]+?\b(?:width|height)\b\W*?=\W*?["']?[^"'1-9]*?(?:(?:20|1?\d(?:\.\d*)?)(?![\d%.])|[0-3](?:\.\d*)?%)"
4

2 に答える 2

10

多くの実験の後、次のコードが機能することがわかりました。

<!-- 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;
}

コードは mod セキュリティを通過し、Google が意図した (ほぼ) 方法でページに GTM が含まれるようになりました。

同じ問題に苦しんでいる他の誰かを助けることを願っています:-)

于 2014-04-11T14:25:45.740 に答える