WordPress Güvenlik Açığını Çözmenin En İyi 5 Yolu

Yayınlanan: 2020-02-01

Şu anda, WordPress web'in %33'ünü kapsıyor. Bu, kesinlikle daha fazla saldırganı ve bilgisayar korsanını çekecek çok sayıda kullanıcının kullandığı anlamına gelir. Bu nedenle, WordPress'te bir güvenlik açığına neden olan SQL Enjeksiyon saldırısı, Yeniden Yönlendirme saldırısı, CSRF saldırısı, XSS saldırısı vb. Gibi daha fazla tehdit ve saldırı vardır. Bu nedenle bu, WordPress'in güvenli olmadığı anlamına gelmez. WordPress'i güvenli hale getirmek için veri temizleme, veri doğrulama, veri kaçışı, nonce kullanma ve doğrulama, güvenli yeniden yönlendirme, kullanıcı yetenekleri vb. Ancak, WordPress'teki güvenlik açıkları onu güvensiz hale getirir. Öyleyse, WordPress Güvenlik Sorunlarını tartışalım.

Güvenlik açıkları WordPress'e de geliyor. Ama nasıl?

Bir yandan, WordPress güvenlik açığı nedeniyle büyük tehditler ve saldırılar var. Öte yandan, WordPress geliştirme sırasında kodumuzla bu saldırıların üstesinden gelmeli veya engellemeliyiz.

Bir WordPress geliştiricisi olmasanız bile, sitenize saldırmak için bilgisayar korsanlarını çeken büyük saldırıları öğrenebileceğiniz için gönderiyi okumanızı öneririz. Ayrıca, kötü kodlanmış eklentileri ve WordPress temalarını nasıl bileceğinizi de anlayacaksınız. Bir çevrimiçi mağaza işletiyorsanız, güvenli olan En İyi WooCommerce eklentilerine ve temalarına karar vermeniz faydalı olacaktır.

İçindekiler
1 WordPress Güvenlik Açıkları
2 Tehditler ve Saldırılar
2.1 WordPress Güvenlik Açığı – SQL Enjeksiyon Saldırısı
2.2 Veri Temizleme
2.2.1 Veri Temizleme örneği:
2.3 WordPress Güvenlik Açığı – XSS Saldırısı
2.3.1 XSS saldırı örneği:
2.4 Veri Doğrulama
2.4.1 Veri Doğrulama örneği:
2.5 Veri Kaçış
2.5.1 Veri Kaçış örneği:
2.6 WordPress Güvenlik Açığı – CSRF Saldırısı
2.7 Nonce Kullanımı
2.8 Bir Nonce'nin Doğrulanması
2.9 WordPress Güvenlik Açığı – Yönlendirme Saldırısı
2.10 Güvenli Yönlendirme
2.11 Kullanıcı Yetenekleri Güvenlik Açığı
2.12 WordPress'te Daima Geri Dönün veya Çıkın

WordPress Güvenlik Açıkları

Savunmasız Kodlar Nereden Geliyor?

İlk başta, WordPress Güvenlik sorunlarının nerede olduğunu iyi anlamalıyız. WordPress, Php, Html, javascript ve diğer kodları içeren WordPress çekirdek kodu, temaları ve eklentilerinden oluşur.

Açık kaynak topluluğu, WordPress Çekirdek Kodunu inceler. Hatayı bildiren ve güvenlik açıklarını düzelten ve bunun için kredi alan çok sayıda insan var. WordPress'teki güvenlik açığı, SQL Enjeksiyon saldırısı, CSRF saldırısı, XSS saldırısı, Yönlendirme saldırısı ve diğer benzer teknikler tarafından kullanılabilir. Bu nedenle, çekirdek geliştirmeden kaynaklanan WordPress Güvenlik Açığı çok fazla değildir.

Ne temalar genellikle wp veritabanlarıyla etkileşime girer ne de siteler sık ​​sık tema değiştirir. Gutenberg, WordPress'in varsayılan editörü olduğundan, daha iyi performans ve güvenlik için Gutenberg Uyumlu WordPress Temalarını seçmemiz gerekiyor. Bu nedenle, onunla daha az güvenlik açığı oluşur.

Öte yandan, WordPress eklentilerinin karmaşık özellikleri ve davranışları vardır. Ayrıca, kullanıcılar ve veritabanları ile etkileşim yüksektir. Site, harici özelliklere sahip olmak için çok sayıda eklenti içerir. Sonuç olarak, siteye çok sayıda güvenlik açığı getirebilirler. Eklentiler, WordPress'te büyük güvenlik açıkları oluşturur.

