0

Piwikを使用するWebアプリケーションを構築しています。Piwikは、GoogleAnalyticsに似たオープンソースの分析ツールです。

下記のようなトラッキングコードを提供します。

<!-- Piwik --> 
    <script type="text/javascript">
    var pkBaseURL = (("https:" == document.location.protocol) ? "https://example.com/" : "http://example.com/");
    document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
    </script><script type="text/javascript">
    try {
    var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
    piwikTracker.trackPageView();
    piwikTracker.enableLinkTracking();
    } catch( err ) {}
    </script><noscript><p><img src="http://example.com/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

次のコードは、site-idが1のSite用です。コード内の次の行をチェックします。

var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);

<noscript><p><img src="http://example.com/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>

私のサイトのユーザーは、カスタムメイドの管理パネルにログインし、サイトの追跡コードを取得します。

次に、その追跡コードを非表示にする必要があります。だから、私はそれをphpスクリプトに保存すると思いました。ここに似ています

<?php
  // Custom-made Analytics Script
  // File Name: custom.php

  $site_id = isset($_GET['id'])?$_GET['id']:0;
?>

<!-- Piwik --> 
    <script type="text/javascript">
    var pkBaseURL = (("https:" == document.location.protocol) ? "https://example.com/" : "http://example.com/");
    document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
    </script><script type="text/javascript">
    try {
    var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", <?php echo $site_id; ?>);
    piwikTracker.trackPageView();
    piwikTracker.enableLinkTracking();
    } catch( err ) {}
    </script><noscript><p><img src="http://example.com/piwik.php?idsite=<?php echo $site_id; ?>" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

ご覧のとおり、JavaScriptのsite-idを、$_GETを使用してフェッチするPHP変数に置き換えました。

次に、ユーザーがサイトに配置する次のJavaScriptコードをユーザーに提供します。

<script type="text/javascript">
    var pkBaseURL = (("https:" == document.location.protocol) ? "https://example.com/" : "http://example.com/");
    document.write(unescape("%3Cscript src='" + pkBaseURL + "custom.php?id=1' type='text/javascript'%3E%3C/script%3E"));
</script>

ここでの私の質問は、このスクリプトには欠点がありますか、それともどこかで故障しますか?

4

1 に答える 1

0

ここに2つの問題があります。

  • javascriptが無効になっている場合、JSのみを使用しているため、piwikはそれらの訪問者を登録しません。
  • あなたcustom.phpはXSSに対して脆弱です。保持したい場合は、以下を交換してください。

    $site_id = isset($_GET['id'])?$_GET['id']:0;
    

    と:

    $site_id = (int)filter_input(INPUT_GET, 'id');
    

    数値入力のみを許可します。

このコードを変更する予定がない限り、静的コードにハードコードされたIDを指定してください。

于 2011-06-04T08:14:42.587 に答える