завершение js-кода на php и вызов php с пользовательским запросом

#php #javascript #analytics #matomo

#php #javascript #аналитика #matomo

Вопрос:

Я создаю веб-приложение, которое использует Piwik. Piwik — это инструмент аналитики с открытым исходным кодом, похожий на Google Analytics.

Это дает код отслеживания, подобный тому, который упоминается ниже.

 <!-- Piwik --> 
    <script type="text/javascript">
    var pkBaseURL = (("https:" == document.location.protocol) ? "https://example.com/" : "http://example.com/");
    document.write(unescape("<script src='"   pkBaseURL   "piwik.js' type='text/javascript'>"));
    </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 -->
  

Следующий код предназначен для сайта, идентификатор сайта которого равен 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("<script src='"   pkBaseURL   "piwik.js' type='text/javascript'>"));
    </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 на переменную PHP, которую я получу с помощью $ _GET

Теперь я предоставлю своим пользователям следующий код JavaScript, который они разместят на своем сайте.

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

Мой вопрос здесь в том, будет ли у этого скрипта какие-либо недостатки или он где-нибудь сломается?

Ответ №1:

Я вижу здесь две проблемы:

  • Если javascript отключен, piwik больше не будет регистрировать этих посетителей, поскольку вы используете исключительно JS
  • Ваш custom.php уязвим для XSS. Если вы хотите сохранить его, замените:

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

    с:

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

    разрешить только числовой ввод.

Если вы не планируете изменять этот код, просто предоставьте статическому коду жестко заданный в нем идентификатор.