Saldırmadan yapabileceğiniz web sitesi güvenlik kontrolleri

Online mağazalar için pasif güvenlik kontrolü: TLS sertifika süresi, HSTS, CSP, nosniff, çerez bayrakları, karma içerik, eski jQuery, security.txt, DMARC.

FixReports editör ekibi10 dk okuma

Bir online mağazanın güvenlik ayarlarının büyük bölümünü, sitenin her ziyaretçiye zaten gönderdiği bilgileri okuyarak dışarıdan kontrol edebilirsiniz: TLS sertifikası, yönlendirmeler, HTTP yanıt başlıkları, çerezler, yüklenen script’ler ve herkese açık DNS kayıtları. Bu pasif kontroller saldırı trafiği göndermez ve giriş yapmayı gerektirmez; bu yüzden mağazaya normal bir ziyaretten fazla yük bindirmez. Süresi dolmak üzere olan bir sertifika, eksik HSTS, güvensiz çerezler, karma içerik (mixed content) veya bilinen açıkları olan bir jQuery sürümü gibi yapılandırma eksiklerini yakalar. Bir sızma testi değildir ve bir mağazanın güvenli olduğunu kanıtlayamaz.

Temel noktalar

  • 15 Mart 2026’dan bu yana düzenlenen, herkesçe güvenilen TLS sertifikaları en fazla 200 gün geçerli olabilir; bu süre Mart 2027’de 100 güne, Mart 2029’da 47 güne iner (CA/Browser Forum (yeni sekmede açılır)).
  • Tarayıcılar, düz HTTP üzerinden gönderilen HSTS başlığını yok sayar (MDN (yeni sekmede açılır)).
  • CSP frame-ancestors yönergesi bir <meta> etiketinde çalışmaz; yanıt başlığı olarak gönderilmesi gerekir (MDN (yeni sekmede açılır)).
  • 3.5.0’dan önceki jQuery sürümleri iki XSS açığından etkilenir ve CISA bunlardan biri olan CVE-2020-11023’ü 23 Ocak 2025’te Known Exploited Vulnerabilities (istismar edildiği bilinen açıklar) kataloğuna ekledi (NVD (yeni sekmede açılır)).
  • Bir security.txt dosyası Contact ve Expires alanlarını içermeli ve /.well-known/security.txt adresinde bulunmalıdır (RFC 9116 (yeni sekmede açılır)).

Pasif güvenlik kontrolü ne demektir?

Pasif kontrol, yalnızca sitenin veya DNS’inin sıradan bir isteğe döndürdüğü yanıtı okur.

Bu; herkese açık sayfaları yüklemek, sertifikayı ve yanıt başlıklarını okumak, bir sayfanın ayarladığı çerezleri ve yüklediği script’leri listelemek ve herkese açık DNS kayıtlarını sorgulamak demektir. Pasif bir kontrol parola tahmin etmez, enjeksiyon yükleri (payload) göndermez, yönetici paneli URL’lerini yoklamaz veya port taraması yapmaz. Aşağıdakilerin tümü bir tarayıcı, curl, openssl ve dig ile yapılabilir.

TLS sertifikanızı ve son kullanma tarihini nasıl kontrol edersiniz?

Sertifikanın tarihlerini ve adlarını doğrudan okuyun ve yenilemenin otomatik yapıldığından emin olun.

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

notAfter tarihinin rahatça ileride olduğunu, ikisini de kullanıyorsanız sertifikanın hem example.com hem de www.example.com adını kapsadığını (tarayıcının sertifika görüntüleyicisi adları listeler) ve tarayıcının hiçbir uyarı göstermediğini kontrol edin. Sertifika geçerlilik süreleri, 11 Nisan 2025’te kabul edilen Ballot SC-081v3 (yeni sekmede açılır) kararının ardından CA/Browser Forum Baseline Requirements kapsamında kısalıyor (bölüm 6.3.2; Ekim 2026 itibarıyla sürüm 2.3.1):

