Похожие презентации:
Основные принципы построения безопасных сайтов
1. Основные принципы построения безопасных сайтов.
2. Введение
Безопасность сайта — это не просто плагин или функция,которую можно добавить в конце разработки. Это
непрерывный процесс, интегрированный в каждый этап
жизненного цикла программного обеспечения (SDLC Software Development Life Cycle): от проектирования и
разработки до тестирования, deployment и поддержки.
3. Фундаментальные принципы
1. Принцип наименьших привилегий (Principle of Least Privilege - PoLP)Суть: Любой пользователь, процесс или программа должны иметь доступ только к
тем ресурсам и данным, которые абсолютно необходимы для выполнения их
задач.
Примеры:
Пользовательские учетные записи в базе данных не должны иметь прав GRANT
ALL или DROP TABLE.
Веб-сервер не должен иметь права на запись в каталоги, где лежат исполняемые
скрипты (только на чтение).
Пользователь с ролью "гость" не должен иметь доступ к админ-панели.
4. Защита на глубину (Defense in Depth)
Суть: Не стоит полагаться на один уровень защиты. Создавайте несколько уровнейбезопасности. Если злоумышленник обойдет одну защиту, его остановит следующая.
Пример: Для защиты данных пользователя используйте:
Брандмауэр (Firewall) на уровне сети.
Хеширование паролей (с солью) в базе данных.
Валидацию и санацию входных данных на бэкенде.
HTTPS для шифрования трафика.
Механизмы CSP (Content Security Policy) в браузере.
5. Простота проектирования (Keep It Simple)
Суть: Сложные системы сложно безопасно настроить и проанализировать. Упрощайтеархитектуру и код, чтобы минимизировать поверхность для атаки (attack surface).
Пример: Вместо создания собственной сложной системы аутентификации с нуля используйте
проверенные временем фреймворки и стандарты (например, OAuth 2.0, OpenID Connect).
6. Отказ по умолчанию в безопасности (Fail-Safe Defaults)
Суть: Настройки системы по умолчанию должны быть максимальнобезопасными. Любые расширенные права должны предоставляться явно и
осознанно.
Пример: При создании новой учетной записи пользователя ей по умолчанию
присваивается роль с минимальными правами, а не права администратора.
7. Ключевые практики на разных этапах разработки
Обработка пользовательского ввода (№1 источник угроз!)Валидация (Validation): Проверяйте данные на соответствие ожидаемому формату (например, с
помощью регулярных выражений: email, телефон, дата). Делайте это на бэкенде (валидация на
фронтенде носит вспомогательный характер и легко обходится).
Санация (Санитизация/Sanitization): "Очищайте" данные от потенциально опасных элементов.
Удаляйте или экранируйте специальные символы.
Экранирование (Escaping): Перед выводом данных в HTML, SQL, JavaScript всегда экранируйте
специальные символы. Используйте функции фреймворков (htmlspecialchars в PHP, шаблонизаторы
в Python/Django, Node.js/Express).
8. Аутентификация и управление сессиями
Пароли: Никогда не храните пароли в открытом виде. Используйте современные, медленныеалгоритмы хеширования с солью (bcrypt, Argon2).
Многофакторная аутентификация (2FA/MFA): Предоставляйте возможность использовать второй
фактор (телефон, приложение-аутентификатор).
Сессии: Используйте надежные, случайно сгенерированные идентификаторы сессий. Реализуйте
механизм логаута и обеспечьте безопасное хранение сессий на сервере. Устанавливайте
корректные флаги для cookies (HttpOnly, Secure, SameSite).
9. Управление доступом (Authorization)
Проверяйте права доступа к каждому защищенному ресурсу на стороне сервера.Недостаточно скрыть кнопку на фронтенде.
Реализуйте ролевую модель доступа (RBAC - Role-Based Access Control) или более сложные
модели (ABAC - Attribute-Based Access Control), если это необходимо.
10. Защита данных (Конфиденциальность и Целостность)
HTTPS/TLS: Обязательно используйте SSL/TLS сертификаты для шифрования всего трафика между клиентом исервером. Перенаправляйте все HTTP-запросы на HTTPS.
Заголовки безопасности HTTP: Настройте веб-сервер (Nginx/Apache) на отправку заголовков:
Strict-Transport-Security (HSTS): Приказывает браузеру всегда использовать HTTPS.
Content-Security-Policy (CSP): Запрещает выполнение inline-скриптов и загрузку ресурсов с недоверенных
доменов. Лучшая защита от XSS.
X-Content-Type-Options: Запрещает браузеру "угадывать" тип контента (защита от MIME-sniffing).
X-Frame-Options: Защита от кликджекинга (запрещает встраивание сайта в <iframe>).
11. Безопасная работа с базой данных
Используйте подготовленные выражения (Prepared Statements) и параметризованныезапросы для всего SQL. Это единственный надежный способ предотвратить SQL-инъекции.
Никогда не склеивайте SQL-запросы через конкатенацию строк.
12. Безопасная конфигурация
Сервер и ПО: Своевременно обновляйте операционную систему, веб-сервер,интерпретаторы языков (PHP, Python), СУБД и все используемые библиотеки. Удаляйте
ненужные модули и сервисы.
Обработка ошибок: Не показывайте пользователям детальные сообщения об ошибках
(stack traces, пути к файлам, ошибки БД). Настройте универсальную страницу-заглушку
для ошибок.
13. Основные угрозы (OWASP Top 10)
Знайте своего врага в лицо. OWASP Top 10 — это стандартный документ по наиболее критичным рискамбезопасности веб-приложений.
Инъекции (Injection) -> Prepared Statements.
Небезопасная аутентификация (Broken Authentication) -> Сильные хеши, 2FA.
Раскрытие конфиденциальных данных (Sensitive Data Exposure) -> HTTPS, шифрование.
XXE (XML External Entities)
Небезопасные настройки контроля доступа (Broken Access Control) -> Проверка прав на бэкенде.
Небезопасная конфигурация (Security Misconfigurations) -> Обновления, харденинг.
Межсайтовый скриптинг (XSS - Cross-Site Scripting) -> Экранирование вывода, CSP.
Небезопасная десериализация (Insecure Deserialization)
Использование компонентов с известными уязвимостями (Using Components with Known Vulnerabilities) ->
Обновление зависимостей.
Недостаточное логирование и мониторинг (Insufficient Logging & Monitoring)
14. Инструменты и практики для разработчика
Статический анализ кода (SAST): SonarQube, ESLint (с плагинами безопасности), Bandit (дляPython).
Динамический анализ (DAST): Сканеры уязвимостей (OWASP ZAP, Burp Suite Community Edition).
Зависимости: Регулярно проверяйте зависимости на известные уязвимости (npm audit, safety
check, OWASP Dependency-Check).
Код-ревью: Коллегиальный разбор кода — один из лучших способов найти уязвимости.
15. Чек-лист
Всегда валидируй и экранируй пользовательский ввод.Никогда не доверяй данным, пришедшим извне (включая фронтенд!).
Хешируй пароли современными алгоритмами (bcrypt).
Для работы с БД используй только подготовленные выражения.
Включай HTTPS и security-заголовки.
Проверяй права доступа на бэкенде для каждого действия.
Храни секреты (ключи, пароли БД) в переменных окружения, а не в коде.
Регулярно обновляй все компоненты системы.
Веди логи и мониторь подозрительную активность.
Думай как хакер (развивай security mindset).
Информатика