1

Я ищу идеи для аутентификации пользователя без обычной поездки на сервер. Любой полузащищенный способ аутентификации пользователя на стороне клиента является приемлемым.Аутентификация без использования сервера

Я думаю, что хранить некоторый зашифрованный секрет в js-файле, тогда только пользователи, у которых есть правильный код, смогут его расшифровать, а правильный код может быть введен или сохранен в файле cookie или что-то в этом роде. Звучит неплохо или любые другие идеи?

+9

Проблема в том, что пользователь может манипулировать всем и всем на стороне клиента. Никогда не будет безопасной для проверки подлинности на стороне клиента. Что произойдет, если эти куки будут украдены и наложены на другую машину? – crush

+1

Аутентификация без сервера проста. Вопрос в том, «что вы собираетесь делать с такой аутентификацией». Если вы собираетесь предоставить пользователям ресурсы на стороне сервера после их аутентификации на стороне клиента, у вас будет плохое время. –

+0

Любой полукомпетентный кодер сможет обойти любую так называемую «безопасность», если вы дадите пользователю возможность аутентифицироваться исключительно на клиенте. Если эта ненадежная защита достаточно хороша для вашего приложения, то на самом деле не имеет значения, как вы это делаете. Лучшие практики говорят: «Не делайте этого.«Если вы полны решимости идти вперед, то выбирайте способ, который дает вам чувство добра, достаточное, чтобы вы считали нужным. –

ответ

0

Возможно, вы можете сохранить хэш пароля и зашифровать разумный исходный код JS приложения, чтобы оценить его, когда пользователь «аутентифицирован» с помощью правильного ключа?

См. Статью this о методе Google, касающемся обработки javascript. Использовать зашифрованный исходный код строки javascript, и вы защищены на стороне клиента?

+0

Это не защищено каким-либо образом, формой или формой. Клиент может читать и выполнять все ваши Javascript, _by definition_.Если вы зашифруете Javascript, чтобы клиент на самом деле не мог его прочитать, он становится невозможным для выполнения и поэтому бесполезен. – SLaks

+0

Я никогда не говорил, что javascript будет зашифрован, Just That только правильный ключ пользователя может его расшифровать (см. техника в статье, о которой я упоминал). – cubitouch

+0

Вы можете также использовать управление доступом и не обслуживать его вообще для других пользователей. – SLaks

0

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

То, о чем вы просите, определенно возможно, но я не уверен, что это действительно будет полезно для вас.

Вам необходимо использовать функцию вывода ключа, такую ​​как PBDFK2 («Функция деривации ключа на основе пароля 2»). Пользователь вводит пароль, затем KDF преобразует пароль в ключ. Затем вы используете ключ для работы сильного симметричного шифра, такого как AES (и убедитесь, что используете безопасный режим работы, например CBC). Этот подход достаточно безопасен, но он по-прежнему уязвим для ключевых регистраторов (уровень ОС и уровня браузера) и проверки состояния памяти.

Важным моментом здесь является то, что пользователь должен ввести пароль, чтобы зашифровал секрет в первую очередь. Вы не можете отправить пользователю секрет, а затем потребовать пароль. Пользователь может использовать пароль для шифрования сообщения, а затем для этого потребуется пароль для будущего доступа.

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

Практически говоря, CryptoJS - это реализация JavaScript, которая поддерживает как AES, так и PBKDF2.

Смежные вопросы