WordPress Güvenlik Açığı - Tehditler ve Saldırılar
WordPress Güvenlik Açığı – WPscan.org

wpscan.org'a göre, güvenlik açıklarının %11'i temalardan gelirken, güvenlik açıklarının %37'si WordPress Core geliştirmesinden geliyor. Benzer şekilde, geri kalan %52 Eklentilerden gelir. WordPress Eklentisinin ne olduğunu zaten bildiğinizi varsayıyorum

Tehditler ve Saldırılar

Bir WP teması veya eklenti geliştiricisiyseniz, kodunuzu güvenli hale getirmek ve WordPress Güvenlik Açığını azaltmak için iyi bir tehdit ve saldırı bilgisine sahip olmanız gerekir.

Tehditler ve Saldırılar-SQL Enjeksiyonu-XSS-CSRF-Yönlendirme
Tehditler ve Saldırılar

SQL Enjeksiyon saldırısı, XSS saldırısı, Yönlendirme saldırısı, CSRF saldırısı gibi veri temizleme, veri doğrulama, veri kaçma, nonce kullanma ve doğrulama, güvenli yeniden yönlendirme, kullanıcı yetenekleri vb. ile önlenebilen birçok saldırı vardır.

Bir geliştirici olarak düşmanınız genellikle kötü niyetli bir kullanıcıdır. Bu tür kullanıcılar kodumuza zarar verir. Never Trust User Inputs'u günlük kodlama davranışımıza dahil ettiğimizde, WordPress'teki güvenlik sorunlarını azaltmak için daha güvenli kod yazmanın yarısına gelmiş oluyoruz. Bu, WordPress Özelleştirici olarak işinizi kolaylaştıracaktır.

WordPress Güvenlik Açığı – SQL Enjeksiyon Saldırısı

Kritik ve hassas verileri alma girişiminde, SQL enjeksiyon saldırısı, WP veritabanına kötü amaçlı bir SQL kodu enjekte eder. MySQL, Oracle, SQL Server vb. SQL veritabanı kullanan WordPress sitelerini hedeflerler.

Bu amaçla, verileri kolayca ekleyebilecekleri, düzenleyebilecekleri veya okuyabilecekleri şifre, e-posta adresi veya herhangi bir hassas verilere erişebilirler.

Ünlü “Bobby Tables” çizgi romanından bir örnek alabiliriz.

Ünlü bobby masaları Comic- Tehdit ve Saldırı
Ünlü bobby masaları Komik

Bu çizgi romanda bir hanımefendi, oğlunun adı 'Robert' olarak geçiyor); DROP TABLO Öğrenciler; –')'; Veritabanına girildiğinde, isim temizlenmemişse okulun tüm öğrenci tablosunu silecek olan SQL komutu ile.

Bu nedenle SQL enjeksiyonundan kaçınmak için kullanıcı giriş verilerini sterilize etmeliyiz.

Veri temizlemeyi ayrıntılı olarak tartışalım.

Veri Temizleme

Sanitizing, girdiyi güvence altına almak, kullanıcı girdisini temizlemek anlamına gelir. Bu işlem, WordPress'teki güvenlik açığını azaltmak için geçersiz metni, UTF-8 karakterlerini veya kodu girişten kaldırır.

HTML'ye özgü karakterleri varlıklara dönüştürür, tüm etiketleri çıkarır. Ayrıca, WordPress'teki büyük güvenlik sorunlarının bir nedeni olan satır sonlarını, sekmeleri ve fazladan bir boşluk, şerit sekizlilerini kaldırır.

Verileri sterilize etmek için birçok WordPress yerleşik işlevi vardır. Bunlardan birkaçı aşağıdaki listede:

  1. sanitize_email(): E-postada olmaması gereken tüm karakterleri çıkarır
  2. sanitize_text_field(): Bir dizeyi temizler (kullanıcı girdisinden/veritabanından)
  3. sanitize_file_name(): Karakterleri çıkarır (bir dosya adından)
  4. sanitize_key(): Küçük harfli alfasayısal karakterler, tireler ve alt çizgiler dışındaki tuşları soyun.

Veri Temizleme örneği:

 $title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);

Burada, ilk önce başlığı dezenfekte ediyoruz. Temizledikten sonra wp veritabanındaki başlık değerini güncelliyoruz.

 $Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')

