Я только что приземлился на PHP5. Я не буду обрабатывать части приложения, содержащие сверхчувствительные данные, но я все еще знаю, что смущает мало о методах безопасности и шифрования. Я знаю только самые основы (не храните пароли в открытом тексте, не разрешайте пользователям запускать код с использованием почтовых данных и т.д.). Что мне нужно знать, чтобы защитить мои приложения, и где я могу его изучить?
Что должен знать каждый веб-разработчик о шифровании?
Ответ 1
Узнайте разницу между хэшами и шифрованием. Шифрование обычно представляет собой двустороннюю интерпретацию строки. Я могу зашифровать свой пароль, а затем снова расшифровать его до открытого текста. Идея хэшей заключается в том, что они становятся односторонним "шифрованием".
На моих сайтах я храню пароли как хэши. В любое время, когда пользователь подписывается, я повторно использую их предоставленный пароль, проверяю его на хэш, хранящийся в базе данных, и утверждаю, если они совпадают. Я не могу отправить им свой пароль, если они его забудут, поскольку (как правило) мне нечего знать. Две строки могут переходить в один и тот же хеш, что делает невозможным (как правило) выяснить, что такое исходная строка.
Это одна из проблем, которая хороша для понимания и распознавания, когда использовать шифрование против хэшей.
Ответ 2
Знайте, что не нужно писать свои собственные функции шифрования. Существующая, доверенная библиотека - лучший способ по возможности поехать. Избегайте прохладных, кровоточащих технологий, у которых не хватает много успешных часов программиста и часов работы за ними. Знайте, что не доверяйте функциональности, которую вы выбираете, до тех пор, пока вы не проверили ее самостоятельно, от первого лица. Будьте в курсе новых разработок, которые могут устареть от выбранной вами функции в одночасье. Знайте, что только потому, что сегодня вы используете лучшие технологии шифрования, которые вы ничего не защитили, если оставить ключи в таблице (например, cleartext не находится в кеше или не хранится в другой таблице в той же базе данных, закрытые ключи не слева в открытом состоянии)
Ответ 3
- Понять разницу между encrypting и хеширование
- Понять причину соли
- Понять, что HTTP является открытым текстом
- Понять, что такое HTTPS
- Поймите, что вы никогда (никогда не сможете) создать более эффективные методы хеширования или шифрования, чем уже делают сторонние библиотеки и встроенные библиотеки
Ответ 4
Эта технология не является самым слабым звеном в безопасности.
Ответ 5
Чтобы он мог быть сломан независимо от того, что вы делаете.
Ответ 6
Короткий ответ
Вы никогда не можете быть слишком безопасными
Использовать Salted Hash для повышенной безопасности
Более длинный ответ (все еще не полный)
Безопасность не является чем-то, чему можно научиться в кратком руководстве в Интернете. Для этого необходимы глубокие знания не только о том, какие уязвимости существуют, но ПОЧЕМУ они существуют и КАК они работают. Одна из самых больших проблем (особенно в open source) заключается в том, что новые методы все время добавляются, поэтому мы должны понимать концепции безопасности и теорию.
Прочитайте книги, возьмите классы и протестируйте их самостоятельно на локальном компьютере. Затем вы постепенно начнете понимать концепцию защиты веб-приложения.
Выполните следующие действия, чтобы начать работу
Ответ 7
Где узнать о безопасности: получить книгу Schneier Прикладная криптография.
Ответ 8
Обратите внимание на следующие моменты, когда вы храните пароли,
-
Пароль Hashed обычно более безопасен, потому что вам не нужно хранить секрет. Тем не менее, это предотвращает использование другой хэш-схемы в потоке аутентификации. Например, вы не можете использовать аутентификацию HTTP Digest с хешированным паролем.
-
Простой хеш склонен к атласу радужного стола (http://en.wikipedia.org/wiki/Rainbow_table). Пожалуйста, добавьте non-reoccuring nonce в хэш или используйте nonce как ключ к HMAC. Nonce необходимо хранить с паролями. Я добавлю его в дайджест.
-
Если используется шифрование, убедитесь, что используется случайный начальный вектор, поэтому один и тот же пароль будет зашифрован для разных зашифрованных текстов для разных пользователей. В противном случае вы склонны к атаке соответствия шаблону. MySQL имеет встроенную команду шифрования. Он не вводит IV, поэтому никогда не используйте его для паролей.
-
Сохраните ключевое имя/версию с помощью зашифрованного текста, чтобы клавиши могли поворачиваться. Вращение ключа требуется для соблюдения определенных стандартов. Шифрование без ключевой информации невозможно расшифровать, когда вы вынуждены изменять или поворачивать ключи.
Если вы будете следовать этим советам, ваши пароли будут безопасны с любыми схемами шифрования/хеширования.
Ответ 9
Просмотрите Открытый проект безопасности веб-приложений. У них есть много информации о текущих проблемах безопасности веб-приложений и о том, что вам нужно сделать для защиты от них. OWASP объединяет Руководство по разработке, в котором содержится много хорошей информации о проблемах разработки веб-приложений и веб-сервисов.
Ответ 10
Если вы смотрите на него из контекста PHP, я бы рекомендовал эту книгу:
То, что мне действительно нравится в этой книге, это гораздо больше, чем просто список связанных с безопасностью функций в PHP. Большая его часть охватывает общие концепции безопасности и механизмы защиты. Здесь перечислены разрешения, принцип наименьших привилегий, шифрование, хеширование, межсайтовый скриптинг, подделки запросов на межсайтовый сайт, захват сеансов и т.д., Примеры написания защищенного кода в PHP.
Получив дипломы о высшем образовании в колледже, я впечатлен освещением в этой книге. Я бы счел, что это требуется для чтения для любого профессионального PHP-разработчика.
Ответ 11
Сначала вы должны ознакомиться с этими методами php:
Здесь у вас есть все расширения для криптографии в PHP.