Mixed Content (Karışık İçerik) Hatası Nedir?
Mixed content hatası, HTTPS üzerinden yüklenen bir sayfanın; bir script, stil dosyası, görsel, yazı tipi veya iframe gibi bir kaynağı düz HTTP üzerinden çekmesi durumunda ortaya çıkar. Sayfanın kendisi güvenli şekilde sunulur, ama bağımlı olduğu bir şey öyle değildir ve tarayıcı sayfayı göstermeden önce bu farkla ilgili bir karar vermek zorunda kalır.
Tarayıcılar iki tür karışık içeriği farklı ele alır. Aktif mixed content — sayfanın davranışını veya görünümünü değiştirebilen script, stil dosyası, iframe gibi kaynaklar — modern tarayıcıların tamamı tarafından doğrudan engellenir; HTTP sürümü yüklenemezse sayfa o kaynak olmadan çalışır, bu da genellikle gözle görülür bir şeyi bozar. Pasif mixed content ise büyük ölçüde görsel, ses ve videodan oluşur ve sayfayı yeniden yazamadığı için daha düşük riskli sayılır; ancak güncel Chrome sürümleri bu istekleri önce sessizce HTTPS'e yükseltmeye çalışır, yükseltme başarısız olursa engeller. Her iki durumda da güvenli olmayan içerik uyarısı, sayfada hâlâ http:// adresine işaret eden bir şey olduğunu gösterir. Her iki kategori hakkında daha teknik bir kaynak için MDN'in mixed content dokümantasyonuna bakabilirsiniz.
Karışık İçerik Uyarısı Kilit Simgesini ve Sayfayı Nasıl Bozar?
Tarayıcı mixed content'i engellediği veya işaretlediği anda iki şey birden olur. Adres çubuğundaki bağlantı göstergesi geriler: ziyaretçiler düz bir kilit simgesi yerine bir uyarı simgesi görebilir, tarayıcının kendi güvenlik panelinde bağlantının yalnızca kısmen güvenli olduğu belirtilir. Bu da bir sertifika kurmanın asıl amacını zayıflatır — HTTPS'e geçmenin sebebi tam olarak ziyaretçilere özel ve doğrulanmış bir bağlantı sunmaktır; temel bilgiler için SSL/TLS'in ne işe yaradığı rehberimize bakabilirsiniz.
İkinci etki kozmetik değil, işlevseldir. Engellenen aktif içerik, engellenen davranış demektir: HTTP üzerinden gelen bir stil dosyası uygulanmaz, bu yüzden sayfanın bazı kısımları stilsiz görünür; HTTP üzerinden gelen bir script çalışmaz, bu yüzden bir slider, canlı destek widget'ı veya ödeme formu sıradan bir ziyaretçiye hiçbir hata göstermeden sessizce çalışmayı durdurabilir — bunu yalnızca tarayıcı konsolunu açan biri görür. Mixed content'in kendisi HTTPS'in arama sıralamalarını nasıl etkilediğini doğrudan değiştirmez, ama bozuk görünen veya güvenlik uyarısı veren bir sayfa, HTTPS'in korumayı amaçladığı güven sinyalleriyle ters yönde çalışır.
Mixed Content Hatası Nasıl Tespit Edilir?
Bir mixed content uyarısını düzeltmeden önce, onu tetikleyen her şeyin tam listesine ihtiyacınız var. Çoğu site için üç yöntem yeterlidir:
- Tarayıcı konsolunu açın. Chrome, Firefox veya Edge'de geliştirici araçlarını (F12) açın ve sayfayı Console sekmesinde yeniden yükleyin. Engellenen veya yükseltilen her istek, genellikle HTTP üzerinden istenen tam adresle birlikte tek tek listelenir — zaten şüphelendiğiniz bir sayfada neler olduğunu görmenin en pratik yoludur.
- Sayfa kaynağını görüntüleyin. Oluşturulan HTML içinde
http://ifadesini arayın — bu, henüz konsolda uyarı tetiklemeden yüklenen görsel etiketlerini, sabit kodlanmış script ve link etiketlerini, kendi alan adınıza veya üçüncü taraflara ait düz HTTP referanslarını da yakalar. - Tüm siteyi tarayın. Tek bir sayfa nadiren tüm resmi anlatır. Bir tarayıcı aracı (veya site geneli arama-değiştirme aracı) çalıştırmak, sitede sertifika bile yokken kaydedilmiş eski bağlantıları, gömülü medyaları ve CDN referanslarını her şablon, yazı ve sayfada ortaya çıkarır.
İlerledikçe basit bir liste tutun — sayfa adresi, kaynak türü ve bunun kendi varlığınız mı yoksa üçüncü taraf mı olduğu — çünkü çözüm her durumda farklıdır.
Veritabanı ve Temadaki Sabit HTTP Adreslerini Düzeltin
Yerleşik bir sitedeki mixed content'in çoğu, site henüz sertifikaya sahip olmadan http:// olarak kaydedilmiş ve hiç güncellenmemiş adreslerden gelir. WordPress gibi veritabanı tabanlı bir CMS'te bu genellikle site adresinin, görsel bağlantılarının ve gömülü linklerin yalnızca şablon dosyalarında değil, doğrudan veritabanının içinde mutlak http:// adresi olarak saklandığı anlamına gelir — bu yüzden sadece temayı güncellemek sorunu çözmez.
Önce veritabanınızı ve dosyalarınızı yedekleyin, ardından genel hatlarıyla şu şekilde ilerleyin: sitenin ayarlarında kayıtlı adresi HTTPS sürümüne güncelleyin, ardından veritabanında http://siteniz.com ifadesini arayıp https://siteniz.com ile değiştirin — mümkünse düz metin arama-değiştirme yerine bu iş için yazılmış bir araç kullanın, çünkü WordPress ve benzeri platformlarda yaygın olan serileştirilmiş (serialized) veriler, düz metin değişimi kayıtlı metnin uzunluğunu değiştirdiğinde bozulabilir. Aynı taramayı üst bilgi, alt bilgi ve widget'lardaki sabit kodlanmış http:// referansları için tema ve eklenti dosyalarında da yapın.
Belirgin olanları düzelttikten sonra siteyi yeniden tarayın: veritabanındaki ilk geçiş genellikle mixed content uyarısının büyük kısmını çözer, ama gömülü yazı içerikleri ve özel alanlar genellikle ikinci bir bakış gerektirir.
Üçüncü Taraf Gömülü İçerikleri ve CDN Varlıklarını Düzeltin
Her mixed content kendi veritabanınızdan gelmez. Video oynatıcıları, harita, yazı tipi, analitik etiketi ve reklam script'leri için gömme kodları genellikle yıllar önce kopyalanır ve bir daha hiç gözden geçirilmez; kod parçası http:// içeriyorsa, sitenin geri kalanı ne kadar temiz olursa olsun bir uyarı tetikler. Her üçüncü taraf sağlayıcının güncel gömme talimatlarına dönüp HTTPS sürümüyle değiştirin — neredeyse her yaygın servis yıllardır HTTPS destekliyor, bu yüzden bu genellikle kopyala-yapıştır kadar basit bir düzeltmedir.
Aynısı kendi görsellerinizi, script'lerinizi veya stil dosyalarınızı sunan bir CDN için de geçerlidir: HTTPS'i otomatik olarak devraldığını varsaymak yerine CDN'in yapılandırmasını veya varlık adreslerini kontrol edin. Adresi kendiniz kontrol ettiğiniz yerlerde tam bir https:// adresi veya göreli (relative) bir yol tercih edin (http://siteniz.com/assets/style.css yerine /assets/style.css) — göreli veya protokole uyan bir adres, alan adı taşınsa veya bir takma ada bağlansa bile bir daha mixed content'e dönüşemez.
Güvenlik Ağı Olarak CSP upgrade-insecure-requests Kullanın
Bulabildiğiniz her şeyi düzelttikten sonra, upgrade-insecure-requests adlı bir İçerik Güvenliği Politikası (CSP) yönergesi bir güvenlik ağı görevi görür: sayfadaki kalan her http:// isteğini engellemek veya bir uyarı bırakmak yerine, göndermeden önce tarayıcının otomatik olarak https://'e çevirmesini sağlar. HTTPS üzerinde gerçekten var olmayan bir kaynağı düzeltmez, ama var olan her şeyi sessizce temizler.
Bir Nginx sunucusunda bunu bir yanıt başlığı olarak ekleyin:
add_header Content-Security-Policy "upgrade-insecure-requests" always;
Sunucu yapılandırmasını düzenleyemiyorsanız, <head> içine eşdeğer HTML meta etiketini ekleyin:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Bunu yukarıdaki arama-değiştirme çalışmasının yerine değil, bir yedek olarak düşünün — kalan referansları kaldırmaz, üzerini örter; ve HTTPS üzerinde hiç sunulmamış bir üçüncü taraf kaynağı için hiçbir şey yapmaz.
Mixed Content Temizlendikten Sonra HSTS Ekleyin
HSTS (HTTP Strict Transport Security), bir ziyaretçi http:// yazsa veya eski bir bağlantıya tıklasa bile tarayıcının alan adınıza yalnızca HTTPS üzerinden bağlanmasını söyler. Bu iyi bir son adımdır, ama yalnızca mixed content gerçekten temizlendikten sonra — HSTS bir ziyaretçinin sertifika uyarısını tıklayıp geçmesini engelleyebilir, bu yüzden sitenizin bir kısmı hâlâ http:// varlıklarına işaret ederken HSTS'i açmak, siz düzeltmeyi bitirene kadar ziyaretçilerin sahip olduğu tek geçici çözümü de ortadan kaldırır.
HTTPS'i düzgün çalıştırmanın sertifika ve sunucu yapılandırması tarafı için — zincir kurulumu, HTTP'den HTTPS'e yönlendirme ve HSTS'i etkinleştirme — SSL sertifikası nasıl kurulur rehberimize bakın. Mixed content uyarılarının yanında başka tarayıcı güvenlik mesajları da görüyorsanız, yaygın SSL sertifikası hatalarını anlattığımız yazımıza göz atın.
Mixed Content Düzeltme Kontrol Listesi
Bir sonraki mixed content uyarısında şu sırayla ilerleyin:
- Tarayıcı konsolunu açın ve engellenen veya yükseltilen her isteği not edin.
- Veritabanında ve tema/şablon dosyalarında sabit kodlanmış
http://adreslerini arayın vehttps://ile güncelleyin — önce yedek alın. - Üçüncü taraf gömme kodlarını ve CDN referanslarını HTTPS sürümleriyle güncelleyin.
- Bundan sonra kontrol ettiğiniz her şey için göreli veya HTTPS adresleri tercih edin.
- Kaçırdığınız bir şey için güvenlik ağı olarak
upgrade-insecure-requestsekleyin. - Konsolun temiz olduğunu doğrulamak için siteyi yeniden tarayın.
- Ancak bundan sonra HSTS'i etkinleştirin.
Her Sayfayı Tamamen HTTPS'te Tutmak
Bir mixed content uyarısı neredeyse her zaman sertifikanın kendisiyle değil, veritabanında, bir tema dosyasında veya üçüncü taraf bir gömme kodunda kalmış eski bir http:// referansıyla ilgilidir. Tarayıcı konsolu ve tüm site taraması ile her örneği bulun, önce veritabanı ve temayı düzeltin, üçüncü taraf gömme kodlarını ve CDN varlıklarını güncelleyin, kalanlar için CSP'nin upgrade-insecure-requests'ini güvenlik ağı olarak kullanın ve HSTS'i yalnızca konsol temizlendikten sonra ekleyin.
Uyarının bir kısmı hiç kendi sertifikası verilmemiş bir alt alan adına veya yeni eklenen bir siteye kadar uzanıyorsa, SSLCipher'ın SSL sertifikası seçeneklerine göz atabilir, sadece kapsanması gereken bir alan adı için basit bir DV SSL sertifikası ile başlayabilirsiniz.
Sık sorulan sorular
01Aktif ve pasif mixed content arasındaki fark nedir?
Aktif mixed content; script, stil dosyası, iframe gibi sayfanın davranışını veya görünümünü değiştirebilen kaynakları kapsar ve tarayıcılar, güvenli bir sayfada güvensiz bir script'in çalışma riskini almamak için bunları doğrudan engeller. Pasif mixed content ise büyük ölçüde görsel, ses ve videodan oluşur; tarayıcılar bunu daha düşük riskli sayar ve güncel Chrome sürümleri bu istekleri önce HTTPS'e yükseltmeye çalışır, yalnızca yükseltme başarısız olursa engeller.
02SSL sertifikası kurduğum halde neden hâlâ mixed content hatası alıyorum?
Bir SSL sertifikası alan adınız için HTTPS'i kullanılabilir hale getirir, ama sayfalarınızın zaten referans verdiği her adresi yeniden yazmaz. Görseller, script'ler veya gömme kodları sertifika kurulmadan önce http:// olarak kaydedildiyse, siz onları güncelleyene kadar güvensiz sürüme işaret etmeye devam eder — sertifikanın yeniliği bunu değiştirmez.
03Mixed content'i veritabanını elle düzenlemek yerine bir WordPress eklentisiyle düzeltebilir miyim?
Evet — birçok WordPress eklentisi, düz metin arama-değiştirmenin bozabileceği serileştirilmiş veri durumları dahil, bu değişimi sizin için yapar. Hangi yöntemi kullanırsanız kullanın önce veritabanını yedekleyin ve ardından tarayıcı konsolunu tekrar kontrol edin, çünkü tek bir kaçırılmış referans uyarıyı yeniden tetiklemeye yeter.
04Mixed content SEO'yu etkiler mi?
Mixed content'in kendisi doğrudan bir sıralama faktörü değildir, ama güvenlik uyarısı veren veya görsel olarak bozuk görünen bir sayfa, HTTPS'e geçişin desteklemesi gereken güven sinyalleriyle ters yönde çalışır. Engellenen script ve stil dosyaları sayfanın nasıl göründüğünü veya çalıştığını da değiştirebileceğinden, dolaylı bir SEO etkisi düşünülmeden önce bile ziyaretçi deneyimi için düzeltilmesi değerlidir.