Отправьте пароль безопасно, используя запрос ajax - PullRequest
3 голосов
/ 23 октября 2010

просто чтобы узнать, можно ли безопасно отправить пароль через Ajax-запрос?

У меня есть окно входа в систему, которое вызывает ajax-запрос, чтобы попытаться выполнить вход / пропуск и получить объект JSON с ошибками (если есть).

Стоит ли вместо этого использовать перенаправление форм?

[EDIT] Хранить зашифрованный пароль в базе данных не решение, потому что логин и пароль, отправленные ajax, являются логином / паролем для доступа к базе данных (внутреннее приложение).

Ответы [ 4 ]

13 голосов
/ 23 октября 2010

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

12 голосов
/ 23 октября 2010

Для технического ада это можно.Если у вас есть доступ к односторонней криптографической функции crypt(text,key), которая поддерживает crypt(crypt(T,A),B) == crypt(crypt(T,B),A), вы можете сделать следующее:

  • Иметь секретный ключ для вашего приложения, KEY.Никогда никому не говори.
  • Когда пользователь регистрируется, сохраняйте crypt(password,KEY) в базе данных.
  • Когда пользователь хочет войти в систему, отправьте ему случайно сгенерированный ключ RAND
  • Пользовательвведите пароль, форма вычислит и отправит crypt(password,RAND) через незащищенный AJAX.Пароль никогда не покидает компьютер пользователя.
  • Сервер вычисляет crypt(crypt(password,RAND),KEY) из ответа формы, crypt(crypt(password,KEY),RAND) из базы данных и сравнивает их.Они должны быть равны.

Все это не является сложным ненужным и требует больших усилий для правильной и безопасной реализации. Покупка SSL-сертификата и использование HTTPS на порядок проще в достижении этого уровня безопасности, и даже больше.

1 голос
/ 23 октября 2010

Вот что вы могли бы сделать:

Пароль хеша и хранилище в базе данных

На стороне клиента: пароль хеша, затем добавить соль (конкатенация строки session_id), затем снова хэш

На сервере: взять хэшированный pw из базы данных, затем добавить соль (объединить строку session_id), затем снова хешировать

[Редактировать: а затем сравнить хеш-соль-хеш, сгенерированный на сервере, с хешем, отправленным с клиента]

Перехват вашего пароля hash-salt-hash теперь совершенно бесполезен, потому что он действителен только для этого конкретного сеанса ...

0 голосов
/ 25 октября 2010

То, что вы ищете, это «протокол с нулевым знанием».Это способ сообщить, что вы знаете пароль, не отправляя его.Вы должны связываться между JavaScript, запущенным в браузере пользователя, и сервером.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...