Какие существуют уязвимости?

👨‍💻 Frontend Developer 🟠 Может встретиться 🎚️ Средний
#Безопасность

Краткий ответ

Основные уязвимости в веб-приложениях:

  1. XSS — внедрение вредоносного кода 💥
  2. CSRF — выполнение действий от имени пользователя 🎭
  3. SQL-инъекции — вредоносные запросы к базе данных 🗃️
  4. Утечки данных — несанкционированный доступ 🔓
  5. Недостаточная авторизация — доступ без прав 🚫
// Примеры защиты:
// Экранирование данных
// Проверка токенов
// Валидация входных данных

Полный ответ

Уязвимости — как дыры в заборе: если не закрыть, злоумышленники проникнут внутрь! 🏚️🚧

XSS (Межсайтовый скриптинг) — самый частый враг

XSS — как подделка письма от банка: вредоносный код маскируется под обычный текст.

// ❌ Опасно — не проверяем данные
document.innerHTML = userInput; // Если userInput = "<script>кража данных</script>"
 
// ✅ Безопасно — экранируем
const safeText = escapeHtml(userInput);
document.innerHTML = safeText;

Как работает:

  1. Пользователь вводит вредоносный код
  2. Сайт сохраняет его как обычный текст
  3. При показе код выполняется!
  4. Крадут данные или ломают сайт

CSRF (Межсайтовая подделка запроса) — хитрый обман

CSRF — как если кто-то заставит вас подписать важный документ, когда вы этого не хотите.

// ❌ Опасно — нет проверки, кто отправил
<form action="/transfer" method="POST">
  <input name="to" value="хакер" />
  <input name="amount" value="10000" />
</form>
 
// ✅ Безопасно — токен проверки
<form action="/transfer" method="POST">
  <input name="csrf-token" value="уникальный_токен" />
  <input name="to" value="хакер" />
  <input name="amount" value="10000" />
</form>

Как работает:

  1. Вы залогинены в банке
  2. Заходите на вредоносный сайт
  3. Сайт тайно отправляет запрос в ваш банк
  4. Банк думает, что это вы, и переводит деньги

SQL-инъекции — яды для базы данных

SQL-инъекции — как если кто-то подсыплет яд в суп в ресторане.

// ❌ Опасно — вставляем напрямую
const query = "SELECT * FROM users WHERE id = " + userId;
 
// ✅ Безопасно — параметризованные запросы
const query = "SELECT * FROM users WHERE id = ?";

Как работает:

  1. Вместо обычных данных подставляют команды
  2. База данных выполняет эти команды
  3. Крадут или портят все данные

Утечки данных — открытые секреты

Утечки данных — как если оставить ключи от дома на видном месте.

// ❌ Опасно — показываем всё
console.log("Пароль: " + password); // Видно в консоли!
 
// ✅ Безопасно — ничего лишнего
// Ничего не логируем

Частые причины:

  • Логирование конфиденциальных данных
  • Открытые API без защиты
  • Неправильные настройки сервера

Недостаточная авторизация — без пропуска

Недостаточная авторизация — как если в офис могут войти все подряд.

// ❌ Опасно — нет проверки
app.get('/admin', (req, res) => {
  res.send('Панель администратора');
});
 
// ✅ Безопасно — проверяем права
app.get('/admin', checkAuth, checkRole('admin'), (req, res) => {
  res.send('Панель администратора');
});

Как работает:

  1. Сайт не проверяет, кто зашёл
  2. Любой может получить доступ к закрытым разделам
  3. Крадут или портят важную информацию

Частые ошибки

Игнорировать безопасность с начала

// ❌ Ошибка — "Сначала сделаем, потом подумаем о безопасности"
// Потом переделывать сложнее!
 
// ✅ Правильно — думать о безопасности с самого начала

Доверять всем данным

// ❌ Ошибка — доверять всем входным данным
const data = req.body; // Может содержать вредоносный код!
 
// ✅ Правильно — проверять всё
const data = validate(req.body); // Только безопасные данные

Простые правила

  1. XSS — экранируй всё, что показываешь пользователям 💥
  2. CSRF — используй токены проверки 🎭
  3. SQL-инъекции — только параметризованные запросы 🗃️
  4. Утечки — не логируй секреты и ключи 🔓
  5. Авторизация — проверяй права доступа 🚫
  6. Проверяй всё — доверяй, но проверяй 🕵️‍♂️

Безопасность — как ремень в машине: может спасти жизнь, если что-то пойдёт не так! 🚗💨


Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