ajax

Безопасность AJAX приложений

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

Аутентификация — подтверждение подлинности субъекта, процесс узнавания пользователя.

Авторизация — наделение пользователя определенными правами. Обычно проходит после аутентификации.

Виды аутентификации пользователя:

  • Аутентификация средствами HTTP протокола: X.509, Kerberos, NTLM, Basic аутентификация, Digest аутентификация.
  • Прикладная аутентификация, когда протокол не используется, аутентификацию выполняет ваше приложение. Сейчас чаще применяют ее.

При базовой аутентификации клиент производит запрос секретного объекта (предполагается, что на сервере лежит секретный объект). Нужно ввести логин и пароль для доступа к секретному объекту.

Отличия всех аутентификаций — в способе передачи заголовка Authorization от клиента к серверу. В базовой аутентификации в этой строке используется простое кодирование base64, в digest аутентификации — хэширование.

Хэширование (hashing) — операция преобразования массива данных в такой вид, для которого гарантированно отсутсвует обратное преобразование. Т.е. хэширование изначально ведет к потере данных. Но при этом одна и та же строка должна давать один и тот же хэш.

Наиболее известное хэширование: md4, md5, sha1, sha256, sha512. Md5 на выходе дают 32-битный хэш, но по современным меркам это немного (32 бита = 4 миллиарда значений). Md5 — можно взломать с помощью мощного процессора, а применив графические процессоры — вообще легко путем перебора хэшей (брутфорс). Лучше перейти на современный sha256.

Шифрование

Для шифрования данных используют два вида шифрования: симметричное шифрование (блочные системы) и несимметричное.

Симметричное шифрование (криптография). Есть некий поток данных. Надо его зашифровать. В этом случает он шифруется с помощью некоего ключа. Ключом является какой-то массив данных (пример, 10 байт). Каждый байт потока на основе байта ключа соответственно преобразуется. Если ключ недостаточной длины, кодирование байтов входного потока происходит на основе уже используемых байтов ключа, повторы пошли. Эти повторы в криптоанализе очень опасны. Если накопить достаточное количество информации, то существует много методов, как по этим повторам восстановить исходный ключ. Поэтому повторы в ключе недопустимы.

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

ajax безопасность

См. схему выше. Алиса хочет, чтобы Боб для нее шифровал. Алиса генерирует пару ключей. Один из ключей она объявляет закрытым, прячет его, и он навсегда остается только у нее на компьютере. А второй ключ она объявляет открытым. И публикует его. Боб видит открытый ключ. Он знает ключ Алисы и хочет для нее что-то зашифровать. Он ее открытым ключом и шифрует и передает по открытым каналам связи. И расшифровать послание можно только с помощью закрытого ключа на компе у Алисы. И Боб делает то же самое с закрытм ключом, что и Алиса. Таким образом они обмениваются зашифрованными сообщениями.

Защита трафика (SSL/TLS)

Передача данных по протоколу HTTP не шифруется. Даже пароли на сайте не шифруются. Например, почтовик mail.ru не шифрует пароли, они передаются в открытом виде.

Но применение технологии SSL/TLS решает следующие проблемы:

  • шифрование данных (перехватить невозможно),
  • подтверждение сервера (нельзя подделать сервер),
  • подтверждение клиента (аутентификация клиента).



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

Ваш e-mail не будет опубликован.