# Web Sitesi Güvenlik Taraması

URL: https://discuvr.org/security-scan/?hl=tr
Last updated: 2026-11-07
MCP tool: `security_scan`

Bir alan adını eksik güvenlik başlıkları, TLS sorunları ve açığa çıkmış dosyalar için tarayın. Her bulgu, ham kanıtı ve onu yeniden üretmek için tam komutu gösterir.

Pek çok tarayıcı size bir harf notu ve korkutucu kelimelerden oluşan bir liste verir. Bu da bir not verir, ancak düşülen her puan, gerçekte alınan yanıtı ve aynı yanıtı size veren tek satırlık komutu gösteren bir bulguya bağlıdır. Yani bulgu, inanmanız gereken değil doğrulayabileceğiniz bir şeydir.

## Ne işe yarar

- DNS ve CAA, SPF ve DMARC, TLS sertifikası ve TLS 1.0/1.1, HTTPS yönlendirmesi, güvenlik başlıkları, çerez öznitelikleri, CORS, sürüm başlıkları, HTTP yöntemleri, karışık içerik, 23 hassas yol, dizin listeleri, robots.txt, security.txt ve 12 hizmet portunu kontrol eder.
- Her bulgu, ham gözlemi ve onu yeniden üretmek için bir kabuk komutunu içerir.
- Çalıştırılamayan kontroller "kontrol edilmedi" olarak bildirilir - sessizce geçti olarak değil.
- Raporlar Markdown veya JSON olarak indirilir.

## Nasıl çalışır

1. Sorumlu olduğunuz bir alan adı girin.
2. Tarama pasif sondalar çalıştırır - sıradan istekler, sömürü yok.
3. Bulguları, her birini kanıtıyla birlikte okuyun ve önemli olanları doğrulayın.

## Hiçbir bulgu icat edilmez

Tarayıcıda hiçbir dil modeli yoktur. Önem derecesi, etki ve çözüm her kontrol için sabittir ve her bulgu gerçek bir gözlemden üretilir. Ekrandaki rapor ile Markdown ve JSON indirmeleri aynı bulgulardan, hiçbir model kullanılmadan oluşturulur.

## Not nasıl hesaplanır

Puan 100'den başlar; her kritik bulgu için 34, yüksek için 13, orta için 5 ve düşük için 1,5 puan düşer, her önem derecesinin toplamı ise sınırlıdır (yüksek 45, orta 22, düşük 9). Bilgi amaçlı ve geçen sonuçlar puan düşürmez. 90 ve üzeri A, 75 B, 60 C, 40 D, daha altı F'dir. Açıkta tek bir .env dosyası ya da erişilebilir bir veritabanı portu, temiz bir siteyi 100'den 66'ya, yani C'ye indirir; böyle iki bulgu 32, yani F verir.

## Yanlış alarmlar nasıl önlenir

Tarayıcı, /.git/HEAD veya /backup.sql gibi yolları denemeden önce var olamayacak rastgele bir adres ister ve sitenin nasıl yanıt verdiğini kaydeder. Bir yol yalnızca HTTP 200 döndürdüğünde, bu bulunamadı referansından farklı olduğunda ve dosyanın kendi imzasıyla eşleştiğinde açıkta sayılır. Bu yüzden her URL'ye ana sayfasıyla yanıt veren bir site kritik bulgularla dolmaz.

## Temiz bir rapor sertifika değildir

Bunlar çalışan bir siteye karşı yapılan pasif kontrollerdir. Uygulama mantığını, kimlik doğrulamayı, erişim kontrolünü veya bir girişin ardındaki hiçbir şeyi kapsamazlar - gerçek ihlallerin genellikle başladığı yerler. Tamamlanamayan kontroller tam da bu nedenle kontrol edilmedi olarak listelenir: başarısız bir bağlantıdan türetilen bir geçiş sahte bir güvencedir ve bulgu içermeyen bir tarama hiçbir şey bulunamadığı anlamına gelir, orada hiçbir şey olmadığı anlamına gelmez.

## Yalnızca size ait olanı tarayın

