2015-11-30 3 views
2

Я пытаюсь сделать мой REST API более безопасным. На данный момент я передаю свой пароль в своем угловом приложении с CryptoJs.SHA256, прежде чем отправлять его на мой C# backend. Но я понимаю, что лучше хеш-пароль на стороне сервера. Итак, как я могу отправить пароль только для чтения на сервере? Я собираюсь добавить SSL, но я знаю, что HTTPS также прерывается. Есть ли другое решение?Как безопасно отправлять пароль с клиентской стороны?

Благодаря

+1

Что на стороне клиента? Программа Javascript? Страница ASP.NET? Клиент C#? Пожалуйста, добавьте дополнительную информацию, например, как вы связываетесь с сервером. –

+2

Если HTTPS сломан, то любая реализация JS, которую вы отправляете клиенту, также недостоверна (поскольку ее можно заменить злоумышленником). Просто используйте HTTPS (правильно, ничто из этого «просто игнорируйте БОЛЬШОЙ КРАСНЫЙ ПРЕДУПРЕЖДЕНИЕ») и сделайте с ним. См. это: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/javascript-cryptography-considered-harmful/ – Piskvor

ответ

4

Как Брюс Шнайер says, «Любой человек может создать шифра, что он сам не может сломаться. Вот почему вы должны равномерно Недоверие любителем криптография, и почему вы должны использовать только опубликованные алгоритмы, которые выдержали широкий криптоанализа. "

В то время как ничто не является 100% -ным нерушимым, Нарушение HTTPS значительно сложнее, чем нарушение защищенной схемы безопасности, сделанной в JavaScript. Учтите это: если вы обслуживаете ваш супер-безопасный JS по ненадежному соединению (HTTP или HTTPS-с-недопустимым сертификатом), что мешает злоумышленнику заменить сломанную версию, которая обойдется без защиты JS? Ничего.

Современные браузеры подходят к большим длинам, чтобы предотвратить прерывание HTTPS (с использованием HSTS и т. Д.); так что значительно безопаснее полагаться на HTTPS (который может обеспечить реальную безопасность при правильном использовании - «просто игнорировать все эти большие красные ошибки» - это один простой способ его разбить), чем на JS-over-HTTP (что только дает ощущение безопасности без фактического шанс быть в безопасности).

Дальнейшее чтение: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/august/javascript-cryptography-considered-harmful/

https://security.stackexchange.com/questions/3921/why-do-some-people-really-hate-security-via-client-side?rq=1

https://security.stackexchange.com/questions/8596/https-security-should-password-be-hashed-server-side-or-client-side

0

Есть много источников там на эту тему, но лишь немногие из них анализировали его. Как правило, доверительное руководство от Томаса Порнина больше, чем кто-либо другой. Я также очень рекомендую my own survey and recommendation on the topic.

0

Не совсем полный ответ на ваш вопрос, но я бы начал с изучения функции KDF (Key Derivation Function), а не просто хэширования ваших секретов. Некоторые библиотеки KDF, которые вы можете посмотреть в являются:

  • PBKDF2
  • Bcrypt
  • Scrypt

https://en.wikipedia.org/wiki/Key_derivation_function

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