WordPress'e her giriş yaptığınızda tarayıcınıza bir oturum çerezi bırakılır. Bu çerez, bir sonraki isteğinizde WordPress'in "bu ziyaretçi az önce parolasıyla giriş yapan yönetici" olduğunu tekrar tekrar parola sormadan anlamasını sağlar. Peki bu çerez taklit edilemesin, çalınmışsa bile başka bir sitede ya da başka bir kurulumda işe yaramasın diye ne yapılır? İşte tam bu noktada wp-config.php dosyasındaki sekiz satırlık güvenlik anahtarları devreye girer. Bu anahtarlar oturum çerezlerini imzalar ve şifreler; onlar olmadan WordPress'in "beni hatırla" mekanizması kâğıttan bir kilide dönüşür.
Bu rehberde güvenlik anahtarlarının (İngilizce belgelerde geçtiği adla salt keys) tam olarak ne işe yaradığını, oturum çerezlerini nasıl koruduğunu ve en önemlisi bunları güvenli biçimde nasıl yenileyeceğinizi kıdemli bir sistem yöneticisinin bakış açısıyla adım adım anlatacağım. Anahtarları yenilemenin tek bir yan etkisi vardır: o an açık olan bütün oturumlar sonlanır. Çoğu kişi bunu bir zahmet gibi görse de aslında en güçlü silahlarınızdan biridir; bir saldırıdan sonra çalınmış çerezleri bir anda kullanılamaz hâle getirmenin en hızlı yolu budur. Aşağıda hem gerçek komutlar hem de kopyalayıp uygulayabileceğiniz örnekler bulacaksınız.
Güvenlik Anahtarları Nedir#
WordPress kurulumunuzda wp-config.php dosyasını açtığınızda, AUTH_KEY ile başlayan ve NONCE_SALT ile biten sekiz adet sabit tanımı görürsünüz. Bunlar rastgele üretilmiş, uzun karakter dizeleridir ve WordPress'in kriptografik işlemlerinde "gizli tuz" olarak kullanılır. Kriptografide "salt" (tuz), bir veriyi karma (hash) veya imza fonksiyonundan geçirirken araya eklenen, tahmin edilemez rastgele veridir. Aynı veriyi farklı tuzlarla işlerseniz sonuç tamamen değişir; işte bu yüzden iki farklı WordPress sitesinin çerezleri, kullanıcı adı ve parola aynı olsa bile birbiriyle uyumsuz olur.
Sekiz değer iki gruba ayrılır. AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY ve NONCE_KEY "anahtar" (key) rolünü üstlenir; AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT ve NONCE_SALT ise bu anahtarlarla birlikte kullanılan "tuz" değerleridir. Pratikte hepsini birlikte düşünmek yeterlidir; sekizi bir bütün olarak sitenizin oturum güvenliğinin bel kemiğidir. Tipik bir tanım şu görünüme sahiptir:
define('AUTH_KEY', 'x7#Km2@vRq9!pL4$zT8wYb1&nH6dJ3fG');
define('SECURE_AUTH_KEY', 'Q2wE5rT8yU1iO4pA7sD0fG3hJ6kL9zXc');
define('LOGGED_IN_KEY', 'zX9cV6bN3mK0lP7oI4uY1tR8eW5qA2sD');
define('NONCE_KEY', 'M1n2B3v4C5x6Z7l8K9j0H1g2F3d4S5a6');
define('AUTH_SALT', 'p0O9i8U7y6T5r4E3w2Q1a2S3d4F5g6H7');
define('SECURE_AUTH_SALT', 'L8k7J6h5G4f3D2s1A0z9X8c7V6b5N4m3');
define('LOGGED_IN_SALT', 'r5T4y3U2i1O0p9A8s7D6f5G4h3J2k1L0');
define('NONCE_SALT', 'v3B2n1M0k9L8j7H6g5F4d3S2a1Q0w9E8');
Bu değerler şifrelenmez ve şifrelenmemelidir; PHP'nin her istekte okuyabilmesi için düz metin olmaları gerekir. Bu yüzden güvenlikleri, dosyanın kendisinin okunamamasına bağlıdır. wp-config.php dosyasını korumakla ilgili daha geniş bir sertleştirme kontrol listesi için WordPress güvenliği rehberimize göz atabilirsiniz.
Salt Anahtarları Oturum Çerezlerini Nasıl Şifreler#
Bir kullanıcı yönetim paneline giriş yaptığında WordPress arka planda bir oturum çerezi hazırlar. Bu çerez basitçe "kullanıcı adı" ile "geçerlilik zamanı" bilgilerini içermez; bu bilgiler güvenlik anahtarlarıyla üretilen bir HMAC imzasıyla birlikte saklanır. HMAC, veriyi gizli bir anahtarla birleştirip karma değeri üreten bir yöntemdir; anahtarı bilmeyen biri geçerli bir imza üretemez. Böylece bir saldırgan çerezin içeriğini görse bile, kendi lehine değiştirilmiş (örneğin yetkisini yönetici yapan) yeni bir çerezi geçerli imzayla üretemez, çünkü sunucudaki gizli anahtarı bilmez.
Sürecin özünü şöyle özetleyebiliriz:
giris:
- kullanici parolayla dogrulanir
- WordPress cerez icin token uretir
- token, salt anahtarlariyla HMAC ile imzalanir
- imzali cerez tarayiciya gonderilir
sonraki_istek:
- tarayici cerezi geri gonderir
- WordPress ayni salt anahtarlariyla imzayi yeniden hesaplar
- hesaplanan imza cerezdekiyle eslesirse oturum gecerli sayilir
- eslesmezse cerez reddedilir, kullanici cikis yapmis gibi davranilir
Bu tasarımın en kritik sonucu şudur: doğrulama tamamen anahtarlara bağlıdır. Anahtarları değiştirdiğiniz anda, eski anahtarlarla üretilmiş bütün imzalar artık uyuşmaz. Sunucu yeni anahtarlarla imzayı yeniden hesaplar, sonuç eski çereze yazılmış imzayla tutmaz ve çerez çöpe gider. İşte "anahtarları yenileyince herkes çıkış yapar" davranışının teknik nedeni budur. Farklı anahtar grupları (AUTH düz HTTP, SECURE_AUTH HTTPS, LOGGED_IN yalnızca oturum açık bilgisi, NONCE form ve bağlantı doğrulaması) farklı bağlamlarda kullanılır ama mantık hepsinde aynıdır.
Aşağıdaki tablo, güçlü anahtarların neyi engellediğini kısaca özetliyor:
| Senaryo | Zayıf ya da varsayılan anahtar | Güçlü ve rastgele anahtar |
|---|---|---|
| Çerez taklidi | İmza tahmin edilebilir, sahte çerez üretilebilir | İmza pratikte üretilemez |
| Çalınmış çerezin ömrü | Anahtar değişmedikçe süresiz kullanılabilir | Anahtar yenilenince anında geçersiz olur |
| Siteler arası çerez kullanımı | Aynı varsayılan tuz birden çok sitede geçerli olabilir | Her site benzersiz, çerez taşınamaz |
| Kaba kuvvetle çözme | Kısa/tahmin edilebilir dize kırılabilir | 64 karakterlik rastgele dize pratikte kırılamaz |
Yeni Anahtarlar Nasıl Üretilir#
WordPress ekibi bu iş için resmî ve ücretsiz bir üreteç sunar. https://api.wordpress.org/secret-key/1.1/salt/ adresini tarayıcıda açtığınızda, her seferinde kriptografik olarak güçlü sekiz define() satırı üretilir. Sayfayı her yenilediğinizde tamamen yeni bir set gelir; bu değerleri hiçbir yerde saklamaz, sunucunuza dönmesi gereken bir şey yoktur. Çıktı doğrudan wp-config.php içine yapıştırılmaya hazır biçimdedir.
Sunucuya erişiminiz varsa dışa bağımlı olmadan yerelde de üretebilirsiniz. curl ile aynı üreteçten çekebilir ya da OpenSSL ile kendiniz üretebilirsiniz:
# WordPress resmi ureteci ile (yapistirmaya hazir cikti)
curl -s https://api.wordpress.org/secret-key/1.1/salt/
# Tamamen yerel: tek bir 64 karakterlik rastgele anahtar
openssl rand -base64 48
# Sekiz anahtari da OpenSSL ile uretmek icin dongu
for key in AUTH_KEY SECURE_AUTH_KEY LOGGED_IN_KEY NONCE_KEY \
AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT; do
printf "define('%s', '%s');\n" "$key" "$(openssl rand -base64 48 | tr -d '\n')"
done
En pratik yol WP-CLI kuruluysa tek komuttur. wp config shuffle-salts komutu mevcut anahtarları güçlü yenileriyle değiştirir ve dosyayı sizin için düzenler:
# Mevcut sekiz anahtari yeni guvenli degerlerle degistirir
wp config shuffle-salts
# Once ne olacagini gormek isterseniz (dosyaya yazmadan cikti verir)
wp config shuffle-salts --dry-run
Anahtar üretiminde iki kurala dikkat edin. Birincisi, tek tırnak (') içeren bir dize kullanmayın; PHP söz dizimini bozar. WordPress'in kendi üreteci zaten tek tırnak kullanmaz, ama elle üretiyorsanız çıktıyı kontrol edin. İkincisi, aynı değeri birden fazla anahtarda tekrar kullanmayın; sekizinin de birbirinden bağımsız ve benzersiz olması gerekir.
Anahtarları wp-config.php'ye Yapıştırma#
Yeni anahtarlarınız hazır olduğunda, iş wp-config.php içindeki eski sekiz satırı yenileriyle değiştirmeye kalır. Dosyayı düzenlemeden önce mutlaka bir yedeğini alın; yanlış bir yapıştırma sitenin tamamını "beyaz ekran" hâline getirebilir. Sunucuda dosyayı bulup yedeklemek için:
# Once dosyanin yedegini al (web'den erisilemeyen bir yere)
cp /var/www/site/wp-config.php ~/wp-config.php.$(date +%F).bak
# Duzenlemek icin ac
nano /var/www/site/wp-config.php
Dosyada define('AUTH_KEY' ile başlayan bloğu bulun. Bu sekiz satırın tamamını seçip silin ve yerine yeni ürettiğiniz sekiz define() satırını yapıştırın. Blok genellikle "Authentication Unique Keys and Salts" başlıklı bir yorum satırının hemen altındadır. Yapıştırdıktan sonra satır sayısının yine sekiz olduğundan ve her satırın noktalı virgülle bittiğinden emin olun.
cPanel kullanıyorsanız komut satırına hiç girmenize gerek yok. cPanel Dosya Yöneticisi ile public_html içindeki wp-config.php dosyasına sağ tıklayıp "Edit" diyebilir, aynı sekiz satırı grafik arayüzde değiştirebilirsiniz. WordPress'i sıfırdan kuruyorsanız zaten kurulum sırasında anahtarlar otomatik üretilir; bu konudaki temiz kurulum adımlarını WordPress kurulumu rehberimizde bulabilirsiniz.
Değişiklikten sonra siteyi bir gizli sekmede açıp panele girmeyi deneyin. Eğer beyaz ekran görürseniz büyük ihtimalle bir tırnak ya da noktalı virgül kaymıştır; yedeğinizi geri yükleyip yeniden deneyin:
# Bir sorun cikarsa yedegi geri yukle
cp ~/wp-config.php.$(date +%F).bak /var/www/site/wp-config.php
Tüm Oturumları Sonlandırma ve Hack Sonrası Kullanım#
Anahtarları değiştirmenin en görünür etkisi, o an açık olan her oturumun sonlanmasıdır. Kendiniz dâhil, "beni hatırla" seçeneğiyle giriş yapmış herkes bir sonraki istekte çıkış yapmış olur ve yeniden parolayla giriş yapması gerekir. Normal şartlarda bu küçük bir rahatsızlıktır; ama bir güvenlik olayının ortasındaysanız tam olarak istediğiniz şeydir.
Şöyle bir durumu düşünün: sitenizin ele geçirildiğinden şüpheleniyorsunuz, saldırganın yönetici oturumu açtığını ve muhtemelen çerezini bir yerde tuttuğunu düşünüyorsunuz. Parolaları değiştirmek tek başına yetmeyebilir, çünkü zaten açılmış bir oturum çerezi parola değişse de bir süre daha geçerli kalabilir. Anahtarları yenilediğiniz an, saldırganın elindeki çerez de dâhil olmak üzere bütün oturumlar aynı anda ölür. Bu yüzden bir olaya müdahale sırasında sıralama önemlidir:
# Hack sonrasi temizlik sirasi (ozet)
# 1. Tum kullanici parolalarini sifirla
wp user reset-password --all --skip-email
# 2. Guvenlik anahtarlarini yenile -> tum oturumlar oldur
wp config shuffle-salts
# 3. Cekirdek dosyalarin butunlugunu dogrula
wp core verify-checksums
# 4. Eklenti ve temalari guncelle
wp plugin update --all && wp theme update --all
Bu adımların ayrıntılı bir olaya müdahale planına ihtiyaç duyarsanız, hacklenmiş bir siteyi baştan sona kurtarma sürecini ayrı bir konu olarak ele almak gerekir; ancak anahtar yenileme, o planın her zaman ilk üç adımından biridir. Saldırgan hâlâ arka kapı bırakmışsa yalnızca anahtar yenilemek yetmez, ama en azından ele geçmiş oturumları anında keser ve size temiz bir başlangıç noktası verir.
Bir de yönetici paneli üzerinden yapılabilecek pratik bir yöntem var. Yönetici olarak Kullanıcılar bölümünden ilgili profili açtığınızda, "Diğer tüm konumlardan çıkış yap" düğmesiyle o kullanıcının başka cihazlardaki oturumlarını tek tek kapatabilirsiniz. Bu, tüm siteyi etkilemeden belirli bir hesabı temizlemek için idealdir; anahtar yenileme ise topyekûn ve kesin çözümdür.
Anahtarları Düzenli Yenileme Alışkanlığı#
Güvenlik anahtarlarını yalnızca bir kriz anında değil, düzenli bir bakım kalemi olarak da düşünmek gerekir. Parolalarınızı belirli aralıklarla değiştirdiğiniz gibi, anahtarları da periyodik olarak yenilemek, farkında olmadan sızmış bir çerezin ömrünü doğal olarak kısaltır. Pratik bir hedef, anahtarları en az yılda bir yenilemek; yüksek riskli ya da çok kullanıcılı sitelerde bu süreyi üç aya kadar indirmektir.
Bu işi otomatikleştirebilirsiniz. WP-CLI ve cron birlikte kullanıldığında, anahtar yenileme tamamen elle müdahale gerektirmeyen bir göreve dönüşür. Aşağıdaki örnek, her ayın ilk günü gece yarısı anahtarları yeniler:
# crontab -e ile ekleyin
# Her ayin 1'inde 00:00'da salt anahtarlarini yenile
0 0 1 * * cd /var/www/site && wp config shuffle-salts >> /var/log/wp-salt.log 2>&1
Otomatik yenilemede tek dikkat edilecek nokta, yenileme anında oturumların kapanacağıdır. Bu yüzden yenilemeyi trafiğin en düşük olduğu saate koymak, kullanıcıları en az rahatsız eden yaklaşımdır. Bir e-ticaret sitesinde gündüz saatlerinde yapılan bir yenileme, sepet başında bekleyen müşterileri çıkışa zorlayabilir. Otomatik yenileme yapmadan önce iş modelinize göre bu dengeyi kurun.
Anahtar yenilemeyi daha geniş bir güvenlik rutininin parçası olarak görün. Aşağıdaki tablo, yenileme sıklığını risk düzeyine göre kaba bir rehber olarak veriyor:
| Site türü | Önerilen yenileme sıklığı | Ek öneri |
|---|---|---|
| Kişisel blog, düşük trafik | Yılda bir | Güncellemelerle birlikte |
| Kurumsal tanıtım sitesi | Altı ayda bir | İki faktörlü doğrulama ekleyin |
| Çok kullanıcılı üyelik sitesi | Üç ayda bir | Otomatik cron ile |
| Herhangi bir güvenlik olayı sonrası | Hemen | Parola sıfırlama ile birlikte |
Anahtarların yanı sıra sitenizi bir güvenlik duvarı katmanıyla korumak, kaba kuvvet ve bot saldırılarını daha kaynağında durdurur. Uygulama katmanı koruması için web uygulama güvenlik duvarı hizmetimizi, otomatik ve düzenli yedekler içinse yedekleme çözümlerimizi değerlendirebilirsiniz.
Sık Karşılaşılan Hatalar#
Anahtarları yenilerken en sık yaşanan sorun, yapıştırma sırasında bir tırnak işaretinin kaybolması ya da fazladan bir karakterin araya girmesidir. PHP söz dizimi buna hiç tolerans göstermez; tek bir hatalı karakter tüm sitenin çökmesine yeter. Bu yüzden düzenlemeden önce yedek almak, önerilen bir adım değil zorunlu bir alışkanlıktır. Değişiklikten sonra site açılmıyorsa ilk bakılacak yer bu bloktur.
İkinci yaygın hata, anahtarların yalnızca bir kısmını değiştirmektir. Sekiz anahtardan bazılarını yenileyip diğerlerini eski hâlde bırakmak çalışır ama tutarsız bir durum yaratır; en temizi hepsini birden yenilemektir. Üçüncüsü, birden çok sitede aynı wp-config.php şablonunu kopyalayıp anahtarları da beraberinde taşımaktır. Bu, iki sitenin çerez güvenliğini birbirine bağlar; her kurulum kendi benzersiz anahtar setine sahip olmalıdır. Bir siteyi klonluyor ya da taşıyorsanız, taşıma sonrası anahtarları mutlaka yenileyin; site taşıma sürecinde bu adımı atlamamak için site taşıma hizmetimiz bu tür ayrıntıları sizin yerinize halleder.
Sıkça Sorulan Sorular#
Güvenlik anahtarlarını değiştirince verilerim silinir mi#
Hayır, hiçbir içerik, yazı, kullanıcı ya da ayar kaybolmaz. Güvenlik anahtarları yalnızca oturum çerezlerini ve bazı geçici doğrulama verilerini imzalamak için kullanılır; veritabanınızdaki asıl içeriğe dokunmazlar. Değişikliğin tek görünür etkisi, o an açık olan tüm oturumların sonlanması ve herkesin yeniden giriş yapmak zorunda kalmasıdır. Bu yüzden anahtar yenileme, geri dönüşü olmayan bir işlem değil, güvenli ve tekrarlanabilir bir bakım adımıdır.
WordPress secret-key üreteci güvenli mi, ürettiği anahtarları saklar mı#
WordPress'in resmî üreteci her istekte sunucuda anlık olarak rastgele değerler üretir ve bunları hiçbir yerde kaydetmez. Ürettiği anahtarlar size döndükten sonra o değerlerin kaydı kalmaz; sayfayı yenilerseniz tamamen farklı bir set gelir. Yine de tereddüt ediyorsanız aynı işi sunucunuzda openssl rand ya da WP-CLI'nin shuffle-salts komutuyla dışa hiç bağımlı olmadan yapabilirsiniz. Sonuç kriptografik olarak aynı derecede güçlü olur.
Anahtarları ne sıklıkla yenilemeliyim#
Sıradan bir site için yılda bir yenileme makul bir alt sınırdır ve genellikle güncelleme bakımıyla aynı zamana denk getirilir. Çok kullanıcılı ya da yüksek riskli sitelerde bu süreyi üç aya kadar indirmek mantıklıdır. Bunun dışında, sitenizin ele geçirildiğinden en ufak bir şüphe duyduğunuzda beklemeden hemen yenileyin. Yenileme işlemi ucuz ve hızlıdır, bu yüzden kararsız kaldığınızda yenilemek her zaman daha güvenli tarafta kalmanızı sağlar.
Anahtarları değiştirdikten sonra tüm kullanıcılar neden çıkış yapıyor#
Çünkü WordPress her oturum çerezini mevcut anahtarlarla imzalar ve her istekte bu imzayı yeniden hesaplayıp karşılaştırır. Anahtarları değiştirdiğinizde, eski anahtarlarla üretilmiş imzalar yeni anahtarlarla hesaplananlarla artık uyuşmaz; sonuç olarak sunucu bu çerezleri geçersiz sayar ve kullanıcıyı çıkış yapmış gibi ele alır. Bu bir hata değil, tasarımın istenen bir sonucudur ve çalınmış çerezleri anında etkisiz kılmanın temelini oluşturur.
WP-CLI yoksa anahtarları nasıl yenilerim#
WP-CLI olmadan da işlem tamamen mümkündür. WordPress'in resmî secret-key üretecini tarayıcıda açıp ürettiği sekiz satırı kopyalar, ardından wp-config.php dosyasındaki eski sekiz satırla değiştirirsiniz. Dosyayı SSH ile nano gibi bir düzenleyicide ya da cPanel Dosya Yöneticisi üzerinden düzenleyebilirsiniz. Tek gereken, düzenlemeden önce dosyanın bir yedeğini almak ve yapıştırdığınız satırların söz dizimini bozmadığınızdan emin olmaktır.
Anahtarları yalnızca değiştirmek siteyi hacklenmekten kurtarır mı#
Tek başına yeterli değildir. Anahtar yenilemek, saldırganın elindeki oturum çerezlerini geçersiz kılar ve bu yüzden temizlik sürecinin önemli bir parçasıdır; ancak saldırgan siteye bir arka kapı, kötü amaçlı dosya ya da yeni bir yönetici hesabı bıraktıysa bunlar anahtar değişiminden etkilenmez. Bu nedenle anahtar yenileme, parola sıfırlama, çekirdek dosya doğrulaması, eklenti güncellemesi ve zararlı yazılım taraması gibi adımlarla birlikte bütüncül bir müdahalenin yalnızca bir halkasıdır.
Kapanış#
Güvenlik anahtarları, WordPress'in en sessiz ama en kritik bileşenlerinden biridir; çoğu zaman fark edilmezler, ta ki bir çerez çalınana ya da bir oturum ele geçene kadar. İyi haber şu ki bu anahtarları güçlü tutmak ve düzenli yenilemek dakikalar süren, teknik bilgisi düşük bir iştir. Yeni bir set üretin, wp-config.php içine yapıştırın, yedeğinizi hazır bulundurun ve yılda en az bir kez bu adımı tekrarlayın. Bir güvenlik olayı yaşadığınızda ise anahtar yenilemeyi ilk refleksleriniz arasına alın.
Clou.TR olarak WordPress sitenizin altyapısını baştan sona güvenli tutmanız için gerekli her katmanı sunuyoruz. Otomatik güncelleme ve optimize edilmiş sunucularıyla WordPress hosting paketlerimizden, uygulama katmanı saldırılarını durduran WAF korumamıza, düzenli yedekleme hizmetimize ve olası bir olayda yanınızda olan sunucu yönetimi ekibimize kadar tüm ihtiyaçlarınız için tek adrestesiniz. Güçlü anahtarlarla başlayın, sağlam bir altyapıyla devam edin.