PHP защищенный паролем веб-сайт

Я новичок в веб-программировании, и я пытаюсь найти несколько хороших примеров/учебников о том, как сделать достойную работу по созданию веб-сайта, который требует от пользователей входа в систему для просмотра любых страниц за пределами главной страницы входа.

до сих пор я нашел 1 или 2, что ив пытался, но я продолжаю сталкиваться с той же проблемой. Если я просто введите url страницы, которую я хочу видеть вручную, я могу войти, как будто ничего там не было.

7 ответов

Там HTTP Auth:

http://php.net/manual/en/features.http-auth.php

Или вы можете сворачивать самостоятельно с формой входа и отслеживанием сеанса:

http://www.php.net/manual/en/book.session.php.

Http auth означает, что пользователь получает всплывающее диалоговое окно с запросом имени пользователя и пароля, что менее обычное, чем самокатетированная версия.

Наслаждайтесь!


Хорошо, я объясню, как идет базовая концепция, и очень простая реализация, чтобы добиться успеха.

PHP (и большинство веб-приложений) полагаются на сервисы RESTful, которые, к нашему беспокойству в настоящий момент, означают, что каждый запрос не удаленно связан с любым другим запросом, будь то тот же пользователь или другие.

Итак, что это значит?

Это означает, что для каждого отдельного запроса вам необходимо выполнить свои проверки. Вы должны убедиться, что у пользователя есть разрешения на выполнение этой страницы, или менее сильно даже увидеть его содержимое.

Как это достигается?

Во многом, на самом деле. Существует множество методов, используемых для обеспечения авторизации в веб-приложениях, но они, по сути, оба ломаются до одного из двух - централизованного или децентрализованного.

- Централизованный

Это означает, что все ваши действия (и контроллеры) обрабатываются через один файл. Скажем index.php. Затем этот файл включал или делегировал свои задачи другим файлам (которые не выполняются самостоятельно через обычные запросы) на основе параметров запроса. Это очень популярный подход, но не совсем прямой для новых разработчиков. Примеры приложений, использующих этот подход, будут иметь URLS типа: index.php? Do = register, index.php? Do = login, index.php? Do = showtopic & topic_id = 2 и т.д.

Простая реализация этого метода будет выглядеть так:

и т.д.

Я документировал, куда должен идти обычный код auth.

- Децентрализованный

Используя этот подход, ваш auth-код должен идти в начале каждого отдельного файла. URL-адреса приложений такого типа обычно выглядят примерно так: register.php, login.php и т.д. Основная проблема здесь заключается в том, что вам нужно выполнить всю логику auth для каждого файла, как указано выше, и это может быть тяжелая работа, если ваши файлы увеличиваются. Удобное решение состоит в том, чтобы иметь эту логику в одном файле и включать этот файл (который бы убил запрос для unauth personel) до любой вашей логики. Простой пример:


При входе в систему с использованием формы вы должны проверить имя пользователя и пароль в базе данных. Пароль должен быть скремблирован (как правило, выполняется с использованием алгоритма хеширования MD5) и сохраняется в базе данных таким же образом. Вы фиксируете переменные, используя что-то вроде (используйте некоторую проверку, чтобы проверить, действительны ли переменные POST):

$username = $_POST['username'];
$passwordHash = md5( $_POST['password'] );

Имя пользователя и хешированный пароль должны быть сохранены в вашей базе данных. Затем вы можете проверить соответствие в базе данных, используя:

$res = mysql_query("SELECT * FROM users WHERE username='".$username."' && password='".$password."'");

Когда пользователь найден, вы используете сеансы для хранения пользовательских значений, что позволит вам получить доступ к информации о пользователях на разных страницах. ПРИМЕЧАНИЕ. session_start() обычно размещается в верхней части страницы, но я поместил его здесь для удобства чтения.

if ( mysql_num_rows($res) ) {
 session_start();
 session_regenerate_id(); // regenerate session_id to help prevent session hijacking
 $row = mysql_fetch_assoc($res);
 $_SESSION['logged_on'] = true;
 $_SESSION['username'] = $row['username'];
 // add more session variables about the user as needed
}

На каждой странице, которую вы хотите защитить, вы добавляете следующее вверху этих страниц:

session_start();
if ( !isset($_SESSION['logged_on']) ) {
 header("Location: login.php"); // user is not logged in, redirect to login page
 exit;
}
// page content here


Это то же самое, что предложил лорд Артемис, но этот урок легче следовать и ориентироваться на начинающих.

http://css-tricks.com/easily-password-protect-a-website-or-subdirectory/


Я думаю, что большинство пользователей будут ожидать ввода формы для входа. Если вы хотите, чтобы пользователь вернулся и входил в систему с той же учетной записью позже, после истечения срока их сеанса, вам понадобится база данных для хранения информации о пользователе.

При хранении информации о пользователях в базе данных вы, вероятно, также не должны хранить свой пароль. Например:

name password ...
-----------------------------------------------
Johnny '3858f62230ac3c915f300c664312c63f'
Alice '80338***************************'
.
.
.

Пароль Johnny на самом деле "foobar" , но база данных хранит md5('foobar'). Когда Джонни пытается войти в систему, он вводит свое имя пользователя ( "Джонни" ) и его пароль ( "foobar" ). В PHP вы вводите введенный пароль и вызываете его значение пароля из базы данных, в результате чего:

if (md5('foobar') == '3858f62230ac3c915f300c664312c63f')

Это условие true. Вы можете подтвердить правильность входа в систему, но вы никогда не храните его фактический пароль.

Пароль Алисы - "foobaz". Она пытается войти в систему, но случайно вводит "foobar" , пароль Джонни. это приводит к:

if(md5('foobar') == '80338***************************')

Что такое false. Опять же, вы не знаете, что такое пароль Алисы, просто она ввела неправильный.

Недостатком этой стратегии, конечно, является то, что вы не можете сказать пользователю, что их пароль, когда они его забывают - вы не знаете! Вы можете решить эту проблему, предоставив пользователю reset свой пароль (в какую-то полуслучайную строку) вместо пролива, сообщив им, что их пароль.


Сайты, о которых вы упомянули, скорее всего обходятся, потому что страницы, прошедшие проверку безопасности, не сохраняются, а затем проверяют статус входа на каждую страницу. Вам необходимо проверить, что посетитель зарегистрирован, прежде чем будет предоставлен доступ к странице.


Он не использует PHP для аутентификации, но вы можете использовать htaccess для обеспечения аутентификации и, возможно, управлять файлом .htpasswd с помощью PHP:

http://www.freewebmasterhelp.com/tutorials/htaccess/

licensed under cc by-sa 3.0 with attribution.