Использование PHP session_id (), чтобы убедиться, что наш сервер динамически генерирует фрейм - PullRequest
0 голосов
/ 27 мая 2010

Мы используем iframes для показа рекламы на нашем сайте.

Iframes используются, чтобы позволить нам отделить код генерации рекламы и другие модули сайта.

Поскольку мы отслеживаем показ объявлений на нашем сайте и должны иметь возможность вести точный подсчет того, какой тип страницы получает какие просмотры, я должен гарантировать, что пользователи не смогут просто скопировать и вставить iframe в какое объявление загружается на другой сайт. Это может привести к завышению количества объявлений для этой страницы, и это число не будет соответствовать количеству просмотров страницы, в которой будет отображаться iframe.

Прежде чем кто-либо скажет: нет, я не могу просто сравнить количество просмотров страниц с количеством просмотров объявлений или использовать количество просмотров страниц * количество объявлений на странице, так как количество объявлений на странице не обязательно будет статичным.

Мне нужно найти решение, которое позволит показывать рекламу только для фреймов, которые генерируются динамически и отображаются на наших страницах.


Я не знаком с сессиями PHP, но из того небольшого чтения, которое я успел сделать, приемлемым решением кажется следующее:

Добавьте "s = session_id ()" к источнику iframe объявления.

В коде, который получает и обрабатывает запросы объявлений, возвращают (и считают) только объявления, если s == session_id ().

Пожалуйста, поправьте меня, если я ошибаюсь, но это обеспечит:

Объявления будут возвращаться только в те фреймы, чей src был сгенерирован вместе с остальным содержимым страницы, как в случае обычного использования.

Мы можем вернуть наш логотип для рекламных вызовов с неверным идентификатором session_id.

Таким простым примером будет:

Одна из наших страниц:

<?php session_start(); ?>
<div id="someElement">
    <!-- EVERYONE LOVES ADS -->            
    <iframe src="http//awesomesite.com/ad/can_has_ad.php?s=<?php echo session_id(); ?>></iframe>
</div>

Объявление / can_has_ad.php:

<?php session_start(); ?>
if($_GET['s'] == session_id()){
    echo 'can has ad';
}
else{
    echo '<img src="http://awesomesite.com/images/canhaslogo.jpg"/>';
}

И, наконец, скопированный код со статическим параметром 's':

<!-- HAHA LULZ I WILL SCREW WITH YOUR AD VIEW COUNTS LULZ HAHA -->            
<iframe src="http//awesomesite.com/ad/can_has_ad.php?s=77f2b5fcdab52f52607888746969b0ad></iframe>

Это дало бы им iframe, показывающий логотип нашего удивительного сайта, а не пошло бы вразрез с нашими показателями просмотра.

Я сделал несколько базовых тестовых случаев: два файла, один, который генерирует iframe и выводит его, а другой, на который указывает src iframe, проверяет параметр 's' и показывает соответствующее сообщение в зависимости от результата. Я скопировал iframe в файл и разместил его на другом сервере, и было отображено правильное сообщение (не может содержать рекламу).


Итак, мой вопрос:

Это сработает, или я являюсь нубом из PHP-сессии, а приведенный выше тест - случайностью?

Спасибо за ваше время!

Редактировать:

Я пытаюсь решить эту проблему, не касаясь SQL-сервера, так как остальная часть сайта очень интенсивно использует SQL, и я не хочу добавлять нагрузку на и без того скрипучий SQL-сервер ...

1 Ответ

1 голос
/ 27 мая 2010

Вы не должны помещать идентификатор сессии в URL, потому что это делает его уязвимым для отслеживания реферера.(Если пользователь переходит по ссылке со страницы с идентификатором сеанса в URL-адресе, он сможет увидеть идентификатор сеанса в заголовке реферера)

Вместо использования iFrame, вы могли бы рассмотреть возможность сделать запросдля содержимого iFrame на сервере (например, используя curl) и распечатайте его на своей странице.Таким образом, никто не сможет встроить его напрямую.

Вы также можете рассмотреть возможность проверки заголовка реферера перед загрузкой iFrame (который должен быть URL-адресом содержащей страницы), но подделать реферер очень легко.заголовки, так что это не должно считаться «хорошим» решением.

В заключение, я настоятельно рекомендую найти другой способ размещения рекламы на вашей странице!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...