Что такое OWASP Top 10? Как следовать рекомендациям?php-67

OWASP Top 10 — это ежегодно обновляемый список наиболее критичных уязвимостей веб-приложений, составляемый Open Web Application Security Project (OWASP). Рассмотрим актуальную версию (2021) и практические меры защиты для PHP-разработчиков.

Актуальный OWASP Top 10

  1. Инъекции (Injection)
  2. Недостатки контроля доступа (Broken Access Control)
  3. Криптографические сбои (Cryptographic Failures)
  4. Небезопасный дизайн (Insecure Design)
  5. Небезопасная конфигурация (Security Misconfiguration)
  6. Уязвимые и устаревшие компоненты (Vulnerable and Outdated Components)
  7. Ошибки идентификации и аутентификации (Identification and Authentication Failures)
  8. Недостатки целостности данных и ПО (Software and Data Integrity Failures)
  9. Недостатки мониторинга безопасности (Security Logging and Monitoring Failures)
  10. Подделка межсайтовых запросов (SSRF)

Практическая защита для PHP-приложений

1. Защита от инъекций

Проблема: 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']]);

2. Контроль доступа

Проблема: Неправильные проверки прав
Решение: Реализация RBAC (Role-Based Access Control)

// Laravel пример:
Gate::define('edit-post', function (User $user, Post $post) {
    return $user->id === $post->user_id;
});

3. Криптографические сбои

Проблема: Неправильное хранение паролей
Решение: Использование современных алгоритмов

// Хеширование паролей:
$hashedPassword = password_hash($password, PASSWORD_ARGON2ID);
if (password_verify($input, $hashedPassword)) {
    // Авторизация
}

4. Безопасный дизайн

Принципы:

  • Минимальные привилегии
  • Разделение обязанностей
  • Валидация на всех уровнях

5. Безопасная конфигурация

Действия:

  • Отключение display_errors в production
display_errors = Off
expose_php = Off
  • Регулярный аудит php.ini
  • Использование .htaccess для ограничений
<FilesMatch "\.(env|log|htaccess)$">
    Deny from all
</FilesMatch>

6. Обновление компонентов

Инструменты:

  • composer audit (Composer 2.4+)
  • Регулярное обновление:
composer update --dry-run
composer outdated --direct

7. Надежная аутентификация

Меры:

  • Многофакторная аутентификация
  • Ограничение попыток входа
// Laravel Throttle:
RateLimiter::for('login', function (Request $request) {
    return Limit::perMinute(5)->by($request->ip());
});

8. Целостность данных

Практики:

  • Проверка цифровых подписей пакетов
  • Хеширование критичных данных
  • Верификация загружаемых файлов
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (!in_array($finfo->file($_FILES['file']['tmp_name']), ['image/jpeg', 'image/png'])) {
    throw new InvalidFileTypeException();
}

9. Мониторинг безопасности

Реализация:

  • Логирование всех критичных событий
  • Интеграция с SIEM системами
  • Мониторинг аномальной активности

10. Защита от SSRF

Решение:

  • Валидация всех входящих URL
  • Использование allow-листов
$allowedHosts = ['api.trusted.com', 'internal.service'];
$url = parse_url($_POST['url']);

if (!in_array($url['host'], $allowedHosts)) {
    throw new InvalidUrlException();
}

Инструменты для аудита безопасности

  1. Статический анализ:

    • PHPStan с security-правилами
    • Psalm с security-конфигурацией
  2. Динамический анализ:

    • OWASP ZAP
    • Burp Suite
  3. Зависимости:

    • composer audit
    • roave/security-advisories

Внедрение в CI/CD

Пример 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-разработчиков. Реализация этих практик требует комплексного подхода: от безопасного кодирования до правильной конфигурации инфраструктуры. Регулярный аудит, автоматизированные проверки и обучение команды — ключевые факторы защиты приложения.