Есть ли способ безопасной отправки информации в Ajax? - PullRequest
4 голосов
/ 20 апреля 2011

В настоящее время я разрабатываю приложение на HTML + JS, основанное почти полностью на ajax-соединениях (с помощью вызова jQuery.ajax(), чтобы упростить процесс).

Я думал о наилучшей практике для безопасных вызововбез использования HTTPS (по крайней мере, в настоящее время. Я не могу позволить себе платить за сертификат прямо сейчас).

На данный момент, единственное, что меня беспокоит, это шаги регистрации и входа в систему.Может быть, вход немного проще.Я думал о отправке имени пользователя и метки времени, а затем зашифровывать их, используя пароль пользователя. Таким образом, при этом я не буду отправлять пароль (сохраняя в качестве секрета, как в OAuth).Сервер должен проверить пользователя, расшифровать его с помощью пароля и сопоставить полученную метку времени с дешифрованным результатом.Сервер должен сохранить номер типа nonce в базе данных (чтобы избежать атак повторения), а затем вернуть пользователю еще один уникальный идентификатор (зашифрованный с помощью пароля пользователя).В этот момент пользователь должен начать использовать этот ключ для шифрования всей своей информации (и, возможно, другого одноразового номера) и отправить ее на сервер.Пожалуйста, исправьте меня, если вы обнаружите ошибку или утечку.

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

Я знаю, что в этот момент HTTPS может спасти мою жизнь (и, возможно,это единственное решение), но на данный момент я не могу его использовать.

Есть ли какое-либо другое решение или мне следует подождать, пока я смогу использовать HTTPS?Имейте в виду, что если бы я мог пропустить ожидание, было бы лучше.Спасибо товарищи!

Ответы [ 4 ]

4 голосов
/ 20 апреля 2011

Краткий ответ: Вы не можете сделать это без HTTPS

Более длинный ответ: если вы попытаетесь сделать это без HTTPS, вы обнаружите, что пытаетесь воспроизвести все, для чего предназначен HTTPS. Вы могли бы достичь в какой-то момент, но нереально полагать, что вам удастся реализовать даже 1%, который предлагает HTTPS. Единственным преимуществом, которое вы получите, будет неясный механизм безопасности (безопасность через неизвестность), который может быть приемлем для некритических систем, но с треском провалится в реальной критической ситуации.

Вы можете создать собственный известный вам сертификат и затем работать с Ajax так же, как и с обычными вызовами HTTP. Единственный недостаток - пользователи получат предупреждающее сообщение.

3 голосов
/ 20 апреля 2011

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

2 голосов
/ 20 апреля 2011
  • Создание пары открытого и закрытого ключей на сервере вместе со случайно сгенерированной солью.
  • Присоединение пары ключей и соли к объекту сеанса пользователя.
  • Отправкаоткрытый ключ и соль для кода на стороне клиента.
  • Используйте открытый ключ и соль для шифрования запросов AJAX.

Это не будет тривиальной задачей.Вы, вероятно, обнаружите, что дешевле и эффективнее купить сертификат.

РЕДАКТИРОВАТЬ: Это также означает, что весь обычный HTTP-трафик (HTML, изображения, CSS и т. Д.)отправлено в открытом виде.Это может быть проблемой, так как это может позволить перехватчику косвенно выяснить, что делает пользователь.

0 голосов
/ 20 апреля 2011

Я думаю, вы должны взглянуть на:

http://assl.sullof.com/assl/

Вот описание проекта:

aSSL - это библиотека, распространяемая по лицензии MIT, в которой реализована технология, аналогичная SSL без HTTPS.

aSSL позволяет клиенту согласовать секретный случайный 128-битный ключ с сервером, используя алгоритм RSA. Как только соединение установлено, данные будут отправлены и получены с использованием алгоритма AES.

aSSL состоит из нескольких файлов Javascript и компонента на стороне сервера. Поскольку я недавно изменил алгоритм согласования с RC4 на RSA, в настоящее время доступен только чистый компонент сервера Javascript (ASP). Я сделаю портирование для основных веб-языков (PHP, Java, Perl, Python, TKL и т. Д.) Как можно скорее, как только библиотека пройдет бета-фазу.

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