Я только что приземлился на PHP5. Я не буду обрабатывать части приложения, содержащие сверхчувствительные данные, но я все еще знаю, что смущает мало о методах безопасности и шифрования. Я знаю только самые основы (не храните пароли в открытом тексте, не разрешайте пользователям запускать код с использованием почтовых данных и т. Д.). Что мне нужно знать, чтобы защитить мои приложения, и где я могу это узнать?
Узнайте разницу между хэшами и шифрованием. Шифрование обычно представляет собой двустороннюю интерпретацию строки. Я могу зашифровать свой пароль, а затем снова расшифровать его до открытого текста. Идея хэшей заключается в том, что они становятся односторонним «шифрованием».
На моих сайтах я храню пароли как хэши. В любое время, когда пользователь подписывается, я повторно использую их предоставленный пароль, проверяю его на хэш, хранящийся в базе данных, и утверждаю, если они совпадают. Я не могу отправить им свой пароль, если они его забудут, поскольку (как правило) мне нечего знать. Две строки могут переходить в один и тот же хеш, что делает невозможным (как правило) выяснить, что такое исходная строка.
Это одна из проблем, которая хороша для понимания и распознавания, когда нужно использовать шифрование против хэшей.
Знайте, что не нужно писать свои собственные функции шифрования. Существующая, доверенная библиотека – лучший способ, по возможности, идти туда. Избегайте прохладных, кровоточащих технологий, у которых не хватает много успешных часов программиста и часов работы за ними. Знайте, что не доверяйте функциональности, которую вы выбираете, до тех пор, пока вы не проверили ее самостоятельно, от первого лица. Будьте в курсе новых разработок, которые могут устареть от выбранной вами функции в одночасье. Знайте, что только потому, что сегодня вы используете лучшие технологии шифрования, которые вы ничего не защитили, если оставить ключи в таблице (например, cleartext не находится в кеше или не хранится в другой таблице в той же базе данных, закрытые ключи не слева на открытом воздухе)
Эта технология не является самым слабым звеном в сфере безопасности.
Это может быть нарушено независимо от того, что вы делаете.
Где узнать о безопасности: получить книгу Шнайера « Прикладная криптография» .
Короткий ответ
Вы никогда не можете быть слишком безопасными
Используйте соленое пароли для повышения безопасности
Более длинный ответ (все же не полный)
Безопасность не является чем-то, чему можно научиться при помощи быстрого учебного пособия в Интернете. Это требует глубоких знаний не только о том, какие уязвимости существуют, но ПОЧЕМ они существуют и КАК они работают. Одна из самых больших проблем (особенно в open source) заключается в том, что новые методы все время добавляются, поэтому мы должны понимать концепции безопасности и теорию.
Прочитайте книги, возьмите классы и протестируйте уязвимости самостоятельно на локальной машине. Затем вы постепенно начнете понимать концепцию защиты веб-приложения.
Выполните следующие действия, чтобы начать
Обратите внимание на следующие моменты, когда вы храните пароли,
Хешированный пароль обычно более безопасен, потому что вам не нужно хранить секрет. Тем не менее, это предотвращает использование другой хэш-схемы в потоке аутентификации. Например, вы не можете использовать аутентификацию HTTP Digest с хешированным паролем.
Простой хеш склонен к аттракциону радужного стола ( http://en.wikipedia.org/wiki/Rainbow_table ). Пожалуйста, добавьте non-reoccuring nonce в хэш или используйте nonce как ключ к HMAC. Nonce необходимо хранить с паролями. Я добавлю его в дайджест.
Если используется шифрование, убедитесь, что используется случайный начальный вектор, поэтому один и тот же пароль будет зашифрован для разных зашифрованных текстов для разных пользователей. В противном случае вы склонны к атаке соответствия шаблону. MySQL имеет встроенную команду шифрования. Он не вводит IV, поэтому никогда не используйте его для паролей.
Сохраните ключевое имя / версию с зашифрованным текстом, чтобы клавиши могли поворачиваться. Вращение ключа требуется для соблюдения определенных стандартов. Шифрование без ключевой информации невозможно расшифровать, когда вы вынуждены изменять или поворачивать ключи.
Если вы будете следовать этим советам, ваши пароли будут в безопасности с любыми схемами шифрования / хеширования.
Просмотрите проект Open Web Application Security . У них есть много информации о текущих проблемах безопасности веб-приложений и о том, что вам нужно сделать для защиты от них. OWASP объединяет Руководство по разработке, которое предоставляет много хорошей информации о проблемах веб-приложений и веб-сервисов.
Если вы посмотрите на него из контекста PHP, я бы рекомендовал эту книгу:
Pro PHP Security на Amazon
То, что мне действительно нравится в этой книге, это гораздо больше, чем просто список связанных с безопасностью функций в PHP. Большая его часть охватывает общие концепции безопасности и механизмы защиты. Здесь перечислены разрешения, принцип наименьших привилегий, шифрование, хеширование, межсайтовый скриптинг, подделки запросов на межсайтовый сайт, захват сеансов и т. Д., Примеры написания защищенного кода на PHP.
Поступив на курсы повышения квалификации в колледже, я впечатлен освещением в этой книге. Я бы счел, что это требуется для чтения для любого профессионального PHP-разработчика.
Сначала вы должны ознакомиться с этими php-методами:
Здесь у вас есть все расширения для криптографии в PHP.