Security / Node.js

    Web Security i OWASP Top 10

    XSS, SQL Injection, CSRF, CSP headers, bcrypt/Argon2, MFA, HTTPS/CORS i supply chain security w Node.js i Next.js.

    OWASP A03
    Injection prevention
    CSP
    Script protection
    Argon2
    Password hashing
    npm audit
    Supply chain

    6 kluczowych obszarów bezpieczeństwa web

    XSS, SQL Injection, Auth, Headers, Supply Chain i CSRF — priorytetyzacja i konkretne narzędzia dla Node.js i Next.js.

    Obszar Techniki Narzędzia Priorytet
    XSS Prevention React auto-escaping, DOMPurify, CSP nonce helmet, next/headers Krytyczny
    SQL Injection Parameterized queries, ORM (Prisma/Drizzle) Prisma, pg query params Krytyczny
    Auth Security bcrypt/Argon2, MFA, rate limiting, httpOnly bcryptjs, otplib, upstash Krytyczny
    Security Headers CSP, HSTS, CORS, Referrer-Policy helmet, next.config.js Wysoki
    Supply Chain npm audit, lockfile, Dependabot, provenance Dependabot, Snyk, Socket Wysoki
    CSRF Protection SameSite cookies, CSRF token, double submit csrf, csurf (legacy) Wysoki

    Często zadawane pytania

    OWASP Top 10 2021 — najważniejsze podatności webowe?

    OWASP Top 10 2021: A01 Broken Access Control: brak weryfikacji uprawnień. Mitygacja: autoryzacja per request, deny-by-default, rate limit. A02 Cryptographic Failures: słabe szyfrowanie, HTTP zamiast HTTPS, MD5/SHA1. Mitygacja: TLS 1.2+, bcrypt/Argon2 dla haseł, HSTS. A03 Injection: SQL, NoSQL, LDAP, OS command injection. Mitygacja: parameterized queries, ORMs, input sanitization. A04 Insecure Design: brak threat modeling. A05 Security Misconfiguration: domyślne hasła, verbose errors, otwarte CORS. A06 Vulnerable Components: stare biblioteki z CVE. npm audit, Dependabot. A07 Auth Failures: brute force, weak passwords, session fixation. MFA, rate limiting, secure session. A08 SSRF: Server-Side Request Forgery — serwer wysyła requesty do wewnętrznych zasobów. Walidacja URL, blocklist. A09 Logging Failures: brak logów, brak monitoringu naruszeń. A10 SSRF (nowy 2021). SQL Injection: SELECT * FROM users WHERE id = user_input. Atakujący: 1; DROP TABLE users. Bezpieczne: prepared statements. WHERE id = $1 z parametrem. prisma.user.findUnique({where: {id}}) — automatycznie bezpieczne. XSS (Cross-Site Scripting): stored, reflected, DOM-based. React escapes automatycznie. Unikaj dangerouslySetInnerHTML. DOMPurify dla HTML. CSRF (Cross-Site Request Forgery): malicious site wysyła request w imieniu zalogowanego. SameSite cookies (Lax/Strict). CSRF token. Same-origin check.

    Content Security Policy (CSP) i inne Security Headers?

    Security Headers: warstwa obrony przed common attacks. Content-Security-Policy (CSP): kontroluj skąd ładowane są zasoby. default-src 'self' — tylko z własnej domeny. script-src 'self' 'nonce-{random}' cdn.example.com. style-src 'self' 'unsafe-inline'. img-src 'self' data: https:. connect-src 'self' api.example.com. frame-ancestors 'none' — brak iframe. upgrade-insecure-requests — HTTP -> HTTPS. Nonce-based CSP: generuj random nonce per request. script tag ma nonce={nonce}. CSP sprawdza nonce przed wykonaniem. Bez 'unsafe-inline'. Next.js CSP: middleware.ts ustawia nagłówek. generateNonce() + headers(). Strict-Transport-Security (HSTS): max-age=31536000; includeSubDomains; preload. X-Frame-Options: DENY (zastąpiony przez CSP frame-ancestors). X-Content-Type-Options: nosniff. Referrer-Policy: strict-origin-when-cross-origin. Permissions-Policy: camera=(), microphone=(), geolocation=(). Cross-Origin headers: CORS (Access-Control-Allow-Origin). COEP (Cross-Origin-Embedder-Policy: require-corp). COOP (Cross-Origin-Opener-Policy: same-origin). SharedArrayBuffer wymaga COEP + COOP. Helmet.js (Express/Fastify): app.use(helmet()) — ustawia wszystkie headers naraz. Next.js headers(): w next.config.js headers() callback. securityHeaders array. Rate Limiting: express-rate-limit, @fastify/rate-limit, Cloudflare. upstash/ratelimit dla serverless (Redis-backed). sliding window, token bucket, fixed window.

    Bezpieczna autentykacja — bcrypt, Argon2, secure sessions i MFA?

    Hasła: NIGDY plaintext. NIGDY MD5/SHA1 (rainbow tables). bcrypt: adaptive hash, work factor. bcrypt.hash(password, 12) — 2^12 iteracji. Argon2 (winner Password Hashing Competition): Argon2id — recommended. argon2.hash(password, {memoryCost: 65536, timeCost: 3}). Memory-hard — odporny na GPU attacks. Salt: automatyczny w bcrypt/Argon2 — nie dodawaj ręcznie. Session Security: httpOnly cookie — brak dostępu JS. secure flag — tylko HTTPS. sameSite: 'lax' (lub 'strict'). session ID: cryptographically random (crypto.randomUUID()). Session fixation: regeneruj session ID po logowaniu. Logout: usuń session z bazy. Rotacja refresh token. Brute force protection: rate limit per IP i per email. exponential backoff. Account lockout po N próbach. CAPTCHA po podejrzanej aktywności. Multi-Factor Authentication (MFA): TOTP (Time-based OTP): Google Authenticator, Authy. speakeasy lub @otplib/preset-default. QR code setup: otplib.authenticator.keyuri(). Verify: otplib.authenticator.verify({token, secret}). WebAuthn / Passkeys: FIDO2 standard. Biometrika lub hardware key. SimpleWebAuthn library. Phishing-resistant. Backup codes: generuj jednorazowe kody. Hash i przechowuj. Email security: link do resetu hasła — jednorazowy token, wygaśnięcie (15-60min). bcrypt token lub crypto.randomBytes. Sprawdź timing attack (constantTimeEqual).

    HTTPS, TLS, certyfikaty i CORS konfiguracja?

    TLS/HTTPS: szyfrowanie in-transit. TLS 1.2 minimum (TLS 1.3 zalecane). Let's Encrypt: darmowe certyfikaty. certbot auto-renewal. Cloudflare: SSL bez konfiguracji serwera. Certificate Transparency (CT) logs. Mixed Content: HTTPS strona z HTTP resource = blokada. upgrade-insecure-requests CSP. HSTS preload list. CORS (Cross-Origin Resource Sharing): Same-Origin Policy: przeglądarka blokuje cross-origin requesty. CORS headers zezwalają na wyjątki. Access-Control-Allow-Origin: https://myapp.com (nie '*' dla auth endpoints). Access-Control-Allow-Methods: GET, POST, PUT, DELETE. Access-Control-Allow-Headers: Content-Type, Authorization. Access-Control-Allow-Credentials: true (z konkretnym origin, nie '*'). Preflight: OPTIONS request przed POST/PUT z custom headers. Fastify: @fastify/cors plugin. Next.js: middleware.ts lub route handler headers. Unikaj CORS mistakes: '*' + credentials = błąd przeglądarki. wildcard subdomain: https://*.myapp.com — ryzyko. Lepsza praktyka: whitelist dozwolonych origins. HTTPS na dev: mkcert dla lokalnych certyfikatów. vite: server.https z mkcert-generated cert. Next.js: tylko przez proxy (Nginx) lub Vercel. Subdomain Takeover: nieużywany CNAME -> atakujący przejmuje. Regularny audit DNS. dependency.io, can-i-take-over-xyz. HTTP to HTTPS redirect: 301 permanent redirect. Nginx: return 301 https://$host$request_uri.

    Supply chain security — npm audit, Dependabot i SBOM?

    Supply chain attacks: malicious code w dependencies. SolarWinds, Log4Shell, left-pad. npm audit: skanuje dependencies pod CVE. npm audit --audit-level=high. npm audit fix — automatyczna poprawka. Różnicuj: devDependencies nie idą na produkcję. Dependabot (GitHub): automatyczne PR dla security updates. dependabot.yml konfiguracja. version-updates dla ecosystem: npm. package-lock.json / pnpm-lock.yaml: lockfile zapewnia reproducible builds. Nie commituj node_modules. Renovate Bot: alternatywa dla Dependabot. Więcej konfiguracji, grupowanie updates. npm provenance (2023): package publisher tworzy SLSA provenance. Weryfikuj że kod na npm = kod na GitHub. Snyk: komercyjne narzędzie do CVE scanning. Integruje z IDE, CI/CD. Socket.dev: wykrywa malicious packages przed instalacją. Analiza behavior packages. SBOM (Software Bill of Materials): lista wszystkich dependencies z wersjami. CycloneDX lub SPDX format. npm sbom --sbom-format=cyclonedx. Wymagane w wielu regulacjach (US gov). npm pack analysis: co faktycznie idzie do package. .npmignore lub package.json files field. Secret scanning: nie commituj .env. gitguardian, GitHub secret scanning. pre-commit hooks — detect secrets. dotenv-vault lub Infisical dla secret management. Environment variables: Vercel/Netlify encrypted env storage. Never log secrets. RBAC dla secret access w CI/CD.

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz