Шпаргалка по web-безопасности для frontend-разработчика
1. Что такое CORS?
CORS (Cross-Origin Resource Sharing) — это механизм безопасности, который позволяет серверу контролировать, какие домены могут получать доступ к ресурсам на нем. Этот механизм необходим для защиты данных при кросс-доменных запросах.
Основные моменты:
- Заголовок
Access-Control-Allow-Origin
: Контролирует, какие домены имеют доступ к ресурсам. Может быть установлен на конкретные домены или на*
, чтобы разрешить доступ всем. - Проблемы с CORS: Если CORS не настроен правильно, браузеры блокируют запросы, и данные не передаются.
- Пример настройки CORS в Express.js:
const cors = require('cors'); app.use(cors({ origin: 'https://example.com'}));
2. Уязвимости, связанные с куки (cookies)
Уязвимости:
- XSS (Cross-Site Scripting): Могут быть украдены куки сессий через инъекцию JavaScript-кода.
- CSRF (Cross-Site Request Forgery): Атака, при которой злоумышленник заставляет браузер пользователя выполнять нежелательные действия на доверенном сайте, на который он аутентифицирован.
Меры защиты:
- HttpOnly: Устанавливается для куки, чтобы они были недоступны через JavaScript.
- Secure: Куки передаются только через HTTPS.
- SameSite: Ограничивает отправку куки только в пределах одного и того же сайта, предотвращая CSRF-атаки.
Пример:
document.cookie = "sessionId=abc123; Secure; HttpOnly; SameSite=Strict";
3. SQL-инъекция
SQL-инъекция — это тип атаки, при которой злоумышленник может вставить или "инъектировать" SQL-код в запрос, что может привести к выполнению произвольного SQL-кода на сервере.
Роль фронтенда в защите от SQL-инъекций:
- Валидация данных на клиенте: Это первый шаг защиты, но не основной.
- Экранирование данных: Осуществляется на сервере, но фронтенд должен минимизировать риски, передавая валидные данные.
Пример плохой практики:
const query = "SELECT * FROM users WHERE name = '" + userInput + "'";
4. Опасности использования eval()
eval()
— это функция, которая выполняет код, представленный в виде строки. Использование eval()
опасно, так как может привести к выполнению вредоносного кода.
Почему eval()
опасен:
- Возможность выполнения произвольного кода: Злоумышленники могут использовать
eval()
для выполнения вредоносных скриптов. - Проблемы с производительностью:
eval()
снижает производительность, так как интерпретатор не может оптимизировать код, содержащийeval()
.
Альтернатива:
- Избегайте использования
eval()
. Если необходимо выполнять динамические выражения, используйте безопасные альтернативы, такие как функции обработки JSON.
Защита через Content Security Policy (CSP):
Content-Security-Policy: script-src 'self'; object-src 'none';
5. CSRF и заголовок SameSite
CSRF (Cross-Site Request Forgery) — атака, при которой злоумышленник заставляет пользователя выполнить нежелательное действие на сайте, на котором тот аутентифицирован.
Защита с помощью SameSite
:
SameSite=Strict
: Куки отправляются только если запрос сделан с того же сайта.SameSite=Lax
: Куки отправляются при навигационных запросах (GET-запросы, открытие ссылок).SameSite=None
: Куки отправляются для всех запросов, но обязательно должны быть сSecure
.
Пример настройки:
document.cookie = "sessionId=abc123; SameSite=Strict; Secure";