Sertifikanın düzenlendiği tarihAzami geçerlilik süresi
15 Mart 2026’dan önce398 gün
15 Mart 2026 ile 14 Mart 2027 arası200 gün
15 Mart 2027 ile 14 Mart 2029 arası100 gün
15 Mart 2029’dan itibaren47 gün

Kısa geçerlilik süreleri elle yenilemeyi riskli hale getirir; bu yüzden hosting sağlayıcınızın veya sertifika aracınızın otomatik yenileme yaptığını doğrulayın. Düz HTTP’nin HTTPS’e yönlendirildiğini de doğrulayın:

curl -sI http://example.com/ | grep -i -E "^HTTP|^location"

Görmeniz gereken, location başlığı https:// ile başlayan bir 301 (veya 308) yanıtıdır.

Bir online mağaza hangi güvenlik başlıklarını göndermeli?

Birkaç yanıt başlığından oluşan küçük bir set, tarayıcı tarafındaki yaygın saldırıları neredeyse hiçbir maliyet olmadan engeller.

BaşlıkNe işe yararTipik değerKaynak
Strict-Transport-SecurityTarayıcılara yalnızca HTTPS kullanmalarını söyler ve kullanıcıların sertifika hatalarını geçip siteye girmesini engellermax-age=31536000; includeSubDomainsMDN (yeni sekmede açılır)
Content-Security-Policy: frame-ancestorsSayfalarınızı hangi sitelerin gömebileceğini kontrol eder; bu da tıklama korsanlığına (clickjacking) karşı korurframe-ancestors 'self'MDN (yeni sekmede açılır)
X-Frame-OptionsEski çerçeveleme kontrolü; OWASP’a göre destekleyen tarayıcılarda frame-ancestors bunu geçersiz kılarDENY veya SAMEORIGINOWASP (yeni sekmede açılır)
X-Content-Type-OptionsMIME türü tahminini (MIME sniffing) durdurur ve yanlış türle sunulan script ve stil dosyalarını engellernosniffMDN (yeni sekmede açılır)
Referrer-PolicyURL’lerinizin ne kadarının başka sitelere gönderileceğini sınırlarstrict-origin-when-cross-originOWASP
X-XSS-ProtectionTarayıcının XSS filtresi başlığı; OWASP’a göre aksi halde güvenli olan sitelerde XSS açıkları oluşturabilirAyarlamayın veya 0 kullanınOWASP

Mağazanızın ne gönderdiğini kontrol edin:

curl -sI https://example.com/
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: frame-ancestors 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin

İki uyarı. includeSubDomains, yalnızca HTTP üzerinden çalışan tüm alt alan adlarını engeller; bu yüzden önce alt alan adlarınızı kontrol edin. HSTS ön yüklemesi (preload) için max-age değerinin en az 31536000 olması ve includeSubDomains gerekir; bu nedenle preload değerini yalnızca tüm alt alan adlarınız HTTPS’e hazır olduğunda ekleyin. Script’leri kısıtlayan tam bir CSP edinmeye değer, ancak OWASP bunun yapılandırılmasının ve bakımının karmaşık olduğunu belirtir; çok sayıda uygulama kullanan mağazaların bunu dikkatle test etmesi gerekir.

Çerezleriniz Secure, HttpOnly ve SameSite ile ayarlanmış mı?

Oturum ve sepet çerezleri bu üç özniteliğin üçünü de taşımalıdır; bunları Set-Cookie yanıt başlıklarında görebilirsiniz.

ÖznitelikEtkisi (kaynak: MDN (yeni sekmede açılır))Nerede önemlidir
SecureYalnızca HTTPS üzerinden gönderilir; düz HTTP kullanan siteler bunu ayarlayamazHTTPS kullanan bir mağazadaki tüm çerezler
HttpOnlyJavaScript bunu document.cookie üzerinden okuyamaz; bu, XSS’e karşı koruma sağlarGiriş oturumları ve sepetler
SameSite=Lax veya StrictÇerezin siteler arası isteklerde ne zaman gönderileceğini sınırlarOturumlar; Strict kimlik doğrulama ve sepet çerezlerine uygundur
SameSite=NoneSiteler arası isteklerde gönderilir; Secure ile birlikte kullanılmalıdırYalnızca buna ihtiyaç duyan gömülü üçüncü taraf özellikler

