Ответ 1
Не более-менее безопасно, чем обычный HTTP-запрос POST, выданный браузером (как из <form>
)
"Исправить" для этого является то же самое "исправление" для запросов без AJAX - используйте SSL.
Может быть, заголовок плохо сформулирован, но не мог придумать лучшего способа сказать это.
В настоящий момент я работаю над системой входа (ничего не формально, просто экспериментирую) и планировал использовать PHPLiveX (библиотеку AJAX) для некоторых функций. В основном вы создаете некоторые функции PHP, которые затем вызывается через JavaScript. Вы можете добавить параметры (getElementById) к JavaScript, которые передаются в функцию PHP.
Я действительно хотел знать, можно ли просто вызвать функцию из JavaScript, не зашифровывая сначала пароль, а затем позволить функции PHP зашифровать ее (в этом случае SHA256). Можно ли перехватить данные, переданные через AJAX? Если да, то насколько это возможно?
Не более-менее безопасно, чем обычный HTTP-запрос POST, выданный браузером (как из <form>
)
"Исправить" для этого является то же самое "исправление" для запросов без AJAX - используйте SSL.
Как отмечали другие, это не более опасно, чем отправка HTTP-сообщения из формы. На самом деле, это то же самое.
Но если HTTPS не является вариантом, вы всегда можете использовать схему вызова/ответа по незашифрованному соединению. В основном он работает следующим образом:
На самом деле довольно просто настроить, как только вы получите эту идею. Wikipedia содержит дополнительную информацию об этом.
РЕДАКТИРОВАТЬ: Я заметил, что забыл упомянуть, независимо от того, успешна ли аутентификация, вы должны исключить вызов, независимо. Предоставление клиенту нескольких попыток по одному вызову может привести к проблемам безопасности.
Если вы отправляете пароль через AJAX или через обычную форму, он все равно отправляется через HTTP POST
(надеюсь) запрос. Таким образом, вы не добавляете и не удаляете ничего разумного.
Единственный способ предотвратить перехват вашего пароля - использовать SSL (через AJAX или нет).
AJAX-вызовы - это простой HTTP-запрос.
Он ведет себя как обычный HTTP-запрос, а также имеет все преимущества и недостатки. Это не безопаснее.
Чтобы сделать ваши звонки AJAX безопасными, вы можете попробовать несколько способов:
Это так же безопасно, как иметь форму входа, которая не защищена SSL, должна быть отправлена по проводу, как это делают почти все форумы!
Убедитесь, что цель вашего вызова AJAX является надежной страницей HTTPS://, и вы сделали ее как можно более безопасной, чем любой другой отправитель той же информации, что и остальная часть вашего приложения. Большинство библиотек/фреймворков не ограничивают вас только HTTP://для ваших вызовов AJAX.
Да, это можно прочитать. Как и все остальное без какого-либо уровня безопасности (см. SSL)
Чтобы убедиться в этом, запустите инструмент, например WireShark, как и ваши команды AJAX.
Насколько вероятно? Не очень, но пароль пользователя, вероятно, будет сохранен в файлах журналов в обычном тексте. Если кто-то в конце концов его найдет, то это могут быть плохие новости. Еще в колледже мой сетевой класс имел доступ к некоторым (полу) причудливым маршрутизаторам. У нас были задания, в которых мы подписались на учетные записи на случайных сайтах. Когда мы это сделали, мы заметили некоторые очень страшные вещи в файлах журналов в маршрутизаторах. Это было для меня открытием для глаз, чтобы задуматься о том, как отслеживается каждое сообщение и, скорее всего, где-то зарегистрировано.
Открытый текстовый пароль, передаваемый через AJAX, будет таким же безопасным, как тот же пароль, который передается через обычную HTTP-почту. То есть AJAX использует HTTP, и поэтому его можно перехватить и понюхать. Лучше всего использовать HTTPS (SSL).
Для дальнейшего чтения в AJAX и безопасности я бы рекомендовал следующие показания
Это не безопасно. Не отправляйте незашифрованные пароли. Очень вероятно, что в какой-то момент они будут перехвачены, у вас будет серьезная проблема.
Ниже приведен пример видео, иллюстрирующий захват пароля telnet. Telnet отправляет в текстовом виде, и это прекрасно иллюстрирует основную проблему, возникшую у вас, если вы даже думаете об этом. Любой двухбитовый script kiddie может быстрее закопать простой текстовый пароль, чем вы можете: "Боже мой, куда моя база данных?"
Вы отправляете его в ясном виде, поэтому любой, кто обнюхивает/прослушивает/etc, клиентская сеть сможет легко увидеть пароль. Вызов AJAX - это просто старое HTTP-сообщение. Если вы хотите увидеть это в действии, запустите копию wireshark и сделайте запрос самостоятельно. Вы сможете увидеть пароль в HTTP-пакете.
Как уже упоминалось, SSL является лучшим решением здесь. Однако вы можете использовать пароль на стороне клиента. Если вы Google для этого, вы найдете множество реализаций javascript для md5.
Черт, ребята, меня беспокоит. SSL не защищает от атаки MITM отравления арп. Было бы смертельно поклоняться SSL, как вы, ребята. У вас должен быть способ зашифровать пароль на стороне клиента, прежде чем он совершит хотя бы один прыжок, или даже новичок-хакер сможет перехватить пароль в открытом тексте
Также необходимо знать о потенциальных уязвимостях безопасности при создании приложения, использующего Ajax.
На следующем сайте есть действительно хорошая информация об атаках Ajax и XSS или XSRF http://www.isecpartners.com/files/isec-attacking_ajax_applications.bh2006.pdf
Не забывайте, что когда вы делаете удаленную функцию доступной для вызова javascript, пользователь может просто угадать вызов функции и изменить ее для выполнения своих целей.