Rules
Öne çıkan·v1.0.0·2026-04-22Web Güvenlik Kuralları
Web uygulamaları için güvenlik baseline — OWASP Top 10 karşılıkları, auth, input validation, secret yönetimi, CSP, CORS, rate limit, logging. CLAUDE.md / .cursorrules içeriği olarak kullanılır.
securityowaspauthxsscsrfrulesclaude-md
İçerik
Bu içeriği projenin CLAUDE.md / AGENTS.md / .cursorrules dosyasına yapıştır.
Web Güvenlik Baseline
Bu kurallar her web servisi için minimum güvenlik disiplini. OWASP Top 10 (2021) kategorilerine karşılık gelir; uygulamaya özel tehdit modeli ayrıca yapılır.
Kimlik doğrulama (Authentication)
- Password hashing:
bcrypt(cost 12+),argon2id(tercih), veyascrypt. MD5/SHA1/SHA256 yasak password için. - Password minimum: 12+ karakter, dictionary / breached password kontrolü (HaveIBeenPwned API).
- MFA/2FA sensitive hesap için (admin, finansal). TOTP (Google Authenticator), WebAuthn/FIDO2.
- Session: JWT veya opaque token. Opaque token daha güvenli (server revoke edebilir).
- JWT expiration kısa (< 1 saat). Refresh token ayrı, rotate-on-use.
- Login throttle: IP bazlı + account bazlı. 5-10 yanlış deneme sonrası captcha / geçici lock.
- Password reset token single-use, 1 saat expiration, email gönderim asenkron.
- "Remember me" uzun-ömürlü session only if implicit re-auth acceptable.
Yetkilendirme (Authorization)
- Authentication ≠ Authorization — kim olduğu ve ne yapabildiği ayrı katman.
- Default deny: explicit allow olmadan erişim yok.
- IDOR önleme: her resource fetch'inde ownership check (
WHERE user_id = current_user.id). - Scope-based (
orders:read,orders:write) basit role-based'den esnek. - Privilege escalation check: bir user kendisini admin yapamaz. Role değişimi ayrı endpoint + audit.
- Admin paneli ayrı host / ayrı auth mekanizması tercih.
Input validation
- Her input şema ile validate (Zod, Pydantic, express-validator). "Trust nothing" policy.
- Boundary'ler: HTTP body, query, header, cookie, hatta iç servis çağrısı.
- Whitelist, blacklist değil. "Allowed characters" tanımla, "banned" değil.
- Type coercion dikkat:
"true"string vstrueboolean farkını bilinçli handle. - File upload:
- MIME type check (server-side — client false söyler)
- Extension kısıtla
- Size limit
- Virus scan (ClamAV, VirusTotal)
- Storage path kontrollü (path traversal önlenmiş)
- Regex ile validation: ReDoS'a dikkat (catastrophic backtracking). Basit tut.
Injection (SQL, NoSQL, Command, LDAP)
- Parametreli query her zaman:
✅ db.query("SELECT * FROM users WHERE id = $1", [userId]) ❌ db.query(`SELECT * FROM users WHERE id = '${userId}'`) - ORM kullanımında string concat yasak.
raw()kullanımı gerekçelenir. - Command execution yasak user input ile (
exec,child_process.exec). Gerçekten gerekliyse:- Whitelist'li command + args
- Shell=false (direct spawn)
- Timeout
- NoSQL injection: MongoDB
$whereoperator user input'tan yasak. Object injection ({$gt: ''}) filter'lı. - LDAP injection: escape utilities kullan (
ldapescape).
XSS (Cross-Site Scripting)
- Default escape: modern template engine'ler (React, Vue, Jinja2) otomatik.
{{ }}= escape,{{{ }}}/dangerouslySetInnerHTML= risk. - User content: HTML olarak render edilecekse sanitize (DOMPurify, Bleach).
- URL attribute'ları (
href,src) validate:if (url.startsWith("javascript:")) block - Content Security Policy (CSP) — inline script/style kısıtla:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-...'; style-src 'self' 'nonce-...' - Unsafe sink'ler:
innerHTML,document.write,eval,setTimeout(string)— yasak.
CSRF (Cross-Site Request Forgery)
- Cookie-based session kullanıyorsan CSRF var. Token-based (Authorization header) genelde güvenli.
- SameSite cookie:
StrictveyaLax.Nonesadece HTTPS + gerekçeli. - CSRF token form'larda. Double-submit cookie ya da synchronizer token pattern.
- State-changing GET yasak — GET idempotent + no side effect. Mutation POST/PUT/DELETE.
HTTPS / TLS
- HTTPS zorunlu. HTTP request → 301 redirect veya 403.
- HSTS header:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - TLS 1.2 minimum, 1.3 tercih. Eski cipher suite'leri kapat.
- Certificate Let's Encrypt + auto-renew, monitoring (30 gün önce alarm).
- Mixed content yasak: HTTPS sayfa içinde HTTP kaynak yükleme.
CORS
- Origin whitelist:
Access-Control-Allow-Origin: https://app.example.com (specific) *+ credentials yasak — tarayıcı reddeder + tasarımsal hata.- Preflight:
OPTIONScache'i (Access-Control-Max-Age: 86400) gereksiz preflight'ları azaltır. - Headers:
Authorization,Content-Typeexplicit allow.
Secret yönetimi
- Kod'da secret yasak — env var, secret manager (AWS Secrets Manager, HashiCorp Vault, Doppler).
.envgit-ignored..env.exampletemplate'i commit.- Secret rotation: periyodik (90 gün) veya olay sonrası (sızma şüphesi).
- Log'da secret yasak: token, password, PII, kart bilgisi sızmaz. Structured log'da redact filtresi.
- Error message'da secret yasak: stack trace production'da kullanıcıya dönmez.
- Git history scan: GitHub secret scanning, truffleHog, gitleaks CI'da.
Rate limiting
- Her public endpoint'te — DoS, brute force, scraping karşı.
- Tier bazlı: anon < auth < premium.
- Sensitive endpoint tighter: login, password reset, signup, email verification.
- 429 response:
Retry-After: 60 X-RateLimit-Reset: 1700000000 - IP bazlı + user ID bazlı + device fingerprint (karmaşık senaryo).
Headers
Her HTTP response'ta:
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY (veya CSP frame-ancestors)
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
Content-Security-Policy: <proje özel>
Session management
- Cookie flags:
Secure,HttpOnly,SameSite=Strict/Lax. - Session timeout: idle (30 dk), absolute (8-24 saat).
- Logout gerçek — server tarafı token invalidate edilir.
- Session fixation önleme: login sonrası session ID yenile.
- Concurrent sessions: kullanıcı aktif session'larını görebilir, revoke edebilir.
Dependency güvenliği
- Lockfile commit edilir (
package-lock.json,uv.lock). - Auto audit CI'da:
npm audit --audit-level=highpip-auditgovulncheck
- Dependency update: Dependabot / Renovate. Critical vulnerability → fast-track PR.
- Unmaintained dependency: 18+ ay commit yoksa alternatif ara.
- Supply chain: major dependency için SBOM, sigstore signing (ilerici).
Logging & monitoring
- Security event'ler log'a:
- Login success/failure
- Password change, 2FA setup
- Permission grant/revoke
- Admin action
- Large data export
- PII redact log'da — email prefix mask (
a***@example.com), IP hash'li vb. - Tamper-evident: log alterasyonu tespit edilebilir (append-only, S3 Object Lock).
- Alert: anomali (failed login spike, privilege escalation pattern).
API security
- Authentication her endpoint'te (public hariç).
- Rate limit mutlaka.
- Error response detail leak etmez:
✅ "Invalid credentials" ❌ "User exists but password wrong" (enumeration) - Enumeration önleme: login / password reset timing uniform.
- Resource ownership her GET/PATCH/DELETE'te.
File handling
- Upload path kontrollü —
../yasak, user dir isolation. - Serving — executable MIME (html, js, php) upload edilmişse
X-Content-Type-Options: nosniff+Content-Disposition: attachment. - Antivirus scan sensitive upload için.
- Size limit config'te net.
- Temp file cleanup job'u — sızıntı önleme.
Third-party entegrasyonu
- OAuth redirect URL whitelist.
- Webhook signature verification:
HMAC-SHA256(secret, timestamp + body) == X-Webhook-Signature - SSRF önleme: user-supplied URL fetch ederken whitelist / block internal IP (169.254, 10.0.0.0/8, 127.0.0.1).
- OAuth state parameter CSRF için zorunlu.
Privacy & compliance
- PII envanter: hangi veriyi neden tutuyoruz, ne kadar.
- Right to deletion (GDPR Article 17) — delete endpoint'i implemente et.
- Data export (GDPR Article 20) — kullanıcı kendi verisini JSON olarak alabilsin.
- Retention policy — veriye ömür biç.
- Cookie consent eğer tracking / analytics varsa.
Security testing
- Automated:
- SAST (CodeQL, Semgrep)
- DAST (OWASP ZAP)
- Dependency scan (npm audit, Snyk)
- Container scan (Trivy)
- Manual: kritik endpoint için adversarial test (auth bypass, IDOR, injection deneme).
- Bug bounty / responsible disclosure policy.
Incident response
- Playbook hazır:
- Credential leak: kimleri rotate, kullanıcı bilgilendirme
- Database breach: notification, forensics
- Account compromise: mass password reset
- Contact list güncel: on-call, legal, PR.
Yasak listesi (özet)
- Plain-text password storage
- MD5 / SHA1 password hash
- SQL string concat
eval(),exec()user input ile- Secret kod içinde
Access-Control-Allow-Origin: *+ credentials- Error response'da stack trace
- HTTP prod'da (HTTPS zorunlu)
innerHTMLuser content ile- Command injection vektörü
- Unsafe deserialize (
pickle,unserialize) - CSRF korumasız cookie-based endpoint
- JWT secret
changeme/ default değer - Test verisi prod'da
- Auth-less admin endpoint
- Dependency update 6+ ay ihmal
Commit
Conventional Commits. Güvenlik fix için fix(security): ... ve private disclosure akışına dikkat (bazı fixler public olmadan önce yayılmamalı — coordinated disclosure).