Burada, yukarıdaki SQL komutunda, isim, öğrenci tablosuna eklenen özel karakterler ve varlıklara sahiptir, adı ' Robert'); Bu, SQL ekleme komutunu kapatır ve başka bir komut, DROP TABLE Students adının yarısıyla çalıştırılır; –')'; ve bu açılan tablo öğrenciler veritabanındaki tüm öğrenci kayıtlarını siler.

Yani burada veri tabanına değer girmeden önce temizleme yapılmışsa, öğrenci veri tabanı tablosunun tamamını kaybetmemiş olursunuz.

Dezenfektan yapmak için aşağıda bir örnek görelim.


 $Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);

Burada, yukarıdaki örnekte temizleme, addan fazla varlıkları ve karakteri kaldırmıştır ve yalnızca dizenin bir veritabanına eklenmesine izin verir. Bu sayede verileri güvenli bir şekilde yerleştirebilir ve SQL enjeksiyonlarından korunabiliriz.

Giriş güvenliğini sağlama hakkında daha fazla bilgi edinmek için bu bağlantıyı izleyin.

WordPress Güvenlik Açığı – XSS Saldırısı

Siteler Arası Komut Dosyası Çalıştırma (XSS) saldırısı, diğer kullanıcının tanımlama bilgileri, oturum belirteçleri ve diğer bilgiler gibi benzer verilerini çalmak için savunmasız komut dosyası dili javascript kodunu enjekte eder. Çerez bilgimiz varsa otomatik olarak bağlanabiliriz. WordPress'teki güvenlik sorunları, diğer kimliklerle kolayca giriş yapabildiğimiz için çalınan çerezlerle birlikte gelir.
Bir tarayıcıda çalışır. Siteye göz atan milyonlarca insan bu saldırıdan etkilenecektir. Kuşkusuz bu saldırı en ciddi saldırılardan biridir.

XSS saldırısı örneği:

 <script <script type=”text/javascript”>
var hacker ='../hacker.php? cookie_data=' +escape(document.cookie);
</script>
</script>

İşte bu XSS saldırı örneğinde, çerezler kaçar ve hacker.php betiğinin 'cookie_data' değişkenine gönderilir.

Saldırgan bu komut dosyasını web sitesinin koduna enjekte ederse, kullanıcının tarayıcısında yürütülür ve saldırgana tehlikeli bir sorun olan çerezler gönderilir. Bundan kaçınmak için doğrulamamız gerekiyor. Tüm kullanıcı giriş verilerini doğrulayın ve sterilize edin ve çıkış verilerinden kurtulun.

Aşağıda ayrıntılı olarak tartışalım.

Veri doğrulama

Doğrulama, kullanıcı girişini kontrol ediyor. Bu, kullanıcının geçerli bir değer girip girmediğini kontrol etmek için yapılır.
Yerleşik PHP işlevleri, temel WordPress işlevleri ve özel işlevler olan verileri doğrulamanın üç yolu vardır. WordPress Güvenlik Açığı'ndan kaçınmak için bundan asla kaçmayın. Bunlardan birkaçı aşağıdaki listede:

  1. isset()/empty(): değişkenin var olup olmadığını kontrol edin
  2. is_email(): verilen verilerin e-posta biçiminde olup olmadığını kontrol edin
  3. is_serialized(): değerin string olup olmadığını kontrol edin

Veri Doğrulama örneği:

 $number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }

Yukarıdaki örnek, giriş verisinin bir sayı olup olmadığını kontrol eder, programı sadece bir sayı ise çalıştıracaktır. Bu nedenle, veri doğrulama, WordPress Güvenlik sorunlarının azaltılmasına yardımcı olur.

Veri doğrulama hakkında daha fazla bilgi edinmek için bu bağlantıyı takip edin

Veri Çıkışı

Kaçmak, çıktıyı güvence altına almaktır. Hatalı biçimlendirilmiş HTML veya komut dosyası etiketleri gibi istenmeyen verileri çıkarma işlemidir. Çıkış, yalnızca özel HTML karakterlerini HTML varlıklarına dönüştürmekle kalmaz, aynı zamanda yürütme yerine görüntüler. Bu, XSS saldırısını önlemek ve ayrıca verilerin kullanıcının beklediği şekilde görüntülendiğinden emin olmak için yapılır.
WordPress birkaç yardımcı işlev sağlar. Çoğu durumda kullanılırlar. Onlardan bazıları:

  1. esc_html(): HTML'ye özgü karakterlerden kaçar
  2. esc_attr(): HTML etiketlerinin özniteliklerinin değerinden kaçar
  3. esc_url(): Köprü Metni REFERANS niteliklerinden kaçar