SameSite özniteliği ayarlanmamışsa tarayıcılar çerezi Lax olarak ele alır. Kendi script’lerinizin okuması gereken çerezler HttpOnly olamaz; bu yüzden oturum açmış bir müşteriyi veya yöneticiyi tanımlayan çerezlere odaklanın.

curl -sI https://example.com/ | grep -i "^set-cookie"

Tarayıcı geliştirici araçları, sayfa yüklendikten sonra script’lerin ayarladığı çerezler de dahil olmak üzere aynı bilgileri gösterir.

Karma içeriği nasıl bulursunuz?

Karma içerik (mixed content), HTTPS üzerinden sunulan bir sayfada HTTP üzerinden yüklenen her türlü kaynaktır ve tarayıcı konsolu bunları listeler.

MDN (yeni sekmede açılır) bunu iki gruba ayırır. Görseller, ses ve video “yükseltilebilir” (upgradable) içeriktir: tarayıcılar bunları otomatik olarak HTTPS üzerinden ister. Script’ler, stil dosyaları, iframe’ler, yazı tipleri ve fetch() istekleri “engellenebilir” (blockable) içeriktir: tarayıcılar bunları engeller ve bu da onlara bağlı olan her şeyi bozar. Yalın bir IP adresine yapılan yükseltilmiş istekler de engellenir.

Bulmak için önemli şablonlarınızda (ana sayfa, koleksiyon, ürün, sepet) konsolu açın ve tema kodunuzda, sayfa içeriğinizde ve uygulama ayarlarınızda http:// araması yapın. Shopify’ın yardım merkezi, HTTPS üzerinden sunulmayan bir varlık (asset) içeren her mağaza sayfasının güvensiz kabul edildiğini (yeni sekmede açılır) belirtir ve varlıkların Shopify’da barındırılmasını veya HTTPS üzerinden sunulmasını önerir. WooCommerce’te site bir zamanlar http:// üzerinde çalıştıysa eski yazı içeriklerini ve tema seçeneklerini kontrol edin.

Bilinen CVE’leri olan eski JavaScript kütüphanelerini nasıl tespit edersiniz?

Her sayfanın yüklediği kütüphaneleri listeleyin, sürümlerini okuyun ve bunları National Vulnerability Database (NVD, ABD Ulusal Güvenlik Açığı Veritabanı) ile karşılaştırın.

jQuery ile başlayın. Tarayıcı konsolunda $.fn.jquery yüklü sürümü döndürür (jQuery API (yeni sekmede açılır)). İşaretlenmesi gereken sürümler:

CVEEtkilenen sürümlerSorunNVD puanı (v3.1)
CVE-2020-11022 (yeni sekmede açılır)1.12.0 ile 3.5.0 öncesi arasıGüvenilmeyen HTML’nin .html() veya .append() gibi yöntemlere aktarılması kod çalıştırabilir6,1 Orta
CVE-2020-11023 (yeni sekmede açılır)1.0.3 ile 3.5.0 öncesi arasıAynı sorun, <option> öğeleri içeren HTML için; 23 Ocak 2025’ten beri CISA’nın KEV kataloğunda6,1 Orta
CVE-2019-11358 (yeni sekmede açılır)3.4.0 öncesijQuery.extend(true, ...) üzerinden prototip kirliliği (prototype pollution)6,1 Orta

2020 tarihli iki sorun da jQuery 3.5.0’da düzeltildi. Açık içeren bir sürüm, hatalı kodun sitede bulunduğu anlamına gelir; istismar edilip edilemeyeceği, sitenin bu koda veriyi nasıl aktardığına bağlıdır. WordPress 5.6 sürümünden beri (yeni sekmede açılır) jQuery 3.5.1 ile birlikte geliyor; bu yüzden bir WooCommerce mağazasındaki eski bir jQuery, güncel olmayan bir WordPress’e ya da kendi kopyasını yükleyen bir temaya veya eklentiye işaret eder. Shopify’da tema dosyalarınızı ve script ekleyen uygulamaları kontrol edin.

