Вход по паролю на PHP и авторизация через куки
Иногда мне приходится объяснять принцип работы с куками на разных языках программирования, и нередко это кажется сложным для новичков. На самом деле ничего сложного нет. В этой статье я приведу рабочий пример работы с куками на PHP и авторизации для сайта. Бонусом мы подключим защиту от взлома – рекапчу от гугла.
Итак, вам для чего-то понравилось закрыть доступ к некоторому содержимому на сайте, предположим странице админки. Самый простой способ – это его запаролить. Раньше я нередко использовал для решения данной задачи файл .htaccess – отлично работает для предотвращения несанкционированного доступа к целому сайту или определённой директории. Но у htaccess есть некоторые проблемы переносимости, а также не самая простая процедура смены пароля-логина. Не говоря уж о масштабируемости и мультдоступе.
Так что давайте создадим вход по логину и запоминание целиком на PHP и куках. Код:
if (isset($_COOKIE["pass"]) && $_COOKIE["pass"]==$pass){Сначала проверяем, существует ли кука с названием “pass” и равна ли она некоему значению. Сразу скажу: хранить пароль в открытом виде небезопасно, используйте хотя бы md5 шифрование с солью. Далее, если все хорошо, то что-то делаем или показываем, а вот дальше подключаем рекапчу:
else { ?> <script src='https://www.google.com/recaptcha/api.js'></script> <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST"> <input name="password" type="password" size="45"/> <input class="submit" type="submit" value="Войти"/> <div class="g-recaptcha" data-sitekey="публичный_ключ "></div> </form>Обработку формы ведем на той же странице, так что если есть пост-запрос:
if (isset($_POST["password"])) { получаем ответ от капчи $recaptcha=$_POST['g-recaptcha-response']; if(!empty($recaptcha)){ $google_url="https://www.google.com/recaptcha/api/siteverify"; $secret="секретный_ключ"; $ip=$_SERVER['REMOTE_ADDR']; $url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;Инициализируем curl и выполняем исходящее соединение:
$curl = curl_init(); curl_setopt($curl,CURLOPT_URL, $url); curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $res = curl_exec($curl); curl_close($curl); $res = json_decode($res, true);Если капча пройдена:
if ($res['success']) {Если пароль верен:
$valid = password_verify($password, $stored_hash); if (!$valid) { throw new UnauthorizedException('Invalid password!'); }Ставим куки на месяц
setcookie("pass", $pass, time()+60*60*24*30);И обновляем страничку:
header ("Location: ".$_SERVER["PHP_SELF"]); exit();Просто, не правда ли?
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.