Veriden Kaçış örneği:

 $url = "javascript : alert ('Hello')";
<a href= "<?php echo esc_url ($url) ;?>"> Text </a> href= "<?php echo esc_url ($url) ;?>"> Text </a>

Yukarıdaki örnekte, bilgisayar korsanı, WordPress sitesinin güvenlik sorunlarına meydan okumak için komut dosyası dili kodunu girmiştir. Bundan kaçınmak için, URL değerinden kaçmak için esc_url kullandık ve bundan sonra sadece değeri kodumuza ekliyoruz. Bu sayede XSS saldırısını engellemiş olduk.

WordPress Güvenlik Açığı – CSRF Saldırısı

WordPress Güvenlik Açığı'nda daha ayrıntılı tartışılan Siteler Arası İstek Sahteciliği saldırısı, tek tıklamayla tehditler ve saldırılar veya oturum sürme saldırısıdır.
CSRF saldırısı, bir saldırganın oturum açmış bir kullanıcıyı rızası veya bilgisi olmadan önemli bir eylemi gerçekleştirmeye zorlamasına olanak tanır.
Burada yetkili bir kullanıcı yetkisiz komutları iletir.
Belirli bir sayfaya veya URL'ye gönderilen yetkili bir kullanıcının muhtemelen fark etmedikleri şeyleri yapabileceği fikrine dayanır. Ayrıca, nonce kullanımı ve nonce doğrulaması ile düzeltilebilir.

Nonce'ı kullanma

WP, nonce adlı bir güvenlik belirteci oluşturur. Belirli bir işlem için sizin tarafınızdan kullanılabilecek, yalnızca size özel, tekrar etmeyen benzersiz bir numaradır. Nonce değeri 24 saat boyunca geçerlidir ve sonrasında sona erer ve yenisi wp tarafından oluşturulur. Ayrıca nonce için de doğrulama zamanı ayarlayabilirsiniz.
WordPress'teki mevcut güvenlik sorunlarını azaltmak için URL'leri ve formları kötüye kullanımdan korur.

Ayrıca, formu nonce ile güvenceye almak için wp_nonce_field() işlevi kullanılarak gizlenmiş bir nonce alanı oluşturun:

 <form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>

Aşağıda nonce için birkaç fonksiyon verilmiştir:

  1. wp_nonce_url() – Bir URL'ye nonce eklemek için.
  2. wp_create_nonce() – AJAX isteklerini işlemek için özel bir şekilde nonce kullanmak için.

Bir Nonce'yi Doğrulama

  1. check_ajax_referer() – Nonce'yi kontrol eder (ancak yönlendireni değil) ve kontrol başarısız olursa varsayılan olarak komut dosyasının yürütülmesini sonlandırır.
  2. wp_verify_nonce() – Bir nonce doğrulamak için.
 if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }

nonce hakkında daha fazla bilgi edinmek için bu bağlantıyı takip edin

WordPress Güvenlik Açığı – Yönlendirme Saldırısı

WordPress Güvenlik Açığı, site ziyaretçilerinin kötü amaçlı bir web sitesine otomatik olarak yeniden yönlendirilmesine de neden olur.
Bu genellikle, bir ziyaretçi istediği sayfa veya web sitesi yerine başka bir sayfaya yönlendirdiğinde ortaya çıkar.
Sitenizin trafiği yüksekse, bu saldırı sitenize daha az trafik gelmesine neden olabilir. Site ziyaretçinizin başka bir sayfaya yönlendirileceğinin farkında bile olmayacaksınız. Ancak, Güvenli Yönlendirme yardımı ile düzeltilebilir.

Güvenli Yönlendirme

Bir eylem veya formdan sonra bir kullanıcıyı herhangi bir sayfaya yönlendiriyorsanız wp_safe_redirect kullanın. wp_safe_redirect izin verilen bir ana bilgisayarı kontrol eder. Ana bilgisayara izin verilmiyorsa, site URL'sine yönlendirilecektir. Böylece, başka bir ana bilgisayara kötü niyetli yönlendirmeyi önleyecektir. Ancak bu wp_redirect tarafından kontrol edilmez. Bu nedenle, WordPress güvenlik sorunlarını azaltmak için wp_safe_redirect kullanmak, bağlantıları yeniden yönlendirmenin daha güvenli bir yoludur.

 $redirect=admin_url('edit.php'); wp_safe_redirect($redirect);