Sahip olduğunuz veya test etmek için yazılı izniniz olan alan adlarını tarayın. Araç, özel veya dahili adreslere çözümlenen sunucuları reddeder ve IP başına hız sınırlıdır, ancak yetkilendirme yine de sizin sorumluluğunuzdadır.

## Sorular

**Bu etkin bir saldırı mı?**

Hayır. Sıradan GET, HEAD ve OPTIONS istekleri, TLS el sıkışmaları (TLS 1.0 ve 1.1 denemeleri dahil), Cloudflare'in HTTPS üzerinden DNS hizmetiyle DNS sorguları ve 12 porta basit TCP bağlantıları yapar. Hiçbir şey istismar edilmez, form gönderilmez ve hiçbir şey değiştirilmez.

**Herhangi bir web sitesini tarayabilir miyim?**

Yalnızca sahip olduğunuz veya test etmeye yetkili olduğunuz siteleri. Üçüncü taraf altyapısını izinsiz taramak, bulunduğunuz yerde yasa dışı olabilir.

**Bir kontrol neden "kontrol edilmedi" diyor?**

Çünkü tamamlanamadı - genellikle o kaynaktan hiçbir yanıt gelmediği için. Bu, geçti olarak kaydedilmek yerine dürüstçe bildirilir.

**Raporu dışa aktarabilir miyim?**

Evet, Markdown veya JSON olarak, bir saat boyunca: indirmelerin çalışması için rapor bu süre sunucu önbelleğinde tutulur, sonra silinir. Hiçbir dışa aktarma model kullanmaz. Kullanım kaydında alan adı değil, bulgu sayısı ve not tutulur.

**Hangi dosyaları ve portları test ediyor?**

Dosyalar: aralarında /.git/HEAD, /.git/config, /.env, /.env.local, /.env.production, /.aws/credentials, /id_rsa, /backup.zip, /backup.sql, /dump.sql, /wp-config.php.bak, /phpinfo.php, /server-status, /actuator/env bulunan 23 sabit yol; her biri yalnızca yanıt o dosyanın kendi imzasıyla eşleşirse bildirilir. /.well-known/security.txt yayımlanmışsa lehinize sayılır. Portlar: 21 FTP, 23 Telnet, 25 SMTP, 3306 MySQL, 5432 PostgreSQL, 6379 Redis, 27017 MongoDB, 9200 Elasticsearch, 3389 RDP, 5900 VNC, 11211 Memcached, 8080 portlarına düz bir TCP bağlantısı, asla oturum açma denemesi değil. Erişilebilir bir veritabanı portu (MySQL, PostgreSQL, Redis, MongoDB, Elasticsearch) veya Telnet kritik olarak derecelendirilir.

**SPF ve DMARC kontrolleri neleri işaretler?**

İki kayıt da, site hiç e-posta göndermese bile, herkese açık DNS'ten okunur; çünkü bunlar olmadan herkes alan adınızdan geliyormuş gibi görünen e-posta gönderebilir. SPF kaydı yoksa orta; internetteki her sunucuya izin veren +all içeren bir SPF kaydı yüksek. _dmarc altında DMARC kaydı yoksa orta; p=none (veya p= etiketi yoksa) yalnızca izler ve düşüktür; p=quarantine veya p=reject geçer. Hiç e-posta göndermeyen bir alan adı v=spf1 -all yayımlayabilir.

**Hangi güvenlik başlıklarını kontrol eder ve hangi değer geçer?**

Ana sayfanızın yanıtındaki altı başlık. Eksikse HSTS ve Content-Security-Policy yüksek, X-Content-Type-Options ve X-Frame-Options orta, Referrer-Policy ve Permissions-Policy düşüktür. Strict-Transport-Security en az 15552000 (180 gün) max-age ister: daha kısası düşük, max-age=0 ortadır. script-src 'unsafe-inline' izni veriyorsa, politika 'unsafe-eval' izni veriyorsa ya da default-src veya script-src tek başına * joker karakteri içeriyorsa Content-Security-Policy zayıflatılmış (orta) olarak işaretlenir. X-Content-Type-Options tam olarak nosniff olmalıdır. X-Frame-Options DENY veya SAMEORIGIN olmalıdır; CSP frame-ancestors belirliyorsa gerekmez. Referrer-Policy yalnızca unsafe-url veya no-referrer-when-downgrade olduğunda işaretlenir. Permissions-Policy'nin yalnızca bulunması yeterlidir. Eksik ya da zayıf her başlık için kendiniz kontrol edebilmeniz amacıyla bir curl -sI komutu verilir.

