web ❤️
August 28

Шпаргалка по 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 + "'";
  • Если userInput содержит что-то вроде '; DROP TABLE users;--, это может удалить всю таблицу.

4. Опасности использования eval()

eval() — это функция, которая выполняет код, представленный в виде строки. Использование eval() опасно, так как может привести к выполнению вредоносного кода.

Почему eval() опасен:

  • Возможность выполнения произвольного кода: Злоумышленники могут использовать eval() для выполнения вредоносных скриптов.
  • Проблемы с производительностью: eval() снижает производительность, так как интерпретатор не может оптимизировать код, содержащий eval().

Альтернатива:

  • Избегайте использования eval(). Если необходимо выполнять динамические выражения, используйте безопасные альтернативы, такие как функции обработки JSON.

Защита через Content Security Policy (CSP):

  • CSP может запретить использование eval():http

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";