WordPress Güvenliğini Artırın: Kod ile Zorunlu Güçlü Şifre Politikası Oluşturma

WordPress sitelerin hacklenmesinin en büyük nedenlerinden biri, tahmin edilmesi kolay ve zayıf şifrelerdir. Kullanıcılarınıza “Güçlü şifre kullanın” demek maalesef her zaman yeterli olmaz; bunu sistemsel olarak zorunlu kılmanız gerekir.

Bugün sizlerle, herhangi bir ağır eklenti kullanmadan, Must-Use (MU) Plugin yapısıyla sitenize nasıl “Askeri Düzeyde” bir şifre politikası entegre edebileceğinizi paylaşacağım.

Neden Varsayılan WordPress Ayarları Yetersiz?
WordPress varsayılan olarak kullanıcıyı güçlü şifre seçmeye teşvik eder ancak zorlamaz. Kullanıcı isterse “Zayıf şifre kullanmayı onayla” kutucuğunu işaretleyip 123456 gibi şifrelerle sisteme kayıt olabilir.

Geliştirdiğim bu kod parçacığı ile bu açığı tamamen kapatıyoruz.

Bu Kod Ne İşe Yarıyor?
Aşağıdaki kod parçacığını sitenize eklediğinizde, Kayıt, Profil Güncelleme ve Şifre Sıfırlama ekranlarında şu kurallar devreye girer:

  1. Minimum 12 Karakter: Kısa şifrelere son.
  2. Karakter Çeşitliliği: En az bir büyük harf, bir küçük harf, bir rakam ve bir özel karakter zorunluluğu.
  3. Türkçe Karakter Desteği: Ğ, Ş, İ gibi harfler sistem tarafından doğru algılanır (Unicode uyumlu Regex).
  4. Akıllı Güvenlik: Şifre, kullanıcının kullanıcı adını veya e-posta adresinin giriş kısmını içeremez (Örn: ahmet@site.com kullanıcısı Ahmet123! şifresini alamaz).
  5. Devre Dışı Bırakılamaz: MU-Plugin (Must Use) olarak eklendiği için yönetim panelinden yanlışlıkla kapatılamaz.

Kurulum: Adım Adım
Bu özelliği sitenize eklemek için herhangi bir eklenti yüklemenize gerek yok. Sadece FTP erişimi yeterlidir.

Adım 1: Bilgisayarınızda infobilisim-sifre-politikasi.php adında bir dosya oluşturun yada buradan indirin.
Adım 2: Aşağıdaki kodları bu dosyanın içine yapıştırın.
Adım 3: Dosyayı FTP ile /wp-content/mu-plugins/ klasörüne yükleyin. (Eğer mu-plugins klasörü yoksa kendiniz oluşturun).

İşte sihirli kodlar:

<?php
/*
Plugin Name: Zorunlu Güçlü Şifre Politikası (MU)
Description: Tüm kullanıcılar için (Kayıt, Güncelleme, Sıfırlama) güçlü şifre kurallarını zorunlu kılar.
Version: 1.3
Author: Vedat Aydar
Author URI: https://buymeacoffee.com/vedataydar
Company: INFO Bilişim Yazılım ve İnternet Hizmetleri
*/

// Dosyaya doğrudan erişimi engelle
if ( ! defined( 'ABSPATH' ) ) {
exit;
}

