Skip to content

piroman-lynx/lpg_csrf_token

Repository files navigation

Данная библиотека предназначена для защиты сайтов целиком построенных на ajax от CSRF атак.

Возможности библиотки:
 * Защита от включений в <img src="">, <iframe src="">, <script src=""> и т.п.
 * Возможность открытия страниц сайта в новой вкладке с новым токеном.
   Каждое новое окно браузера работает с отдельным независимым токеном.
 * Защита не только от нелегальных действий на сайте (например спама), но и от просмотра личной информации пользователя.
   При правильной обработке возвращаемого значения функции lpg_csrf_token можно обрубать любой запрос без токена

Поддержка браузеров (проверено):
 * Firefox 3.6+
 * Opera 9.00+
 * IE 7+
 * Google Chrome

Данная библиотека использует:
 * php 5.3+ (возможно и на 5.2 будет работать)
 * jquery 1.6 +

Как подключить библиотеку:

 git clone git://github.com/piroman-lynx/lpg_csrf_token.git

После вам нужно подключить файл lpg_csrf_token/bootstrap.php в Ваш основной входной файл (обычно это index.php).

Далее при обработке входящего запроса (до того как вы начали делать действия, но после того как запущена сессия)
вы должны выполнить следующую проверку:

 if (!lpg_csrf_token('your_token_secret','your loading text name')){
     header('Location: /');
     die; //токен не верный отправляем на главную и обрываем скрип
 }

так же к Ващим js надо будет подключить файл:
 <script type="text/javascript" src="/lpg_csrf_token/token.js"></script>

---------------------------------

Принцип работы библиотеки:

Библиотека требует от ajax запросов отправки заголовка X-CSRF-TOKEN с токеном внутри. Если запрос выполняется через
ajax, а токен не верный или его нет - библотека отписывает в лог об ошибке и функция lpg_csrf_token возвращает false
Если запрос выполнен не через ajax и не имеет никаких токенов, отдается страничка вида:

  <html>
      <body>
          <?php echo $loading_text; ?>
          <script type='text/javascript'> <?php /** check img and other left src tags **/ ?>
              if (parent.document.location.href == document.location.href){ <?php /** check iframe **/ ?>
                  document.location.href='<?php echo $url; ?>';
              }
          </script>
      </body>
  </html>

Эта стрица позволяет загрузить приложение с проверкой токена не в Header а в GET и после этого начать обычную работу с 
ajax (это позволяет открывать страницы сайта в новой вкладке/окне и вообще осуществлять первый вход на сайт).
Так же эта страничка позволяет защититься от включений вида <img src="ваш_сайт">  - тего img не обработает javascript
и от включений в <iframe src="..."> - от этого предохраняет проверка parent.

About

Сross Site Request Forgery protection for php with jquery (only ajax sites)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published