обертывание кода js в php и вызов php с помощью пользовательского запроса

Я создаю веб-приложение, которое использует 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 -->

Следующий код предназначен для сайта, чей идентификатор сайта равен 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 на переменную 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>

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


person I-M-JM    schedule 04.06.2011    source источник


Ответы (1)


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

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

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

    с участием:

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

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

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

person Lekensteyn    schedule 04.06.2011