Уроки Ардуино. HTTP-протокол (продолжение). Передача данных WEB-серверу с помощью POST-запросов. | Оборудование, технологии, разработки

Безопасно ли использовать связку

Браузер читает данные из URL и формирует на их основе HTTP-заголовок Authorization. Имя пользователя и пароль обычно кодируется в Base64 (т.е. их легко можно декодировать, если перехватить трафик): scr.foxtools.ru/2tw
Нормальный браузер, по идее должен передавать имя пользователя и пароль только если получит от сервера ответ с кодом 401, т.е. сервер запросит учетные данные. Из адреса, учетные данные должны удаляться браузером автоматически. При общении браузера с сервером, эти данные не являются частью URL.

Не все браузеры поддерживают адреса в подобном формате, как раз для повышения безопасности, чтобы пользователи не светили своими логинами и паролями.

При использовании протокола HTTPS данные передаются зашифрованном виде, надежность выше.

Однако использование ссылок, в которых содержится логин и пароль в открытом виде все равно может стать причиной утечки данных.

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

Безопасность

Одно из главных правил при обработке форм на 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> а именно:

  1. Изменить метод передачи данных на post
  2. Добавить атрибут enctype=«multipart/form-data»


Вот так:

Трансляция формы

Теперь перейдём непосредственно к теме статьи. Для продолжения нам придётся сверстать небольшую форму, я предлагаю сделать её внутри тестового скрипта script.php из примеров выше. Вот пример html-формы:

Шаг 8

И последний штрих. Мы можем ограничивать доступ не только к странице админки, но и к любой другой. Для этого достаточно открыть сессию и проверить наличие метки в ней. Чтобы не копировать на каждую новую страницу эти блоки кода — мы их можем вынести в отдельный файл (auth.php) и затем просто подключать этот файл на страницах, к которым нужно ограничить доступ по паролю. Содержимое файла auth.php будет таким:

Заключение

На этом наш урок завершен, мы выполнили поставленную в уроке задачу — написали свою простенькую систему авторизации. Конечно, как говорилось выше, для серьезных проектов такая система авторизации мало подходит, поскольку пользователей у нас может быть больше одного и хранить их нужно в БД.

Да и шифрование пароля функцией md5() часто также бывает неэффективно, поскольку существуют сервисы с базами хешей… но для нас главное было понять принцип построения системы авторизации, а строится она именно по такому принципу. Итак, урок окончен. До новых встреч.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *