Простой вход в PHP с файлом cookie

Я начал разработку этого очень простого входа в PHP, который запрашивает пароль для доступа к веб-сайту. Он также создает файл cookie, позволяющий продолжить доступ, пока пользователь не закроет окно своего браузера.

В верхней части каждой страницы я проверяю файл cookie:

<?php if(!isset($_COOKIE['authorised']) || ($_COOKIE['authorised'] != 'true')) { include('login.php'); exit; } ?> 

Если они этого не сделают, я выйду и покажу форму входа:

 <?php function pageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } $pageRedirect = pageURL(); if(isset($_POST['password']) && ($_POST['password'] == 'qwe123')) { setcookie('authorised', 'true'); header("Location:$pageRedirect",303); } else { include('noaccess.php'); exit; } ?> <form action="<?php echo pageURL(); ?>" method="post"> <input type="password" name="password" /> <input type="submit" title="I agree" value="I agree" name="submit" /> </form> в <?php function pageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } $pageRedirect = pageURL(); if(isset($_POST['password']) && ($_POST['password'] == 'qwe123')) { setcookie('authorised', 'true'); header("Location:$pageRedirect",303); } else { include('noaccess.php'); exit; } ?> <form action="<?php echo pageURL(); ?>" method="post"> <input type="password" name="password" /> <input type="submit" title="I agree" value="I agree" name="submit" /> </form> 

Текущий PHP находится на старой странице «Предупреждение», когда вам нужно согласиться на доступ к сайту, я хочу изменить его для работы с простой формой, чтобы, если пользователь вводит пароль, например, «qwe123», они создают cookie и затем перенаправляются обратно на страницу, но теперь имеют доступ из-за cookie. Если они ошибаются, другая страница включается и выходит.

Может кто-то помочь мне с этим? благодаря

Пожалуйста, не пытайтесь хранить такие вещи, как «authenticated» в cookie стороне клиента; это невероятно неуверенно. Пользователь может изменить что-либо в файле cookie – так что в этом случае я мог бы искать файл cookie в настройках моего браузера, а затем редактировать его, чтобы установить «authenticated» в true. Затем я войду в систему, без имени пользователя или пароля.

Посмотрите на функции управления сессиями PHP . Вы должны создать сеанс и сохранить на стороне защищенного информационного сервера, а не на стороне клиента.

Пример использования сеансов будет следующим:

 <?php session_start(); $secretpassword = 'qwert1234'; $secretusername = 'foobar'; if ($_SESSION['authenticated'] == true) { // Go somewhere secure header('Location: secure.php'); } else { $error = null; if (!empty($_POST)) { $username = empty($_POST['username']) ? null : $_POST['username']; $password = empty($_POST['password']) ? null : $_POST['password']; if ($username == $secretusername && $password == $secretpassword) { $_SESSION['authenticated'] = true; // Redirect to your secure location header('Location: secure.php'); return; } else { $error = 'Incorrect username or password'; } } // Create a login form or something echo $error; ?> <form action="login.php"><input type="text" name="username" /><input type="text" name="password" /><input type="submit" value="login" /></form> <?php } 

Это довольно уродливый пример, но это покрывает его мясо

  • если пользователь уже зарегистрировался, выполните защищенные вещи (конечно, скрипт secure.php также должен проверить, что пользователь вошел в систему)
  • если пользователь не вошел в систему, но они отправили форму, проверьте их данные
    • если неверно имя пользователя / пароль, установите сообщение об ошибке
    • если имя пользователя / пароль правильно, отправьте их в безопасное место
  • отобразите сообщение об ошибке, если установлено
  • отобразить форму входа в систему

Вы запускаете session_start () перед отправкой любого другого результата; это хранит файл cookie сеанса на стороне клиента, который хранит только идентификационный номер на стороне клиента. Все остальные данные хранятся на стороне сервера, поэтому пользователь не может изменять его.

Есть несколько параметров, которые вы можете установить для этого, чтобы повысить безопасность, включая httponly (запрещает доступ к cookie через javascript, помогает против атак XSS) и защищен (только передача файлов cookie через SSL). Они должны быть включены, если это возможно.

Просто отправьте форму на страницу, где вы проверяете пароль, и он должен работать нормально.

Однако вам, возможно, придется изменить $_SERVER["REQUEST_URI"]; на более конкретную страницу, так как это будет просто страница, на которой вы сейчас находитесь (страница, на которую была отправлена ​​форма).