**Çerez özelliklerini (Secure, HttpOnly, SameSite) nasıl kontrol eder?**

Ana sayfanızın yanıtındaki her Set-Cookie başlığını okur (en fazla 12 çerez) ve her birinde Secure, HttpOnly ve SameSite'ı kontrol eder. Secure ya da HttpOnly eksikse orta; yalnızca SameSite eksikse düşüktür. Secure olmadan SameSite=None ayrıca belirtilir, çünkü tarayıcılar bu çerezi reddeder. Üçüne de sahip bir çerez geçer. Olağan çözüm Secure; HttpOnly; SameSite=Lax'tır (Django'da: SESSION_COOKIE_SECURE, SESSION_COOKIE_HTTPONLY ve SESSION_COOKIE_SAMESITE). Tarama oturum açmaz, bu yüzden yalnızca girişten sonra ayarlanan çerezleri görmez. Kendiniz kontrol etmek için: curl -sI https://your-site/ | grep -i set-cookie

**CORS kontrolü nasıl çalışır ve ne zaman kritiktir?**

Ana sayfanıza Origin: https://scanner-probe.example başlığıyla tek bir GET isteği gönderir ve yanıttaki Access-Control-Allow-Origin ile Access-Control-Allow-Credentials değerlerini okur. Access-Control-Allow-Origin başlığı yoksa ya da test kaynağını geri yansıtmayan sabit bir kaynak varsa geçer. Test kaynağını Access-Control-Allow-Credentials: true ile birlikte geri yansıtmak kritiktir, çünkü oturum açmış bir kullanıcının ziyaret ettiği her site onun yanıtlarını okuyabilir. Kaynağı kimlik bilgisi olmadan yansıtmak ortadır. Joker * düşüktür, kimlik bilgilerine de izin veriliyorsa ortadır (tarayıcılar bu birleşimi reddeder). Yalnızca ana sayfa denenir ve OPTIONS ön isteği gönderilmez; API yollarınızı ayrıca şununla test edin: curl -sI -H "Origin: https://scanner-probe.example" https://your-site/api/ | grep -i access-control

**TLS denetimi neyi test eder (sertifika süresi, TLS 1.0 ve 1.1)?**

443 numaralı bağlantı noktasına bağlanır ve sertifika zincirini ve ana bilgisayar adını doğrular. Doğrulanmayan bir sertifika yüksek, süresi dolmuş olan ayrıca kritik, süresinin dolmasına 15 günden az kalan ise orta önem derecesindedir; aksi halde konu, düzenleyen, bitiş tarihi ve SAN adları başarılı olarak gösterilir. Anlaşılan protokol TLS 1.2 veya TLS 1.3 olmalıdır, daha eskisi yüksektir. Ardından TLS 1.0 ve TLS 1.1 el sıkışmasını ayrı ayrı dener: bunlardan birini kabul eden sunucu orta düzey bir bulgu alır, çünkü ikisi de RFC 8996 ile kullanımdan kaldırılmıştır. Tarayıcının kendi OpenSSL sürümü eski sürümü sunamıyorsa tahmin yürütmek yerine hiçbir şey raporlanmaz. nginx düzeltmesi ssl_protocols TLSv1.2 TLSv1.3; Tarihleri kendiniz şu komutla kontrol edin: echo | openssl s_client -connect your-site:443 -servername your-site 2>/dev/null | openssl x509 -noout -dates

**HTTP'nin HTTPS'ye yönlendirdiğini kontrol ediyor mu?**

Evet. Yönlendirmeleri izlemeden http://your-site/ adresini ister. Bir https:// adresine 301 veya 308 başarılıdır. HTTPS'ye 302, 303 veya 307 düşüktür, çünkü tarayıcılar geçici yönlendirmeyi hatırlamaz ve her yeni ziyaret şifrelenmemiş bir istekle başlar. Şifrelenmemiş HTTP üzerinden sunulan bir sayfa (2xx yanıtı) yüksektir. 80 numaralı bağlantı noktası hiç yanıt vermezse bu bir hata değil, bilgi amaçlıdır. nginx düzeltmesi server { listen 80; return 301 https://$host$request_uri; }, ardından Strict-Transport-Security ekleyin. Kendiniz şu komutla kontrol edin: curl -I http://your-site/

**Hangi HTTP yöntemlerini işaretler (TRACE, PUT, DELETE)?**

Ana sayfanıza tek bir OPTIONS isteği gönderir ve Allow başlığını, Allow yoksa Access-Control-Allow-Methods başlığını okur. TRACE, TRACK, PUT veya DELETE sunuluyorsa orta önem derecesindedir; yalnızca PATCH veya CONNECT düşüktür; yalnızca standart okuma yöntemleri başarılıdır. Sunucu iki başlıktan hiçbirini göndermezse hiçbir şey raporlanmaz. Bir yöntemin sunulması çalıştığını kanıtlamaz, bu yüzden bir şeyi değiştirmeden önce doğrulayın. TRACE, çerezler dahil istek başlıklarını çağırana geri yansıtabilir (Cross-Site Tracing). nginx varsayılan olarak TRACE'i reddeder; Apache'de TraceEnable Off ayarlayın. PUT ve DELETE'i yalnızca bunlara ihtiyaç duyan API yollarıyla sınırlayın ve kimlik doğrulamanın arkasına koyun. Kendiniz şu komutla kontrol edin: curl -X OPTIONS -i https://your-site/

**Dizin listelemeyi ("Index of /") nasıl tespit eder?**

7 yolu ister: /, /static/, /assets/, /uploads/, /images/, /files/ ve /backup/. Başlığı veya ana başlığı "Index of /" ile başlayan bir sayfayla HTTP 200 yanıtı veren yol orta önem derecesinde raporlanır (CWE-548), çünkü liste hiçbir yerden bağlantı verilmeyen dosyaları, örneğin yedekleri, dışa aktarımları ve eski sürümleri gösterir. Hiçbiri böyle değilse denetim başarılıdır; siteye ulaşılamazsa yapılmadı olarak raporlanır. nginx düzeltmesi autoindex off; (varsayılan budur, bu yüzden açıkça yazılmış bir autoindex on arayın), Apache'de Options -Indexes, ardından hassas her şeyi web kök dizininin dışına taşıyın. Kendiniz şu komutla kontrol edin: curl -s https://your-site/uploads/ | head -20

**Karışık içeriği ve HTTP üzerinden gönderen formları buluyor mu?**

Evet, ana sayfada. HTML'i sunulduğu haliyle okur (JavaScript çalıştırılmaz) ve src ya da href değeri http:// ile başlayan her script, link, iframe veya img etiketini listeler. Bunlardan biri .js veya .css dosyasıysa bulgu orta seviyededir, çünkü yolda değiştirilen bir betik ya da stil dosyası HTTPS sayfanızın içinde çalışır; yalnızca görseller ve çerçeveler düşük; hiç yoksa geçer (CWE-311). action değeri http:// ile başlayan bir form yüksek olarak raporlanır (CWE-319), çünkü içine yazılan her şey, parolalar dahil, şifresiz gider. Çözüm bu URL'leri https:// yapmak ya da göreli hale getirmek ve güvenlik ağı olarak Content-Security-Policy: upgrade-insecure-requests başlığını eklemektir. Kendiniz kontrol edin: curl -s https://your-site/ | grep -Eo "(src|href|action)=.http://[^ >]*"

**robots.txt ve security.txt dosyalarında neyi kontrol ediyor?**

robots.txt: /robots.txt dosyasını indirir ve HTTP 200 ile metin dosyası olarak dönerse ilk 8000 karakterdeki Disallow satırlarını okur. admin, internal, private, backup, config, staging, test, api, secret, dev kelimelerinden birini içeren bir Disallow yolu düşük olarak raporlanır (CWE-200): robots.txt herkese açıktır ve yalnızca kurallara uyan tarayıcılardan uzak durmalarını ister, bu yüzden bu yolları listelemek onların reklamını yapar. Onları oturum açmayla koruyun, sayfaları aramadan uzak tutmak için noindex kullanın. security.txt: RFC 9116 ile belirlenen konum olan /.well-known/security.txt adresini ister ve dosyada bir Contact: satırı varsa lehinize sayar. Dosyanın olmaması puan düşürmez. RFC 9116 ayrıca tarama tarafından kontrol edilmeyen bir Expires: alanı da ister, bu yüzden ikisini birlikte yayımlayın, örneğin Contact: mailto:security@your-site, Expires: 2027-06-30T23:00:00Z. Kendiniz kontrol edin: curl -s https://your-site/.well-known/security.txt

**CAA kontrolü neye bakar ve CAA kaydını nasıl eklerim?**

Girdiğiniz ana bilgisayar adının CAA kayıtlarını (RFC 8659) Cloudflare DNS-over-HTTPS üzerinden sorgular. Kayıt bulursa kontrol geçer ve kanıt bunların en fazla 5 tanesini gösterir; hiç bulamazsa "No CAA record" sonucunu düşük önem derecesiyle bildirir, çünkü bu durumda herhangi bir genel sertifika otoritesi bu ad için sertifika verebilir. CAA kaydı gerçekten kullandığınız CA'ları listeler, örneğin your-site. IN CAA 0 issue "letsencrypt.org", ayrıca bildirim almak için 0 iodef "mailto:security@your-site". Kullandığınız her CA için bir issue satırı ekleyin; joker (wildcard) sertifikalar başka bir CA'dan gelecekse bir issuewild satırı da ekleyin. Kendiniz kontrol edin: dig CAA your-site

**www veya bir alt alan adı taranınca neden CAA, SPF ya da DMARC yok deniyor?**

Her DNS kontrolü tam olarak girdiğiniz ad üzerinde çalışır; www.example.com, example.com olarak değil www.example.com olarak sorgulanır ve üç kayıt farklı şekilde devralınır. CAA: www.example.com üzerinde CAA kaydı bulamayan bir sertifika otoritesi example.com düzeyine çıkar ve oradakini kullanır (RFC 8659, bölüm 3), bu yüzden bir alt alan adında "No CAA record" yanlış alarm olabilir. DMARC: alıcılar kurumsal alan adının politikasına başvurur; bu politika sp= ile alt alan adları için ayrı bir politika belirleyebilir (RFC 7489'u geçersiz kılan RFC 9989), bu yüzden _dmarc.www.example.com kaydının olmaması genellikle _dmarc.example.com ile karşılanır. SPF: devralma yoktur (RFC 7208), dolayısıyla "No SPF record" o ad için doğrudur; e-posta göndermeyen bir ana bilgisayar adı v=spf1 -all yayımlayabilir. Başarısız olan bir DNS sorgusu da kayıt yok olarak görünür. Çıplak alan adını da tarayın veya dig CAA example.com ve dig TXT _dmarc.example.com ile doğrulayın

## Gizlilik ve Güvenlik içinde daha fazlası

- [Görsel Temizleme](https://discuvr.org/image-scrub/?hl=tr)

## Sıklıkla birlikte kullanılanlar

- [IP adresim ne](https://discuvr.org/what-is-my-ip/?hl=tr)
- [Şifre Oluşturucu](https://discuvr.org/password-generator/?hl=tr)

---

Part of Discuvr (https://discuvr.org/): Discuvr is a collection of free, focused tools for day-to-day professional work - office and data utilities, legal and compliance helpers, privacy and security checks, and developer formatters. Every tool has its own page, and most can also be called from ChatGPT or Claude over MCP.