security.txt nedir ve mağazanızın buna ihtiyacı var mı?

Güvenlik araştırmacılarına bir güvenlik açığını size nasıl bildirebileceklerini anlatan düz metin bir dosyadır.

RFC 9116 (yeni sekmede açılır) (Nisan 2022), bilgilendirme amaçlı (Informational) bir RFC’dir; bu yüzden ona uymak isteğe bağlıdır. RFC’ye göre dosya HTTPS üzerinden /.well-known/security.txt adresinde text/plain olarak sunulmalıdır. Contact ve Expires alanları zorunludur ve RFC, Expires tarihinin bir yıldan daha yakın bir tarih olmasını önerir.

Contact: mailto:security@example.com
Expires: 2027-09-30T23:00:00.000Z
Preferred-Languages: en
Policy: https://example.com/security-policy

WooCommerce’te dosyayı sunucunuza yerleştirebilirsiniz. Barındırılan (hosted) bir platformda o yolda bir dosya yayımlayıp yayımlayamayacağınızı kontrol edin; yayımlayamıyorsanız iletişim sayfanızda açıkça belirtilmiş bir güvenlik iletişim adresi de işe yarar.

DMARC mağazanızı e-posta sahteciliğine karşı nasıl korur?

DMARC, From (Kimden) adresinde alan adınızı kullanan ancak hizalı SPF veya DKIM doğrulamasından geçemeyen e-postaları karantinaya almalarını veya reddetmelerini e-posta sağlayıcılarından istemenizi sağlar.

p=none politikasına sahip bir kayıt yalnızca rapor toplar; sahte e-postaları durdurmaz. Müşteriler sipariş onaylarının ve parola sıfırlama e-postalarının sizin alan adınızdan gelmesini bekler; bu yüzden tam olarak sizin alan adınızı gösteren bir oltalama (phishing) mesajını engellemeye değer. Politikanızı dig +short TXT _dmarc.example.com komutuyla kontrol edin; spesifikasyon için RFC 9989 (yeni sekmede açılır) belgesine bakın. DMARC benzer görünen (lookalike) alan adlarını kapsamaz, yalnızca kaydı yayımlayan alan adını kapsar.

Shopify neleri yönetir, WooCommerce’te neleri siz kontrol edersiniz?

Shopify vitrinlerinin arkasındaki sunucuları kendisi işletir; kendi sunucunuzda barındırdığınız (self-hosted) bir WooCommerce mağazasında ise sunucu ayarları size ve hosting sağlayıcınıza kalır.

KontrolShopifyWooCommerce (kendi sunucunuzda)
TLS sertifikasıShopify’a eklenen tüm alan adları için ücretsiz (yeni sekmede açılır); üçüncü taraf alan adlarında 48 saate kadar sürebilirHosting sağlayıcınız veya kendi kurulumunuz
HTTP’den HTTPS’e yönlendirmePlatformWeb sunucusu, CDN veya hosting ayarları
Güvenlik başlıklarıShopify’ın sunucuları gönderirWeb sunucusu, CDN veya bir eklenti
Çerez bayraklarıShopify’ın kendi çerezlerini platform ayarlar; uygulama ve tema çerezleri sizin sorumluluğunuzdadırWordPress çekirdeği, eklentiler ve sunucu
Karma içerik ve JS kütüphaneleriTemanız, içeriğiniz ve uygulamalarınızTemanız, içeriğiniz ve eklentileriniz
security.txt ve DMARCAlan adınız ve DNS’inizAlan adınız ve DNS’iniz

Ekim 2026’da Shopify’da barındırılan birkaç vitrini kontrol ettiğimizde yanıtlarında yaklaşık 91 günlük max-age değerine sahip HSTS, X-Content-Type-Options: nosniff ve upgrade-insecure-requests içeren bir CSP vardı; frame-ancestors ise mağazadan mağazaya farklıydı. Shopify, Level 1 PCI DSS uyumlu olarak sertifikalı (yeni sekmede açılır) olduğunu belirtiyor. Temanız ve yüklediğiniz uygulamalar ise sizin sorumluluğunuzda kalır.

