OWASP Top 10 — это ежегодно обновляемый список наиболее критичных уязвимостей веб-приложений, составляемый Open Web Application Security Project (OWASP). Рассмотрим актуальную версию (2021) и практические меры защиты для PHP-разработчиков.
Проблема: SQL, NoSQL, OS, LDAP инъекции
Решение: Использование подготовленных выражений
// Небезопасно:
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];
// Безопасно с PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $_GET['id']]);
Проблема: Неправильные проверки прав
Решение: Реализация RBAC (Role-Based Access Control)
// Laravel пример:
Gate::define('edit-post', function (User $user, Post $post) {
return $user->id === $post->user_id;
});
Проблема: Неправильное хранение паролей
Решение: Использование современных алгоритмов
// Хеширование паролей:
$hashedPassword = password_hash($password, PASSWORD_ARGON2ID);
if (password_verify($input, $hashedPassword)) {
// Авторизация
}
Принципы:
Действия:
display_errors = Off
expose_php = Off
<FilesMatch "\.(env|log|htaccess)$">
Deny from all
</FilesMatch>
Инструменты:
composer audit
(Composer 2.4+)composer update --dry-run
composer outdated --direct
Меры:
// Laravel Throttle:
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by($request->ip());
});
Практики:
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (!in_array($finfo->file($_FILES['file']['tmp_name']), ['image/jpeg', 'image/png'])) {
throw new InvalidFileTypeException();
}
Реализация:
Решение:
$allowedHosts = ['api.trusted.com', 'internal.service'];
$url = parse_url($_POST['url']);
if (!in_array($url['host'], $allowedHosts)) {
throw new InvalidUrlException();
}
Статический анализ:
Динамический анализ:
Зависимости:
composer audit
roave/security-advisories
Пример GitHub Actions workflow:
name: Security Check
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Composer audit
run: composer audit
- name: PHPStan security check
run: vendor/bin/phpstan analyse --level=max --configuration=phpstan-security.neon
OWASP Top 10 — это must-have руководство по безопасности для PHP-разработчиков. Реализация этих практик требует комплексного подхода: от безопасного кодирования до правильной конфигурации инфраструктуры. Регулярный аудит, автоматизированные проверки и обучение команды — ключевые факторы защиты приложения.