WordPress Güvenliği: Yazar (Author) Arşivlerini Neden ve Nasıl Kapatmalısınız?
WordPress, dünyanın en popüler içerik yönetim sistemi olmasının getirdiği avantajların yanında, kötü niyetli yazılımların ve siber saldırganların da bir numaralı hedefi konumundadır. Birçok web site sahibi, karmaşık güvenlik duvarları ve şifreleme yöntemlerine odaklanırken, sitenin kapısını ardına kadar açık bırakan çok basit bir detayı gözden kaçırır: Yazar (Author) Arşivleri.
Bugün INFO Bilişim olarak, sitenizin en kritik bilgilerinden biri olan “Yönetici Kullanıcı Adını” nasıl koruyacağınızı ve bunu kendi yazacağımız ufak bir eklenti ile nasıl çözeceğimizi adım adım inceleyeceğiz.
Yazar (Author) Arşivleri Neden Ciddi Bir Güvenlik Açığıdır?
WordPress’in varsayılan yapısında, sitenizin sonuna /?author=1 parametresini ekleyerek arama çubuğuna yazan herhangi biri, doğrudan o ID’ye sahip kullanıcının (genellikle kurucu/yönetici) arşiv sayfasına yönlendirilir.
Bu yönlendirme sonucunda tarayıcının adres çubuğu şu şekle büşür:
siteniz.com/author/yonetici-kullanici-adi/
İşte bu noktada saldırgan, sitenizin en önemli anahtarlarından birini ele geçirmiş olur. Bu durumun yarattığı riskler şunlardır:
- Brute Force (Kaba Kuvvet) Saldırılarına Davetiye: Saldırgan, giriş yapmak için gereken iki bilgiden birini (kullanıcı adını) zahmetsizce bulmuştur. Artık tek yapması gereken, bot ağlarını kullanarak şifrenizi tahmin etmeye çalışmaktır.
- Kimlik Avı (Phishing) Riskleri: Sitenizde yetkili görünen kişilerin isimlerinin tespit edilmesi, sosyal mühendislik saldırıları için zemin hazırlar.
- Gereksiz Sunucu Yükü: Otomatik botların yazar sayfalarını sürekli taraması, sunucu kaynaklarınızı tüketerek sitenizin yavaşlamasına neden olabilir.
Çözüm: Kendi “Yazar Kapatıcı” Eklentimizi Yazıyoruz
Bu açığı kapatmanın en temiz yolu, yazar arşivlerine yapılan istekleri yakalayıp, ziyaretçiyi sitenin anasayfasına veya bir 404 sayfasına yönlendirmektir. Bu işlemi temanızın functions.php dosyasına kod ekleyerek yapabilirsiniz, ancak tema değiştirdiğinizde bu ayar kaybolacaktır.
Bu nedenle, her zaman aktif kalacak ve sisteme yük bindirmeyecek özel bir mini eklenti oluşturmak en profesyonel yaklaşımdır.
Adım Adım Eklenti Kurulumu
Bilgisayarınızda infobilisim-author-kapatici.php adında bir dosya oluşturun ve aşağıdaki kodları içine yapıştırın:
<?php
/**
* Plugin Name: INFO Bilişim - Yazar (Author) Kapatıcı
* Plugin URI: https://infobilisim.com
* Description: Author arşiv sayfalarını kapatır. Kullanıcıları admin panelinden seçeceğiniz üzere 404 sayfasına, anasayfaya veya özel bir URL'ye yönlendirir.
* Version: 1.2.0
* Author: Vedat Aydar
* Author URI: https://infobilisim.com
* License: GPL2
*/
// Doğrudan erişimi engelle
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* 1. Admin Ana Menüsüne Ayar Sayfası Ekle
*/
add_action( 'admin_menu', 'infobilisim_author_menu' );
function infobilisim_author_menu() {
// Ayarlar altı yerine doğrudan ana menüye ekliyoruz
add_menu_page(
'Yazar Kapatıcı Ayarları', // Sayfa Başlığı
'Yazar Kapatıcı', // Menü Başlığı
'manage_options', // Yetki
'infobilisim-author-settings', // Menü Slug
'infobilisim_author_settings_page',// Çağrılacak Fonksiyon
'dashicons-hidden', // İkon (Gizliliği/Kapatmayı simgeleyen ikon)
80 // Menüdeki konumu
);
}
/**
* 2. Ayarları Kaydetme (Settings API)
*/
add_action( 'admin_init', 'infobilisim_author_settings_init' );
function infobilisim_author_settings_init() {
register_setting( 'infobilisim_author_plugin_page', 'infobilisim_author_settings' );
add_settings_section(
'infobilisim_author_plugin_page_section',
'Yönlendirme Ayarları',
'__return_empty_string',
'infobilisim_author_plugin_page'
);
add_settings_field(
'infobilisim_author_redirect_type',
'Yönlendirme Türü',
'infobilisim_author_redirect_type_render',
'infobilisim_author_plugin_page',
'infobilisim_author_plugin_page_section'
);
add_settings_field(
'infobilisim_author_custom_url',
'Özel URL (Sadece "Özel URL" seçiliyse geçerlidir)',
'infobilisim_author_custom_url_render',
'infobilisim_author_plugin_page',
'infobilisim_author_plugin_page_section'
);
}
// Yönlendirme Türü Radyo Butonları
function infobilisim_author_redirect_type_render() {
$options = get_option( 'infobilisim_author_settings' );
$type = isset( $options['infobilisim_author_redirect_type'] ) ? $options['infobilisim_author_redirect_type'] : '404';
?>
<div class="infobilisim-radio-group">
<label><input type='radio' name='infobilisim_author_settings[infobilisim_author_redirect_type]' value='404' <?php checked( $type, '404' ); ?>> 404 Sayfası Bulunamadı Hatası Göster</label><br>
<label><input type='radio' name='infobilisim_author_settings[infobilisim_author_redirect_type]' value='home' <?php checked( $type, 'home' ); ?>> Anasayfaya Yönlendir (301)</label><br>
<label><input type='radio' name='infobilisim_author_settings[infobilisim_author_redirect_type]' value='custom' <?php checked( $type, 'custom' ); ?>> Özel URL'ye Yönlendir (301)</label>
</div>
<?php
}
// Özel URL Giriş Alanı
function infobilisim_author_custom_url_render() {
$options = get_option( 'infobilisim_author_settings' );
$custom_url = isset( $options['infobilisim_author_custom_url'] ) ? $options['infobilisim_author_custom_url'] : '';
?>
<input type='url' name='infobilisim_author_settings[infobilisim_author_custom_url]' value='<?php echo esc_attr( $custom_url ); ?>' placeholder='https://ornek.com' class='regular-text infobilisim-input'>
<p class="description">Yönlendirme türü olarak "Özel URL" seçtiyseniz, gitmesini istediğiniz tam adresi buraya yazın.</p>
<?php
}
/**
* 3. Ayar Sayfasının Görünümü (HTML ve INFO Bilişim Kurumsal CSS)
*/
function infobilisim_author_settings_page() {
?>
<style>
.infobilisim-wrap {
max-width: 800px;
margin: 20px 20px 20px 0;
background: #ffffff;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
padding: 30px;
border: 1px solid #e2e4e7;
}
.infobilisim-header {
display: flex;
align-items: center;
border-bottom: 2px solid #f0f0f1;
padding-bottom: 20px;
margin-bottom: 30px;
}
.infobilisim-logo {
background-color: #0052cc; /* Kurumsal Mavi Tonu */
color: #ffffff;
font-weight: 700;
font-size: 22px;
padding: 10px 20px;
border-radius: 6px;
margin-right: 20px;
letter-spacing: 0.5px;
box-shadow: 0 2px 6px rgba(0, 82, 204, 0.3);
}
.infobilisim-title {
font-size: 24px;
font-weight: 600;
color: #1d2327;
margin: 0;
}
.infobilisim-radio-group label {
font-size: 14px;
color: #3c434a;
line-height: 2;
}
.infobilisim-input {
border: 1px solid #8c8f94 !important;
border-radius: 4px !important;
padding: 5px 10px !important;
box-shadow: none !important;
}
.infobilisim-input:focus {
border-color: #0052cc !important;
box-shadow: 0 0 0 1px #0052cc !important;
}
.infobilisim-wrap .button-primary {
background: #0052cc !important;
border-color: #0052cc !important;
box-shadow: none !important;
text-shadow: none !important;
padding: 5px 20px !important;
font-size: 14px !important;
border-radius: 4px !important;
}
.infobilisim-wrap .button-primary:hover {
background: #0043a6 !important;
border-color: #0043a6 !important;
}
</style>
<div class="wrap">
<form action="options.php" method="post">
<?php
settings_fields( 'infobilisim_author_plugin_page' );
do_settings_sections( 'infobilisim_author_plugin_page' );
submit_button( 'Ayarları Kaydet' );
?>
</form>
</div>
</div>
<?php
}
/**
* 4. Ön Yüz (Frontend) Yönlendirme İşlemi
*/
add_action( 'template_redirect', 'infobilisim_disable_author_archives_action' );
function infobilisim_disable_author_archives_action() {
// Sadece yazar (author) arşiv sayfalarında çalış
if ( is_author() ) {
$options = get_option( 'infobilisim_author_settings' );
$type = isset( $options['infobilisim_author_redirect_type'] ) ? $options['infobilisim_author_redirect_type'] : '404';
if ( $type === 'home' ) {
// Anasayfaya yönlendir
wp_redirect( home_url(), 301 );
exit;
} elseif ( $type === 'custom' ) {
// Özel URL'ye yönlendir
$custom_url = isset( $options['infobilisim_author_custom_url'] ) ? $options['infobilisim_author_custom_url'] : '';
// Eğer URL boş bırakılmışsa güvenlik amaçlı anasayfaya at
if ( empty( $custom_url ) ) {
$custom_url = home_url();
}
wp_redirect( esc_url( $custom_url ), 301 );
exit;
} else {
// Varsayılan: 404 Sayfası
global $wp_query;
$wp_query->set_404();
status_header( 404 );
nocache_headers();
$template_404 = get_query_template( '404' );
if ( $template_404 ) {
include( $template_404 );
}
exit;
}
}
}
Kodun Çalışma Mantığı
is_author(): WordPress’in bu yerleşik fonksiyonu, ziyaretçinin bir yazar profiline girmeye çalışıp çalışmadığını kontrol eder.
$wp_query->set_404(): Eğer istek bir yazar sayfasına yapılmışsa, WordPress’e bu sayfanın “bulunamadığını” söyler.
nocache_headers(): Güvenlik amacıyla bu yönlendirmenin tarayıcı önbelleğine alınmasını engeller.
Bu dosyayı kaydedip sitenizin wp-content/plugins/ dizinine yükleyin ve WordPress panelinizden aktifleştirin. Artık kullanıcı adlarınız güvende!
Dijital Varlıklarınızı Şansa Bırakmayın
Sadece birkaç satır kodla sitenizi olası binlerce saldırıdan korudunuz. Ancak web güvenliği sürekli evrilen bir süreçtir ve tek bir önlem asla yeterli değildir.
Siz işinize ve büyümeye odaklanırken, teknik altyapınızın uzman ellerde olduğundan emin olmak ister misiniz? INFO Bilişim olarak, WordPress güvenliği, özel eklenti geliştirme ve yüksek performanslı kurumsal çözümlerimizle yanınızdayız.
Projeleriniz için profesyonel destek almak veya sisteminizin güvenlik analizini yaptırmak isterseniz, hemen bizimle iletişime geçin. Bu rehber hakkındaki düşüncelerinizi ve karşılaştığınız durumları aşağıdaki yorumlar bölümünde bizimle paylaşmayı unutmayın!
Kodlar Kodlayana, Kahveler Bana! ☕
Burada paylaştığım içerikler projelerinde işine yaradıysa veya sana zaman kazandırdıysa, bir kahve ısmarlayarak desteğini gösterebilirsin. Bu destek, daha fazla içerik üretmem için motive edici olacaktır.
☕ Bana Bir Kahve Ismarla