Вход
Регистрация
PHP коды
| Защита от CSRF
// Если нужно session_start(); class antiCSRF { // Получаем рандомную строку, тут в md5 хешируется метка времени // public function RandStr(){ return md5(time()); } // Получаем реальный IP адрес // public function IP () { global $_SERVER; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $ip = $_SERVER['HTTP_CF_CONNECTING_IP']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return trim(htmlspecialchars(($ip)); } // Гененрируем токен, Записываем текущий IP /* Как юзать: Для POST
gen_token()?>> Для GET(пример) index.php?id=1&token=$csrf->gen_token() В примерах, без синтаксиса, не знаю как будете юзать */ public function gen_token (){ // Записываем токен в сессию $_SESSION['token'] = $this->RandStr(); // Пишем текущий IP $_SESSION['tokenIP'] = $this->IP(); return $_SESSION['token']; } public function CheckToken (){ // Тут: если токен не найден в POST ищет в GET, если нету там - возвращает null // Как юзать: в верху страницы, куда идет запрос $csrf->CheckToken (); $data['token'] = (empty($_POST['token']) ? $_GET['token'] : null); // Проверяем передан ли токен, и совпадает ли он с тоеном записанным в сессию if(empty($data['token']) or $data['token'] != $_SESSION['token']) { exit('Попытка подмены токена'); } // Даже если токен сперли, проверяем совпадаеи ли IP запроса с текущим if($_SESSION['tokenIP'] != IP()){ exit('IP при отправке формы и IP текущий не совпали'); } } } // Создаем экземпляр класса $csrf = new antiCSRF();
Онлайн: 0
Реклама
Наш надёжный хостинг партнер
Купить рекламу