Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

РЕДАКТИРОВАТЬ: Я заметил, что забыл упомянуть, независимо от того, успешна ли аутентификация, вы должны исключить вызов, независимо. Предоставление клиенту нескольких попыток по одному вызову может привести к проблемам безопасности.

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

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

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