/**
* Yardımcı Fonksiyon: Şifre Politikası Kontrolü
*/
function enforce_strong_password_policy( $errors, $password, $username = '', $email = '' ) {

if ( empty( $password ) ) { return; }

// Helper: String Fonksiyonları (mbstring desteği yoksa fallback)
if ( function_exists( 'mb_strlen' ) ) {
$length = mb_strlen( $password );
} else {
$length = strlen( $password );
}

$password_lower = function_exists( 'mb_strtolower' ) ? mb_strtolower( $password ) : strtolower( $password );
$username_lower = function_exists( 'mb_strtolower' ) ? mb_strtolower( $username ) : strtolower( $username );

$str_contains = function( $haystack, $needle ) {
if ( empty( $needle ) ) return false;
if ( function_exists( 'mb_strpos' ) ) { return mb_strpos( $haystack, $needle ) !== false; }
return strpos( $haystack, $needle ) !== false;
};

// 1. Minimum 12 karakter
if ( $length < 12 ) {
$errors->add( 'password_too_short', __( 'Şifre en az 12 karakter olmalıdır.' ) );
}

// 2. Büyük Harf, Küçük Harf, Rakam ve Özel Karakter Kontrolleri (Unicode Uyumlu)
if ( ! preg_match( '/\p{Lu}/u', $password ) ) {
$errors->add( 'password_no_uppercase', __( 'Şifre en az bir büyük harf içermelidir.' ) );
}
if ( ! preg_match( '/\p{Ll}/u', $password ) ) {
$errors->add( 'password_no_lowercase', __( 'Şifre en az bir küçük harf içermelidir.' ) );
}
if ( ! preg_match( '/[0-9]/', $password ) ) {
$errors->add( 'password_no_number', __( 'Şifre en az bir rakam içermelidir.' ) );
}
if ( ! preg_match( '/[^\p{L}\p{N}]/u', $password ) ) {
$errors->add( 'password_no_special', __( 'Şifre en az bir özel karakter (örn: ! @ # $ % *) içermelidir.' ) );
}

// 3. Kullanıcı Adı ve E-posta Kontrolü
if ( ! empty( $username ) && $str_contains( $password_lower, $username_lower ) ) {
$errors->add( 'password_contains_username', __( 'Şifre kullanıcı adınızı içermemelidir.' ) );
}

if ( ! empty( $email ) ) {
$email_parts = explode( '@', $email );
$local_part = isset( $email_parts[0] ) ? $email_parts[0] : '';
$local_part_lower = function_exists( 'mb_strtolower' ) ? mb_strtolower( $local_part ) : strtolower( $local_part );

if ( ! empty( $local_part ) && mb_strlen( $local_part ) > 3 ) {
if ( $str_contains( $password_lower, $local_part_lower ) ) {
$errors->add( 'password_contains_email', __( 'Şifre e-posta adresinizin giriş kısmını içermemelidir.' ) );
}
}
}
}

// Hook'lar: Profil Güncelleme, Şifre Sıfırlama ve Yeni Kayıt
add_filter( 'user_profile_update_errors', function( $errors, $update, $user ) {
if ( isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
$password = wp_unslash( $_POST['pass1'] );
$form_email = isset( $_POST['email'] ) ? $_POST['email'] : $user->user_email;
enforce_strong_password_policy( $errors, $password, $user->user_login, $form_email );
}
return $errors;
}, 10, 3 );

add_action( 'validate_password_reset', function( $errors, $user ) {
if ( isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
$password = wp_unslash( $_POST['pass1'] );
enforce_strong_password_policy( $errors, $password, $user->user_login, $user->user_email );
}
}, 10, 2 );

add_filter( 'registration_errors', function( $errors, $sanitized_user_login, $user_email ) {
if ( isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
$password = wp_unslash( $_POST['pass1'] );
enforce_strong_password_policy( $errors, $password, $sanitized_user_login, $user_email );
}
return $errors;
}, 10, 3 );

add_filter( 'password_hint', function( $hint ) {
return __( 'Şifre en az 12 karakter olmalı; büyük harf, küçük harf, rakam ve özel karakter içermelidir.' );
} );

Artık siteniz, üyelerinizi ve yöneticilerinizi daha güvenli şifreler oluşturmaya zorlayacak. Bu basit önlem, “Brute Force” (Kaba Kuvvet) saldırılarına karşı sitenizi %90 oranında daha dirençli hale getirir.

Bir sonraki yazımda görüşmek üzere, güvenli kodlamalar!

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

Bir yanıt yazın

10 Ocak 2026

GTranslate Eklentisinde Dil Değiştirirken Geri Tuşu Sorunu ve JS ile Kalıcı Çözüm

GTranslate, WordPress sitelerde hızlı ve pratik çok dilli yapı kurmak için sıkça kullanılan bir eklentidir. Ancak eklentinin ücretsiz sürümünde, dil değiştirildikten sonra tarayıcı geri tuşu kullanıldığında […]
29 Aralık 2025

Sitenizin Arka Kapısını Kilitleyin: xmlrpc.php Tehlikesi ve Çözümü

WordPress sitenizi kurdunuz, temanızı seçtiniz ve güvenlik eklentilerinizi yüklediniz. Peki ya sitenizin arka kapısı, yani xmlrpc.php ne durumda? Çoğu site sahibinin varlığından bile haberdar olmadığı, ancak […]
21 Aralık 2025

WooCommerce için Ülkeye Göre Otomatik Para Birimi Değiştirme (Manuel Fiyat)

E-ticaret sitelerinde yurt dışına satış yaparken en büyük dertlerden biri fiyatlandırmadır. Piyasadaki çoğu “Currency Switcher” (Para Birimi Değiştirici) eklentisi, fiyatı o anki kura göre otomatik çarpar. […]