Основные уязвимости в веб-приложениях:
// Примеры защиты:
// Экранирование данных
// Проверка токенов
// Валидация входных данныхУязвимости — как дыры в заборе: если не закрыть, злоумышленники проникнут внутрь! 🏚️🚧
XSS — как подделка письма от банка: вредоносный код маскируется под обычный текст.
// ❌ Опасно — не проверяем данные
document.innerHTML = userInput; // Если userInput = "<script>кража данных</script>"
// ✅ Безопасно — экранируем
const safeText = escapeHtml(userInput);
document.innerHTML = safeText;Как работает:
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>Как работает:
SQL-инъекции — как если кто-то подсыплет яд в суп в ресторане.
// ❌ Опасно — вставляем напрямую
const query = "SELECT * FROM users WHERE id = " + userId;
// ✅ Безопасно — параметризованные запросы
const query = "SELECT * FROM users WHERE id = ?";Как работает:
Утечки данных — как если оставить ключи от дома на видном месте.
// ❌ Опасно — показываем всё
console.log("Пароль: " + password); // Видно в консоли!
// ✅ Безопасно — ничего лишнего
// Ничего не логируемЧастые причины:
Недостаточная авторизация — как если в офис могут войти все подряд.
// ❌ Опасно — нет проверки
app.get('/admin', (req, res) => {
res.send('Панель администратора');
});
// ✅ Безопасно — проверяем права
app.get('/admin', checkAuth, checkRole('admin'), (req, res) => {
res.send('Панель администратора');
});Как работает:
// ❌ Ошибка — "Сначала сделаем, потом подумаем о безопасности"
// Потом переделывать сложнее!
// ✅ Правильно — думать о безопасности с самого начала// ❌ Ошибка — доверять всем входным данным
const data = req.body; // Может содержать вредоносный код!
// ✅ Правильно — проверять всё
const data = validate(req.body); // Только безопасные данныеБезопасность — как ремень в машине: может спасти жизнь, если что-то пойдёт не так! 🚗💨
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