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

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

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

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

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

«Исправить» для этого является то же самое «исправление» для запросов, отличных от AJAX, – используйте SSL.

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

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

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

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

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. И помимо общей вводящей в заблуждение информации, где POST более безопасен, чем GET, это не так. Оба они одинаково открыты для нападавших.

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

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

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

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

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

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

  • Топ-10 аварийных отверстий Ajax и факторов вождения
  • Отверстия безопасности Ajax и способы их заполнения

черт возьми, вы меня волнуете. SSL не защищает от атаки MITM отравления арп. Было бы смертельно поклоняться SSL, как вы, ребята. У вас должен быть способ зашифровать пароль на стороне клиента, прежде чем он совершит хотя бы один прыжок, или даже новичок-хакер сможет перехватить пароль в виде открытого текста

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

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

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