Web Guvenlik Temelleri: Guvenli Kod Yazma Rehberi
Web uygulamalarinizi yaygin guvenlik aciklarina karsi korumak icin guvenli kodlama prensiplerini ogrenin.
Web Guvenligi Neden Kritik?
Web uygulamalari, isletmelerin ve kullanicilarin dijital yasamin merkezindedir. Ancak bu yayginlik, siber saldirganlar icin de genis bir atak yuzeyi olusturur. 2026 yilinda veri ihlalleri, fidye yazilimlar ve kimlik hirsizligi vakalari her zamankinden daha yaygindir. Bir guvenlik acigi, kullanici verilerinin sizmasina, mali kayiplara, itibar zedelenmesine ve yasal yaptirimlarla karsilasmaniza yol acabilir.
Web guvenligi, yalnizca guvenlik ekiplerinin degil, her gelistiricinin sorumlulugudur. Bu rehberde, OWASP Top 10 listesindeki en kritik guvenlik riskleri, yaygin saldiri turleri ve bunlara karsi alinabilecek onlemleri kapsamli sekilde ele alacagiz.
OWASP Top 10: En Kritik Web Guvenlik Riskleri
OWASP (Open Web Application Security Project), web uygulama guvenligini iyilestirmeye yonelik caalisan uluslararasi bir topluluktur. OWASP Top 10 listesi, en yaygin ve tehlikeli web guvenlik risklerini siralar:
- Bozuk Erisim Kontrolu (Broken Access Control): Kullanicilarin yetkisiz kaynaklara erismesi. Ornegin diger kullanicilarin verilerini goruntuleme veya admin paneline erisim.
- Kriptografik Hatalar (Cryptographic Failures): Hassas verilerin yetersiz sifreleme ile korunmasi. Sifrelerin duz metin olarak saklanmasi veya zayif algoritma kullanimi.
- Enjeksiyon (Injection): SQL, NoSQL, OS komut enjeksiyonu gibi saldirilar. Kullanici girdisinin dogrudan sorgu veya komut icinde kullanilmasi.
- Guvenli Olmayan Tasarim (Insecure Design): Tasarim asamasindaki guvenlik eksiklikleri. Tehdit modellemesei yapilmamasi.
- Guvenlik Yapilandirma Hatalari (Security Misconfiguration): Varsayilan ayarlarin degistirilmemesi, gereksiz servislerin acik birakilmasi.
- Savunmasiz ve Eski Bilesenler (Vulnerable Components): Bilinen guvenlik aciklarina sahip kutuphanelerin kullanimi.
- Kimlik Dogrulama Hatalari (Authentication Failures): Zayif parola politikalari, oturum yonetimi sorunlari.
- Yazilim ve Veri Butunlugu Hatalari (Software and Data Integrity Failures): Guvenilmeyen kaynaklardan gelen guncellemeler ve CI/CD pipeline guvenlik aciklari.
- Guvenlik Izleme ve Kayit Eksiklikleri (Security Logging Failures): Yeterli log tutulmamasi ve izleme yapilmamasi.
- Sunucu Tarafli Istek Sahteciligi (SSRF): Sunucunun, saldirganin belirledigi adreslere istek gondermesinin saglanmasi.
XSS (Cross-Site Scripting) Saldirilari
XSS, en yaygin web guvenlik acilklarindan biridir. Saldirgan, kurbanin tarayicisinda keyfi JavaScript kodu calistirmayi basarir. Uc temel turu vardir:
- Stored XSS: Zararli kod sunucuda (veritabaninda) saklanir ve diger kullanicilara sunulur. Ornegin bir forum yorumuna yerlestirilen script etiketi.
- Reflected XSS: Zararli kod, URL parametresi uzerinden sunucuya gonderilir ve yanit olarak sayfaya yansitilir. Genellikle sosyal muhendislik ile yayilir.
- DOM-based XSS: Saldiri tamamen istemci tarafinda gerceklesir. JavaScript kodu, DOM'u guvenli olmayan sekilde manipule eder.
XSS'e karsi korunma yontemleri:
- Kullanici girdilerini her zaman kaçis karakterleri (escape) uygulayarak gosterin. HTML, JavaScript ve URL bagllaminda farkli kacis yontemleri kullanin.
- React gibi frameworkler varsayilan olarak XSS korumasii saglar; ancak
dangerouslySetInnerHTMLkullanirken dikkatli olun. - Content Security Policy (CSP) basliklarini yapilandirin.
HttpOnlyveSecurebayraklariyla cookie'leri koruyun.- Girdi dogrulamasi (input validation) uygulaayin; beyaz liste yaklasimini tercih edin.
CSRF (Cross-Site Request Forgery)
CSRF, kullanicinin kimlik bilgileriyle yetkisiz istekler gonderilmesini saglayan bir saldiridir. Kullanici bir bankada oturum acmisken, zararli bir siteyi ziyaret ederse, o site kullanicinin kimligiyle bankaya para transferi istegi gonderebilir.
CSRF korunma yontemleri:
- CSRF Token: Her form gonderiminde sunucu tarafindan uretilen benzersiz bir token kullanin. Sunucu, gelen istegin tokenni dogrular.
- SameSite Cookie: Cookie'lere
SameSite=StrictveyaSameSite=Laxozelligini ekleyin. Bu, cookie'lerin ucuncu parti sitelerden gonderilmesini engeller. - Origin ve Referer kontrolu: Gelen isteklerin Origin ve Referer basliklarini dogrulayarak beklenen kaynaktan gelip gelmediklerini kontrol edin.
- Custom Header: AJAX isteklerinde ozel bir baslik (ornegin
X-Requested-With) ekleyin; tarayicilar cross-origin isteklerde ozel baslik eklemeyi kisitlar.
SQL Injection
SQL Injection, kullanici girdisinin dogrudan SQL sorgularina eklenmesiyle ortaya cikar. Saldirgan, veritabanindaki tum verileri okuyabilir, degistireabilir veya silebilir. Hatta isletim sistemi komutlari calistirabillir.
SQL Injection'a karsi korunma:
- Parametreli sorgular (Prepared Statements): Kullanici girdisini sorgu yapisindan ayirin. ORM'ler (Prisma, Drizzle, TypeORM) varsayilan olarak parametreli sorgular kullanir.
- Girdi dogrulamasi: Beklenen veri tipini, uzunlugunu ve formatini dogrulayin. Sayisal bir alan icin yalnizca sayilari kabul edin.
- En az yetki prensibi: Veritabani kullanicisina yalnizca ihtiyac duydugu yetkileri verin. Uygulama kullanicisi DROP TABLE yetkisine sahip olmamalidir.
- WAF (Web Application Firewall): Bilinen saldiri kaliplarini tespit eden ve engelleyen bir guvenlik duvari kullanin.
- Hata mesajlarini gizleyin: Veritabani hata mesajlarini kullaniciya gostermeyin; saldirgan icin bilgi kaynagi olabilir.
Content Security Policy (CSP)
CSP, tarayiciya hangi kaynaklarin yuklenebilecegini belirten bir HTTP basligidir. XSS ve veri enjeksiyon saldirilarrina karsi guclu bir savunma katmani olusturur.
Temel CSP direktifleri sunlardir:
default-src 'self': Varsayilan olarak yalnizca kendi alan adinizdan kaynak yuklenmesinne izin verir.script-src 'self': JavaScript dosyalarinin kaynaklarini kisitlar.'unsafe-inline've'unsafe-eval'kullanmaktan kacinin.style-src 'self': CSS dosyalarinin kaynaklarini belirler.img-src 'self' data:: Gorsel kaynaklarini sinirlar.connect-src: AJAX, WebSocket ve EventSource baglantisi yapilabilecek adresleri belirler.frame-ancestors 'none': Sayfanizin iframe icerisinde gosterilmesini engeller (clickjacking korumasii).report-uri: CSP ihlallerini belirtilen adrese raporlar.
HTTPS ve Transport Guvenligi
HTTPS, istemci ile sunucu arasindaki tum iletisimi sifreleyerek gizlilik ve butunluk saglar. 2026 yilinda HTTPS, SEO siralama faktoru, PWA gereksiniimi ve kullanici guveni icin zorunludur.
- TLS 1.3 kullanin: En guncel ve guvenli TLS surumunu tercih edin.
- HSTS (HTTP Strict Transport Security): Tarayiciyi yalnizca HTTPS uzerinden baglanti kurmaya zorlaayin.
Strict-Transport-Security: max-age=31536000; includeSubDomains - Sertifika otomasyonu: Let's Encrypt ile ucretsiz SSL sertifikasi alin ve otomatik yenileme yapilandirin.
- Mixed content engelleyin: HTTPS sayfalarinda HTTP uzerinden kaynak yuklemeyin.
Girdi Dogrulama (Input Validation)
Guvenli bir web uygulamasinin temeli, kullanici girdilerinin hem istemci hem de sunucu tarafinda titizlikle dogrulanmasidir. Girdi dogrulamasi, yalnizca beklenen formattaki verilerin kabul edilmesini saglar.
- Beyaz liste yaklasimi: Kabul edilebilir degerleri tanimlayin; geri kalan her seyi reddedin. Kara liste yaklasimini tercih etmeyin.
- Sunucu tarafli dogrulama zorunludur: Istemci tarafli dogrulama atlanabilir; sunucu tarafinda mutlaka tekrarlanmalidir.
- Tip ve format kontrolu: E-posta, telefon, URL gibi alanlarda uygun regex kaliplari kullanin.
- Uzunluk sinirlamasi: Her alana makul bir maksimum uzunluk belirleyin; buffer overflow ve DoS saldirilarini onler.
- Zod ve Yup gibi kutuphaneler: TypeScript ekosistemindeki sema dogrulama kutuphaneleri ile tip-guvenli dogrulama yapin.
Guvenlik Kontrol Listesi
Web uygulamanizin guvenligini sistematik olarak saglamak icin asagidaki kontrol listesini kullanin:
- Tum baglantilariin HTTPS uzerinden yapildigini dogrulayin ve HSTS basligini etkinlestirin.
- CSP basliklarini yapilandirin ve duzenli olarak ihlal raporlarini inceleyin.
- Tum kullanici girdilerini sunucu tarafinda dogrulayin ve kacis karakterleri uygullayin.
- Parametreli sorgular kullanin; dogrudan SQL birlestirmesi yapmayin.
- CSRF token'lari ve SameSite cookie'leri uygulayin.
- Parolalari bcrypt veya Argon2 ile hashleyin; duz metin olarak saklamayin.
- Bagimliliklari duzenli olarak guncelleyin ve guvenlik acikllarini tarayin (
npm audit). - Rate limiting uygulayarak brute-force saldirilarini onleyin.
- Hata mesajlarinda hassas bilgi ifsa etmeyin.
- Guvenlik loglarini tutun ve anormallikleri izleyin.
- Duzenli olarak pentest ve guvenlik denetimleri yaptiirin.
- HTTP guvenlik basliklarini ekleyin: X-Frame-Options, X-Content-Type-Options, Referrer-Policy.
Sonuc:Web guvenligi, surekli evrilen bir disiplindir. Saldiri yontemleri gelistikce savunma stratejileri de guncellenmmelidir. Guvenlik, uygulamanin tasarim asamasindan baslamali ve gelistirme, test ve dagitim sureclerinin her adimina entegre edilmelidir. "Security by design" yaklasimiyla guvenli web uygulamalari gelistirmek, hem kullanicilarinizi hem de isletmenizi korummanin en etkili yoludur.