Безопасность и сессии
Elang предоставляет базовые средства безопасности и настройки ответов по умолчанию. Вашему приложению всё равно нужна полноценная схема аутентификации, авторизации и развёртывания.
Пароли
use Elang\Security\Password;
$hash = $passwords->hash($plainTextPassword);
$isValid = $passwords->verify($submittedPassword, $storedHash);
Сервис использует API паролей PHP с Argon2id. После успешной проверки используйте needsRehash(), чтобы определить, нужно ли обновить сохранённый хеш. Убедитесь, что сборка PHP поддерживает Argon2id.
Шифрование
use Elang\Security\Encryption;
$ciphertext = $encryption->encrypt('private value');
$plaintext = $encryption->decrypt($ciphertext);
Sodium secretbox проверяет подлинность зашифрованных данных и использует новый nonce. Отсутствующий или недопустимый APP_KEY не позволяет создать сервис шифрования. Храните ключ в безопасности; в этой предварительной версии ротация ключа выполняется вручную.
Сессии и CSRF
Зарегистрируйте SessionMiddleware, а затем CsrfMiddleware. Внедрите Elang\Security\Csrf и вызывайте $csrf->token($request) при отображении формы. Добавьте токен в скрытое поле _token или в заголовок X-CSRF-Token.
Cookie сессии используют HttpOnly и SameSite=Lax, а при HTTPS-запросе также Secure. После аутентификации обновляйте идентификатор сессии с помощью $request->getSession()->migrate(true).
Защита ответов
Ядро задаёт строгую Content Security Policy, запрет отображения во фреймах, защиту от определения MIME-типа по содержимому и политику передачи источника перехода. Ошибки JSON и HTML содержат идентификаторы запросов. Ответы с ошибками в рабочей среде скрывают внутренние сообщения исключений.
Сообщение о проблеме
Не публикуйте учётные данные или подробности эксплуатации уязвимости в публичной задаче. Текущие правила сообщения о проблемах приведены в SECURITY.md репозитория. Эта предварительная версия не проходила независимый аудит безопасности.