WooCommerce tarafında WordPress’in güçlendirme (hardening) rehberi (yeni sekmede açılır), WordPress’i ve eklentileri güncel tutmayı, kullanmadığınız eklentileri silmeyi ve hosting sağlayıcınıza hangi güvenlik önlemlerini aldığını sormayı önerir.

Bu neden bir sızma testi değildir?

Sızma testi aktif olarak saldırı girişiminde bulunur; pasif kontroller ise yalnızca gözlemler.

NIST SP 800-115, sızma testini, değerlendiricilerin bir sistemin güvenlik özelliklerini aşmanın yollarını bulmak için gerçek dünyadaki saldırıları taklit ettiği güvenlik testi olarak tanımlar (NIST sözlüğü (yeni sekmede açılır)). Pasif kontroller; eklentilerdeki sunucu tarafı açıkları, zayıf veya tekrar kullanılan yönetici parolalarını, eksik iki faktörlü kimlik doğrulamayı, bozuk erişim denetimini ya da sayfa kaynağında hiç görünmeyen savunmasız kodu göremez. Bunları istediğiniz zaman tekrarlayabileceğiniz bir başlangıç çizgisi olarak kullanın. Daha derin bir güvence için, sahibi olduğunuz veya test etme yetkiniz bulunan sistemlerde, kapsamı yazılı olarak belirlenmiş bir sızma testi yaptırın.

Ücretsiz tarama, mağazanız üzerinde ilk bir kontrol turu yapar. Web Sitesi Güvenlik Raporu, TLS ve yönlendirmelerden başlıklara, çerezlere, karma içeriğe, eski kütüphanelere, security.txt dosyasına ve DMARC’a kadar bu makaledeki pasif kontrolleri kapsar ve her bulgu için çözüm sunar. Her pasif inceleme gibi, bir mağazanın güvenli olduğunu garanti edemez.

Sık sorulan sorular

Pasif güvenlik kontrolleri mağazamı riske atar mı?

Normal bir ziyaretten daha fazla değil. Bu kontroller, herhangi bir tarayıcının veya e-posta sunucusunun isteyeceği herkese açık sayfaları ve DNS kayıtlarını ister; giriş yapmaya veya saldırı yükü göndermeye çalışmaz.

Shopify’da güvenlik başlıkları ekleyebilir miyim?

Vitrin yanıt başlıkları Shopify’ın sunucularından gelir; ihtiyacınız olan bir başlık eksikse Shopify Destek ile iletişime geçin. Temanızdaki bir CSP <meta> etiketi bazı yönergeler ekleyebilir, ancak MDN, frame-ancestors yönergesinin <meta> içinde desteklenmediğini belirtir.

Eski bir jQuery sürümü mağazamın hacklendiği anlamına mı gelir?

Hayır. Bilinen güvenlik açıkları olan kodun yüklendiği anlamına gelir; site, etkilenen yöntemlere güvenilmeyen HTML aktarıyorsa bu durum riski artırır. jQuery’yi güncelleyin veya onu yükleyen temayı ya da eklentiyi kaldırın.

Bir TLS sertifikası artık en fazla ne kadar süre geçerli olabilir?

15 Mart 2026’dan itibaren düzenlenen, herkesçe güvenilen sertifikalar en fazla 200 gün geçerli olabilir. Bu sınır 15 Mart 2027’den itibaren 100 güne, 15 Mart 2029’dan itibaren 47 güne düşer.

security.txt dosyası zorunlu mu?

RFC 9116 bilgilendirme amaçlı (Informational) bir RFC’dir; bu yüzden standarda göre dosyayı yayımlamak isteğe bağlıdır. Yayımlaması zahmetsizdir ve araştırmacılara size ulaşmaları için net bir yol sunar.

Temiz bir pasif tarama sonucu mağazamın güvenli olduğu anlamına mı gelir?

Hayır. Yalnızca herkese açık yapılandırmanın doğru göründüğünü gösterir. Sunucu tarafı açıklar, hesap güvenliği ve iş mantığı hataları başka testler gerektirir.

Kaynaklar