>

🔐 Web Security — захист від вразливостей

⚠️ Чому Security критична?

Частина 1: OWASP Top 10 (2021)

Вразливість Опис Приклад
A01: Broken Access Control Порушення авторизації Доступ до чужих даних
A02: Cryptographic Failures Слабке шифрування Паролі в plain text
A03: Injection SQL/NoSQL/OS injection SQL Injection атаки
A04: Insecure Design Архітектурні проблеми Відсутність rate limiting
A05: Security Misconfiguration Неправильна конфігурація Дефолтні паролі
A06: Vulnerable Components Застарілі бібліотеки NPM packages з вразливостями
A07: Authentication Failures Слабка автентифікація Brute-force attacks
A08: Software & Data Integrity Недовірений код CDN з backdoor
A09: Logging Failures Недостатнє логування Не зафіксовано атаку
A10: SSRF Server-Side Request Forgery Доступ до internal APIs

Частина 2: XSS (Cross-Site Scripting)

Типи XSS

Приклад атаки

// ❌ ВРАЗЛИВИЙ КОД const username = params.get('name'); document.getElementById('welcome').innerHTML = `Hello, ${username}!`; // Атака: ?name= // Результат: виконається JavaScript, викрадання cookies!

Захист від XSS

// ✅ БЕЗПЕЧНО: Escape HTML entities function escapeHTML(str) { const div = document.createElement('div'); div.textContent = str; // textContent автоматично eccape-ить return div.innerHTML; } const username = escapeHTML(params.get('name')); document.getElementById('welcome').innerHTML = `Hello, ${username}!`; // Або краще — textContent document.getElementById('welcome').textContent = `Hello, ${username}!`;

Content Security Policy (CSP)

Частина 3: CSRF (Cross-Site Request Forgery)

Приклад атаки

Захист: CSRF Tokens

// Backend перевіряє token app.post('/transfer', (req, res) => { if (req.body.csrf_token !== req.session.csrf_token) { return res.status(403).send('Invalid CSRF token'); } // Process transfer });

SameSite Cookies

// Set-Cookie header Set-Cookie: session=abc123; SameSite=Strict; Secure; HttpOnly // SameSite=Strict — cookie НЕ відправиться на cross-site requests // SameSite=Lax — відправиться тільки на GET (navigation) // SameSite=None — завжди відправиться (потрібен для CORS)

Частина 4: SQL Injection

Приклад атаки

// ❌ ПОГАНО: Vulnerable to SQL Injection $username = $_POST['username']; $password = $_POST['password']; $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; // Атака: username = admin' OR '1'='1' -- // Query стає: SELECT * FROM users WHERE username='admin' OR '1'='1' --' AND password='' // '1'='1' завжди TRUE → authentication bypassed!

Захист: Prepared Statements

// ✅ БЕЗПЕЧНО: Prepared statements (PDO) $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$username, $password]); $user = $stmt->fetch(); // Параметри автоматично escape-ються
// ✅ Node.js (MySQL2) const [rows] = await connection.execute( 'SELECT * FROM users WHERE username = ? AND password = ?', [username, password] );

Частина 5: Security Headers

Рекомендовані headers

# Nginx configuration add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; # HSTS (якщо HTTPS) add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # CSP add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com" always;
Header Призначення
X-Frame-Options: SAMEORIGIN Заборонити iframe з інших доменів (захист від clickjacking)
X-Content-Type-Options: nosniff Заборонити MIME-type sniffing
X-XSS-Protection: 1; mode=block Увімкнути XSS фільтр браузера (legacy)
Referrer-Policy Контролювати Referer header
Permissions-Policy Контролювати browser features (camera, microphone)

Частина 6: Input Validation

Никогда не довіряйте user input!

// ❌ ПОГАНО: Без валідації app.post('/email', (req, res) => { sendEmail(req.body.email, req.body.message); }); // ✅ ДОБРЕ: Validation + Sanitization const validator = require('validator'); app.post('/email', (req, res) => { const email = req.body.email; // Validate email format if (!validator.isEmail(email)) { return res.status(400).send('Invalid email'); } // Sanitize message (remove HTML tags) const message = validator.escape(req.body.message); sendEmail(email, message); });

Whitelist approach

// ✅ Дозволити тільки певні значення const allowedCategories = ['math', 'physics', 'chemistry']; if (!allowedCategories.includes(req.params.category)) { return res.status(400).send('Invalid category'); }

Частина 7: CORS (Cross-Origin Resource Sharing)

Налаштування CORS

// Express.js — дозволити CORS const cors = require('cors'); // ❌ НЕБЕЗПЕЧНО: дозволити всі origins app.use(cors()); // ✅ БЕЗПЕЧНО: whitelist origins const allowedOrigins = ['https://scientific-calculators.com']; app.use(cors({ origin: function (origin, callback) { if (!origin || allowedOrigins.includes(origin)) { callback(null, true); } else { callback(new Error('Not allowed by CORS')); } }, credentials: true // дозволити cookies }));

Частина 8: Rate Limiting

Захист від Brute Force

// Express Rate Limit const rateLimit = require('express-rate-limit'); const loginLimiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 minutes max: 5, // 5 спроб message: 'Too many login attempts, try again later' }); app.post('/login', loginLimiter, (req, res) => { // Login logic });

Висновок

Web Security Checklist:

📚 Ресурси:

Як користуватися шпаргалкою

Ця шпаргалка зосереджує найважливіші формули, правила та визначення теми в компактному форматі для швидкого пошуку та підготовки до іспитів. Матеріал систематизований від базових понять до просунутих результатів.

Ефективне використання

Використовуйте шпаргалку поряд з розв'язуванням задач — не для списування, а як довідник формул. Спершу спробуйте пригадати формулу самостійно, потім звіртеся з довідником. Регулярне повторення формує стійку пам'ять.

Часті запитання (FAQ)

Які ключові формули та правила містить шпаргалка з 🔐 web security?
Ця шпаргалка з '🔐 Web Security' включає: основні означення, головні формули у компактному вигляді, правила обчислень, типові підстановки та приклади застосування. Все систематизовано для швидкого пошуку.
Для кого призначена ця шпаргалка з 🔐 web security?
Шпаргалка з '🔐 Web Security' орієнтована на студентів університетів та учнів старшої школи, а також на всіх, хто хоче швидко освіжити знання перед іспитом або при вирішенні практичних задач.
Як використовувати шпаргалку з 🔐 web security при підготовці до іспиту?
Оптимальна стратегія: спершу вивчіть теорію, потім використовуйте шпаргалку як довідник при розв'язанні задач. За 1–2 дні до іспиту перегляньте шпаргалку цілком, звертаючи увагу на формули, які ви плутаєте.
Чи охоплює ця шпаргалка всю програму курсу з 🔐 web security?
Шпаргалка з '🔐 Web Security' охоплює стандартну університетську програму: всі ключові теореми, формули та методи. Матеріал структурований від базових понять до просунутих результатів.
Де ще можна попрактикуватися з 🔐 web security після вивчення шпаргалки?
Після роботи зі шпаргалкою рекомендуємо: тренажери вправ на calculator.party (миттєвий зворотний зв'язок), розв'язані задачі (показують метод покроково) та онлайн-калькулятори для перевірки власних результатів.