Что должен знать каждый веб-разработчик о шифровании? - PullRequest
41 голосов
/ 03 августа 2009

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

Ответы [ 11 ]

27 голосов
/ 03 августа 2009

Узнайте разницу между хешами и шифрованием. Шифрование - это, как правило, двусторонняя интерпретация строки. Я могу зашифровать свой пароль, а затем снова расшифровать его в виде открытого текста. Хеши заключаются в том, что они становятся односторонним «шифрованием».

На своих сайтах я храню пароли в виде хэшей. Каждый раз, когда пользователь входит в систему, я повторно хэширую предоставленный им пароль, проверяю его на соответствие хешу, хранящемуся в базе данных, и утверждаю, совпадают ли они. Я не могу отправить им их пароль, если они забудут его, поскольку (как правило) у меня нет возможности узнать. Две разные строки могут транслироваться в один и тот же хеш, что делает (в общем случае) невозможным выяснить, какой была исходная строка.

Это одна из проблем, которая помогает получить четкое представление о том, когда использовать шифрование, а не хэши.

17 голосов
/ 03 августа 2009

Не знайте, чтобы написать свою собственную функцию шифрования. Существующая доверенная библиотека - это лучший способ использовать ее везде, где это возможно. Избегайте крутых, передовых технологий, которым не хватает многих успешных часов программиста и часов пользователя. Знайте, что нельзя доверять выбранной вами функциональности, пока вы не проверите ее полностью, от первого лица. Будьте в курсе новых разработок, которые могут устареть выбранной вами функциональности в одночасье. Знайте, что только потому, что вы используете лучшую на сегодняшний день технологию шифрования, вы ничего не защищаете, если оставляете ключи на столе (например, открытый текст не находится в кэше или хранится в другой таблице в той же базе данных, а закрытые ключи - нет). осталось под открытым небом)

15 голосов
/ 03 августа 2009
  • Понять разницу между шифрованием и хэшированием
  • Понять причину солей
  • Понимают, что HTTP является открытым текстом
  • Понять, что такое HTTPS
  • Поймите, что вы никогда (почти никогда) не сможете создавать лучшие методы хеширования или шифрования, чем те, которые сторонние библиотеки и встроенные библиотеки уже делают
11 голосов
/ 03 августа 2009

Что это может быть сломано независимо от того, что вы делаете.

6 голосов
/ 03 августа 2009

Где узнать о безопасности: получите книгу Шнайера Прикладная криптография .

6 голосов
/ 03 августа 2009

Краткий ответ

Вы никогда не можете быть слишком безопасным

Использование Salted Хеширование паролей для повышения безопасности

Более длинный ответ (хотя и не полный)

Безопасность - это не то, чему можно научиться в быстром учебнике в Интернете. Требуется глубокое знание не только того, какие существуют уязвимости, но и ПОЧЕМУ они существуют и КАК они работают. Одна из самых больших проблем (особенно в open source) заключается в том, что новые методы добавляются постоянно, поэтому мы должны понимать концепции и теорию безопасности.

Читайте книги, посещайте занятия и самостоятельно проверяйте уязвимости на локальном компьютере. Затем вы медленно начинаете понимать, как защитить веб-приложение.

Проверьте следующее, чтобы начать вас

  1. Руководство разработчика по веб-приложению Безопасность
  2. Руководство по тестированию веб-безопасности
  3. Прикладная криптография
3 голосов
/ 03 августа 2009

Обратите внимание на следующие моменты при хранении паролей,

  1. Хешированный пароль обычно более безопасен, потому что вам не нужно хранить секрет. Тем не менее, он не позволяет вам использовать другую схему на основе хеша в вашем процессе аутентификации. Например, вы не можете использовать HTTP Digest аутентификацию с хешированным паролем.

  2. Простой хэш подвержен атакам радужных таблиц (http://en.wikipedia.org/wiki/Rainbow_table). Пожалуйста, добавьте одноразовый одноразовый номер в хеш или используйте одноразовый номер в качестве ключа для HMAC. Одноразовый номер необходимо сохранить с паролями Я добавляю его в сборник.

  3. Если используется шифрование, убедитесь, что используется случайный начальный вектор, чтобы один и тот же пароль был зашифрован в разные шифротексты для разных пользователей. В противном случае, вы склонны к атаке по шаблону. MySQL имеет встроенную команду шифрования. Он не вводит IV, поэтому никогда не используйте его для паролей.

  4. Сохраните имя / версию ключа с зашифрованным текстом, чтобы ключи могли вращаться. Поворот ключа требуется для соответствия определенным стандартам. Шифрование без информации о ключе невозможно расшифровать, если вы вынуждены изменить или повернуть ключи.

Если вы будете следовать этим советам, ваши пароли будут в безопасности при любых схемах шифрования / хэширования.

1 голос
/ 04 августа 2009

Если вы смотрите на это из контекста PHP, я бы порекомендовал эту книгу:

альтернативный текст http://ecx.images -amazon.com / images / I / 51sKhc8YUlL._BO2,204,203,200_PIsitb-sticker-arrow-click, TopRight, 35, -76_AA240_SH20_OU01_.jpg

Pro PHP Security на Amazon

Что мне действительно нравится в этой книге, так это то, что она охватывает гораздо больше, чем просто список связанных с безопасностью функций в PHP. Большая часть этого покрывает общие понятия веб-безопасности и механизмы защиты. Разрешения, принцип наименьших привилегий, шифрование, хэширование, межсайтовый скриптинг, подделка межсайтовых запросов, перехват сеанса и т. Д. - все это рассматривается здесь, с примерами написания безопасного кода на PHP.

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

1 голос
/ 04 августа 2009

Ознакомьтесь с проектом Open Web Application Security . У них есть много информации о текущих проблемах безопасности веб-приложений и о том, что вам нужно сделать, чтобы защититься от них. OWASP составляет Руководство по разработке , в котором содержится много полезной информации по вопросам разработки веб-приложений и веб-служб.

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