Безопасно ли использовать связку
Безопасность
Одно из главных правил при обработке форм на php — НИКОГДА не доверяйте данным пришедшим с формы. Вам нужно обязательно отфильтровать каждое поле на стороне сервера, даже если на клиенте у вас стоит jQuery валидатор и прочие javascript обработчики призванные предотвратить некорректную или злонамеренную отправку данных через форму на сервере.
Существует множество способов фильтрации данных, один из приёмов это так называемый «Белый список» когда вы точно знаете что в переменной age у вас может быть только целочисленное значение в диапазоне от 18 до 60, вы можете проверить переменную на int а так же входит ли число в заданный диапазон.
if(is_numeric($_POST['age'])){
$age = intval($_POST['age'];
if($age >= 18 && $age <= 60){
// всё ок
}
}
Поле email можно проверять при помощи регулярного выражения на соответствие определённому шаблону, например:
if (preg_match('/[0-9a-z] @[a-z]/', $_POST['email'])) {
//email введён верно
}
И тому подобное. Всегда помните что все данные приходящие из формы несут потенциальную опасность и их нужно тщательно проверить. А на этом всё. По мере работы буду добавлять в статью «живые примеры» и детали. Желаю удачи!
Функции и конструкции языка использованные в статье: intval(), is_numeric()
Обработка массивов
Что делать когда нужно передать несколько значений одного параметра? Например то же образование у человека может быть и средне-специальное и высшее. Можно добавить атрибут multipli в наш selectbox или использовать поле типа checkbox. Давайте превратим наш selextbox в checkbox.
Обработка списков
Работа с выпадающим списком selectbox мало чем отличается от обычных полей, тут больше отличие со стороны HTML, давайте добавим в нашу форму небольшой selexbox для наглядной демонстрации:
Особенности отправки checkbox
Обратите внимание на прошлый пример. При использовании checkbox не нужно создавать отдельное поле с пустым value как это было у selectbox. Дело в том, что если вы не выбрали ни одно значение из предложенных checkbox-ов, этот параметр вовсе не будет отправлен на сервер.
Передача данных в адресной строке
Одним из простых способов передачи данных php сценарию является адресная строка браузера, где после знака ? вы можете указать набор параметров в формате имя_параметра=значение если параметров несколько они разделяются сиvволом & . Например:
Передача файла
Для отправки файла средствами веб-формы предусмотрено специальное поле file, давайте добавим его в нашу форму. Но прежде чем это сделать, нужно внести изменения в тег <form> а именно:
- Изменить метод передачи данных на post
- Добавить атрибут enctype=«multipart/form-data»
Вот так:
Трансляция формы
Теперь перейдём непосредственно к теме статьи. Для продолжения нам придётся сверстать небольшую форму, я предлагаю сделать её внутри тестового скрипта script.php из примеров выше. Вот пример html-формы:
Шаг 8
И последний штрих. Мы можем ограничивать доступ не только к странице админки, но и к любой другой. Для этого достаточно открыть сессию и проверить наличие метки в ней. Чтобы не копировать на каждую новую страницу эти блоки кода — мы их можем вынести в отдельный файл (auth.php) и затем просто подключать этот файл на страницах, к которым нужно ограничить доступ по паролю. Содержимое файла auth.php будет таким:
Заключение
На этом наш урок завершен, мы выполнили поставленную в уроке задачу — написали свою простенькую систему авторизации. Конечно, как говорилось выше, для серьезных проектов такая система авторизации мало подходит, поскольку пользователей у нас может быть больше одного и хранить их нужно в БД.
Да и шифрование пароля функцией md5() часто также бывает неэффективно, поскольку существуют сервисы с базами хешей… но для нас главное было понять принцип построения системы авторизации, а строится она именно по такому принципу. Итак, урок окончен. До новых встреч.
Нормальный браузер, по идее должен передавать имя пользователя и пароль только если получит от сервера ответ с кодом 401, т.е. сервер запросит учетные данные. Из адреса, учетные данные должны удаляться браузером автоматически. При общении браузера с сервером, эти данные не являются частью URL.
Не все браузеры поддерживают адреса в подобном формате, как раз для повышения безопасности, чтобы пользователи не светили своими логинами и паролями.
При использовании протокола HTTPS данные передаются зашифрованном виде, надежность выше.
Однако использование ссылок, в которых содержится логин и пароль в открытом виде все равно может стать причиной утечки данных.
Про невнимательность и ошибки со стороны пользователя уже говорил. Еще возможный вариант: на компьютер пользователя можно поместить программку-вирус, которая будет ловить именно такие ссылки (в буфере или проверять адресную строку пользователя). Технически это более простое решение, чем перехватывать трафик, особенно если трафик будет зашифрованным. И это проще, чем анализировать поведение пользователя и перехватывать учетные данные, если пользователь их самостоятельно вводит (даже если используется буфер обмена). Такая программа может быть более незаметной для антивирусного ПО. В обще, лучше минимизировать риски 🙂