Насколько безопасно отправлять простой текстовый пароль с помощью AJAX?


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

В данный момент я работаю над системой входа в систему (ничего формального, просто экспериментирую) и планировал использовать PHPLiveX (библиотеку AJAX) для некоторых функций. В основном вы создаете некоторые функции PHP, которые затем вызываются через JavaScript. Вы можете добавить параметры (getElementById) в JavaScript, которые передаются в функцию PHP.

На самом деле я хотел узнать, безопасно ли это делать. просто вызовите функцию из JavaScript, не шифруя пароль, а затем позвольте функции PHP зашифровать его (в данном случае SHA256). Можно ли перехватить данные, передаваемые через AJAX? Если да, то насколько это вероятно?

13 12

13 ответов:

Не более или менее безопасно, чем обычный запрос HTTP POST, выданный браузером (например, из <form>)

" исправление "для этого-то же самое" исправление " для запросов без AJAX - используйте SSL.

Как уже упоминали другие, это не более опасно, чем отправка сообщения HTTP из формы. На самом деле, это одно и то же.

Но если HTTPS не является опцией, вы всегда можете использовать схему вызова/ответа через незашифрованное соединение. В основном это работает следующим образом:

  • сервер имеет SHA (или любой другой алгоритм хэширования, который вы предпочитаете) хэш пароля пользователя.
  • клиент имеет пароль.
  • клиент запрашивает (используя незашифрованный AJAX), чтобы сервер отправил вызов (случайная строка байтов; символы в порядке.)
  • сервер создает вызов и идентификатор вызова и сохраняет его с истечением срока действия.
  • клиент получает вызов и идентификатор вызова.
  • клиент хэширует пароль с помощью SHA.
  • клиент хэширует полученный хэш с вызовом, добавленным каким-либо образом.
  • клиент отправляет идентификатор вызова (а не сам вызов) и второй результирующий хэш.
  • сервер ищет вызов, используя ID, если он существует и не истек.
  • Сервер добавляет вызов к сохраненному хэшу пароля и создает хэш, используя ту же схему, что и клиент.
  • сервер сравнивает свой хэш с клиентом. Если это одно и то же, пользователь проходит проверку подлинности.

Это на самом деле довольно просто настроить, как только вы получите идею. Википедия содержит дополнительную информацию о нем.

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

Отправляете ли вы пароль через AJAX или через обычную форму, он все равно отправляется через HTTP POST (надеюсь) запрос. Таким образом, вы не добавляете и не удаляете ничего из соображений безопасности.

Единственный способ предотвратить перехват вашего пароля - это использовать SSL (через AJAX или нет).

Это так же безопасно, как иметь форму входа, которая не защищена SSL быть отправлены по проводу, как почти все форумы там делают!

Убедитесь, что целью вашего AJAX-вызова является доверенная HTTPS:// страница, и вы сделали ее такой же безопасной, как и любую другую отправку той же информации, что и остальная часть вашего приложения. Большинство библиотек / фреймворков не ограничивают вас только HTTP:/ / для ваших вызовов AJAX.

Да, это можно прочитать. Так же, как и все остальное без какого-либо уровня безопасности (см. SSL)

Чтобы увидеть это самостоятельно, запустите инструмент, подобный WireShark, Когда вы выполняете команды AJAX.

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

Вызовы AJAX - это просто HTTP-запрос.

Он ведет себя как обычный HTTP-запрос, а также имеет все преимущества и недостатки. Это ничуть не безопаснее.

Чтобы сделать ваши вызовы AJAX безопасными, вы можете попробовать несколько способов:

  1. Используйте SSL. Протокол SSL зашифрует сообщения между пользователями и сервером. Недостатком SSL является то, что вам придется платить дополнительную плату за действительные сертификаты SSL. Недействительные сертификаты SSL, хотя и могут быть использованы, не обеспечивают тот же уровень гарантии безопасности для пользователей.
  2. шифрование запросов перед отправкой, на стороне клиента. Например: хэш-пароль пользователя перед отправкой по сети. В большинстве случаев вам не нужен обычный текстовый пароль пользователя. Это невозможно сделать, если пользователи не разрешают выполнение сценариев на стороне клиента.
  3. и помимо обычной вводящей в заблуждение информации, где почта безопаснее, чем получить, это не так. Оба одинаково открыты для нападающих.

Вы посылаете его в открытом виде, так что любой, кто нюхает/слушает/и т. д. сеть клиента сможет легко увидеть пароль. Вызов AJAX - это просто старое сообщение HTTP. Если вы хотите увидеть это в действии, запустите копиюwireshark и сделайте запрос своим. Вы сможете увидеть пароль в пакете HTTP.

Как уже упоминалось, SSL является лучшим решением здесь. Однако вы можете хэшировать пароль на стороне клиента. Если вы загуглите для него, вы найдете множество реализаций javascript md5.

Это небезопасно. Не отправляйте незашифрованные пароли. Очень вероятно, что они будут перехвачены в какой-то момент у вас возникнут серьезные проблемы.

Вот видео пример захвата пароля telnet. Telnet отправляет простой текст, и это прекрасно иллюстрирует основную проблему, которая у вас есть, если вы даже думаете об этом. Любой двухбитный скрипт kiddie может перехватить простой текстовый пароль быстрее, чем вы, поэтому "О боже, куда делась моя база данных?"

Простой текстовый пароль, передаваемый через AJAX, будет таким же безопасным, как и тот же пароль, передаваемый через обычную HTTP-почту. То есть AJAX использует HTTP и поэтому может быть перехвачен и обнюхан. Лучше всего использовать протокол HTTPS (SSL).

Для дальнейшего чтения по AJAX и безопасности я бы рекомендовал следующие чтения

Черт побери, ребята, вы меня беспокоите. SSL не защищает от атаки ARP-отравления MITM. Было бы фатально поклоняться SSL, как вы, ребята. Вы должны иметь способ зашифровать пароль на стороне клиента, прежде чем он сделает хотя бы один прыжок, иначе даже начинающий хакер сможет перехватить пароль в открытом виде

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

На следующем сайте есть действительно хорошая информация в отношении Ajax и XSS или XSRF атак http://www.isecpartners.com/files/isec-attacking_ajax_applications.bh2006.pdf

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