В современной веб-разработке фронтенд приложения стали сложными системами, обрабатывающими конфиденциальные данные пользователей. Это делает их привлекательной мишенью для злоумышленников. Рассмотрим основные угрозы и методы защиты.
Основные уязвимости фронтенда
1. Межсайтовый скриптинг (XSS)
Критическая уязвимость, позволяющая внедрить вредоносный код в страницу.
Защита:
- Экранирование данных:
textContentвместоinnerHTML - Использование Content Security Policy (CSP)
- HTTP-заголовки: X-XSS-Protection, X-Content-Type-Options
element.innerHTML = userInput;
// Безопасный подход
element.textContent = userInput;
// Или
element.innerHTML = DOMPurify.sanitize(userInput);
2. Подделка межсайтовых запросов (CSRF)
Атака, заставляющая пользователя выполнить нежелательные действия.
Защита:
- Использование CSRF-токенов
- Проверка заголовка Origin
- SameSite cookies
app.use(csurf()); // Для Express.js
// Передача токена в запросах
fetch('/api/data', {
method: 'POST',
headers: {
'X-CSRF-Token': getCSRFToken()
}
});
3. Утечка данных через сторонние ресурсы
Риск при использовании CDN, аналитики и других внешних сервисов.
Защита:
- Subresource Integrity (SRI) для скриптов и стилей
- Тщательный выбор поставщиков
- Использование Privacy-focused альтернатив
src="https://cdn.example.com/library.js"
integrity="sha384-...sha512-hash..."
crossorigin="anonymous"></script>
Content Security Policy (CSP)
CSP — мощный механизм защиты от XSS, позволяющий контролировать источники загрузки ресурсов.
Content-Security-Policy:
default-src 'none';
script-src 'self' 'unsafe-inline' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
font-src 'self';
connect-src 'self';
form-action 'self';
frame-ancestors 'none';
base-uri 'self';
block-all-mixed-content;
Рекомендации по настройке CSP:
- Начинайте с политики
default-src 'none' - Постепенно добавляйте необходимые директивы
- Используйте nonce или хэши для инлайн-скриптов
- Включайте отчеты через
report-uri - Тестируйте в режиме
Content-Security-Policy-Report-Only
Защита конфиденциальных данных
Хранение данных на клиенте
Небезопасно:
- Хранить токены доступа в localStorage
- Сохранять пароли в любом виде на клиенте
- Держать конфиденциальные данные в глобальных переменных
Безопасные практики:
- Использовать HttpOnly cookies для сессий
- Хранить временные токены в sessionStorage
- Очищать память от конфиденциальных данных после использования
Чеклист безопасности фронтенда
- Внедрена Content Security Policy
- Все пользовательские данные экранируются
- Используются CSRF-токены для модифицирующих запросов
- Куки помечены как Secure, HttpOnly и SameSite
- Включены security headers (X-Frame-Options, X-Content-Type-Options)
- Сторонние ресурсы загружаются с SRI
- Приложение использует HTTPS
- Регулярно обновляются зависимости
- Конфиденциальные данные не сохраняются на клиенте
- Реализована защита от кликджекинга
Безопасность фронтенд-приложений — это постоянный процесс. Регулярно проводите аудит безопасности, используйте автоматические инструменты сканирования и следите за обновлениями в области веб-безопасности.
← Назад к статьям