Вход Регистрация
* Redis (Adm)

Защита от CSRF

  1. <?
  2. // Если нужно
  3.  
  4. class antiCSRF
  5. {
  6. // Получаем рандомную строку, тут в md5 хешируется метка времени //
  7. public function RandStr(){
  8. return md5(time());
  9. }
  10.  
  11. // Получаем реальный IP адрес //
  12. public function IP ()
  13. {
  14. global $_SERVER;
  15. if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  16. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  17. } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
  18. $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
  19. } else {
  20. $ip = $_SERVER['REMOTE_ADDR'];
  21. }
  22. return trim(htmlspecialchars(($ip));
  23. }
  24.  
  25. // Гененрируем токен, Записываем текущий IP
  26. /*
  27.   Как юзать:
  28.   Для POST <input type="hidden" name="token" value=<?=$csrf->gen_token()?>>
  29.   Для GET(пример) index.php?id=1&token=$csrf->gen_token()
  30.   В примерах, без синтаксиса, не знаю как будете юзать
  31.  */
  32. public function gen_token (){
  33. // Записываем токен в сессию
  34. $_SESSION['token'] = $this->RandStr();
  35. // Пишем текущий IP
  36. $_SESSION['tokenIP'] = $this->IP();
  37. return $_SESSION['token'];
  38. }
  39.  
  40. public function CheckToken (){
  41. // Тут: если токен не найден в POST ищет в GET, если нету там - возвращает null
  42. // Как юзать: в верху страницы, куда идет запрос $csrf->CheckToken ();
  43. $data['token'] = (empty($_POST['token']) ? $_GET['token'] : null);
  44. // Проверяем передан ли токен, и совпадает ли он с тоеном записанным в сессию
  45. if(empty($data['token']) or $data['token'] != $_SESSION['token']) {
  46. exit('Попытка подмены токена');
  47. }
  48. // Даже если токен сперли, проверяем совпадаеи ли IP запроса с текущим
  49. if($_SESSION['tokenIP'] != IP()){
  50. exit('IP при отправке формы и IP текущий не совпали');
  51. }
  52. }
  53. }
  54. // Создаем экземпляр класса
  55. $csrf = new antiCSRF();
» Описание: Мой класс, гибкий, можете юзать , из паблика, но он грузит систему, а тут когда нужно вызвал, пытался комментировать код , смотрите, если что-то не ясно, поясню
» Время добавления: 4 Авг 2018 в 16:44
» Посмотров: 862
» textarea
» Рейтинг: [+0 | -0]
Комментарии [1]
Онлайн: 5
Реклама
Игры между пользователями