Kullanıcı Yetenekleri Güvenlik Açığı

Yeniden Yönlendirme saldırısı, XSS saldırısı, CSRF saldırısı ve SQL Enjeksiyon saldırısının yanı sıra WordPress, Kullanıcı Yeteneklerinden de savunmasızdır. Herhangi bir kullanıcının herhangi bir veri göndermek için sitenize gelmesine izin veriyorsanız, kullanıcı yeteneklerini kontrol edin. Aksi takdirde tehdit ve saldırıların kurbanı olursunuz.
Kullanıcı rolü ne kadar yüksekse, kullanıcının sahip olduğu yetenekler de o kadar fazladır.
Bazen geliştiriciler, form gönderen bir sayfada bulunan kullanıcının eylemi gerçekleştirmek veya yapmamak için gerekli ayrıcalıklara sahip olduğundan emin olmayı unutur. Ortak bir WordPress Güvenlik Açığı kaynağı getirecektir.

 if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }

İletişim Formu 7 güvenlik açığı örneğini ele alalım (WordPress Güvenlik Açığı Türü)

Bu eklentinin aktivasyon sayısı 5+milyon kullanıcıdır. Tek bir savunmasız kod varsa, 5+ milyon kişiyi etkileyecektir.

Ayrıcalık Güvenlik Açığı-İletişim Formu 7
İletişim Formu 7'nin Ayrıcalık Güvenlik Açığı

5.0.3 ve daha eski sürümlerde bir yetenek açığı vardı. Katılımcı rolünde oturum açmış bir kullanıcı, iletişim formlarını kolayca düzenleyebilir. Varsayılan olarak, yalnızca Yönetici ve Düzenleyici rolündeki kullanıcılar tarafından erişilebilirdi.
Yani, bir hack olma şansı daha yüksekti. Eklentinin yeni sürümü bu hataları çözdü.

WordPress'te Her Zaman Geri Dönün veya Çıkın

Herhangi bir işlev veya ajax çağrısı yazarken kodunuzu tamamladıktan sonra dönüşü kaçırdıysanız veya öldüyseniz. Basit görünebilir ancak önemli güvenlik sorunlarına yol açabilir.

Her zaman demek istediğiniz yere geri dönüş ve ölmeyi eklediğinizden emin olun. Apple'ın #gotofail hatasından bir örnek alabilirsiniz.

 defined( 'ABSPATH' ) defined( 'ABSPATH' ) or die ( "No script kiddies please!" );
function function adls_view() { global $wpdb; { global $wpdb;
            include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
           exit(); }
function function adls_generate_random_string ( $length ){
           $string = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $random_string = '';
            for ( $i = 1; $i <= $length; $i ++ ) { { $random_string .= $string[ rand( 0, 61 ) ];
            }
           $random_string; return
       }
 }

Toplama

Bu, güvenliği önemseyen WordPress Profesyonelleri için önemli bir gönderiydi. Bu gönderiden, WordPress'e güvenlik açığı getiren çeşitli tehditler ve saldırılar hakkında bilgi edindiniz. SQL Injection saldırısı, XSS saldırısı, CSRF saldırısı, Yönlendirme saldırısı ve daha pek çok şey hakkında kısa bir giriş içerir.

Doğrulama-Temizlik-Kaçış-Nonce
Hatırlanacak noktalar

Veri temizleme, Veri doğrulama, Veriden kaçma, nonce kullanma ve doğrulama, güvenli yeniden yönlendirme ve kullanıcı yetenekleri gibi çeşitli teknikler de tartışıldı. Bu nedenle, WordPress'te güvenlik sorunları vardır.

Sonuç olarak,

  1. WordPress Güvenlik Açığı'ndan kaçınmak için Kullanıcı Girişine Asla Güvenmeyin.
  2. Tüm girdileri doğrulayın, sterilize edin ve tüm çıktı verilerinden kurtulun
  3. WordPress'e güvenelim!

Yukarıda belirtilen tehdit ve saldırılarla ilgili herhangi bir sorunla karşılaştıysanız, bize bildirin. Uzmanlarımız, sorununuza göre size uygun bir çözüm sunacaktır.