0

我正在构建一个使用 Piwik 的网络应用程序。Piwik 是开源分析工具,类似于 Google Analytics。

它提供了类似于下面提到的跟踪代码。

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

以下代码适用于站点,其站点 ID 为1。检查代码中的以下行。

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 替换为 PHP 变量,我将使用 $_GET 获取该变量

现在,我将为我的用户提供他们将放入其网站的以下 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

我在这里看到两个问题:

  • 如果禁用了 javascript,piwik 将不再注册这些访问者,因为您只使用 JS
  • 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 回答