WordPress Eklentisi ve Tema Geliştiricileri için En İyi Güvenlik Uygulamaları

Yayınlanan: 2020-12-09

Bir WordPress geliştiricisi olarak, ne üzerinde çalışacağınız konusunda vermeniz gereken birçok karar vardır. Birincil ilgi alanınız ve önceliğiniz harika bir tema veya eklenti oluşturmaktır ve kod üzerinde çalışmak için sürücü koltuğuna geçtiğinizde güvenlik önlemleri genellikle arka planda kalır. Güvenlik sorunları için en son ne zaman oturup kendi kodunuzu gözden geçirdiniz? Hayır, öyle düşünmedim

Bu ipuçları, hem CleverPlugins'te eklentiler geliştirme hem de sayısız müşterinin saldırıya uğradıktan sonra web sitelerini tekrar çevrimiçi hale getirmelerine yardımcı olma deneyimime dayanmaktadır. WP Security Ninja gibi bir güvenlik eklentisi geliştirmek beni diğer insanların kodları konusunda daha az paranoyak yapmadı.

Saldırıya uğramış web sitelerinin en yaygın nedeni hala kötü şifre yönetimidir, ancak bu, kodunuzu korumanın basit yollarından bazılarını kullanmak için bir bahane olmamalıdır.

Bir eklenti veya tema geliştirdiğinizde, onun popüler olmasını ve mümkün olduğunca çok sayıda web sitesine yüklenmesini istersiniz. Başarınız ne kadar büyük olursa, insanların, kullanıcılarınızın web sitelerini hacklemek için çalışmanızı kötüye kullanma şansı o kadar büyük olur.

WordPress'in popülaritesi nedeniyle, bilgisayar korsanlarının en yaygın hedeflerinden biri haline geldi. Bir eklentide veya temada bir güvenlik açığı tespit edilirse, bu, yüz binlerce web sitesinin kötüye kullanıma açık olduğu anlamına gelebilir.

Ne yazık ki, iyi bilinen bir üründe düzenli olarak bir güvenlik açığı ortaya çıkıyor, bu nedenle kodunuzu kullanıcılarınız için korumak için bazı temel güvenlik önlemleri almaya değer.

WordPress.org İnceleme Ekibi Hakkında Neler Var?

Eklentileri ve temaları resmi depoda yayınlamadan önce inceleyen ekibin her türlü güvenlik sorununu kontrol ettiğini düşünebilirsiniz, ancak ekip küçüktür ve yalnızca birkaç kişiden oluşur. Kontrol edilecek eklentiler ve temalar kuyruğu sürekli büyüyor, bu yüzden her birini gözden geçirmeleri gereken süre sınırlı.

Ancak, bir şey bulurlarsa, siz düzeltene kadar eklentinizi otomatik olarak kapatabilirler veya belirli bir zaman diliminden önce bir güvenlik açığını düzeltmeniz gerektiğine dair bir uyarı e-postası gönderebilirler.

Mesele şu ki, eklentiniz veya temanız depoda listelendiğinde, ek tarama yapmadan güncellemeleri depo aracılığıyla dışarı gönderebilirsiniz, böylece bir güvenlik açığı herhangi bir zamanda kolayca gizlice girebilir ve neredeyse her zaman için tespit edilmeyebilir.

Temel olarak, eklenti güvenlik önlemlerinizi sıkılaştırmak size kalmış, bu yüzden WordPress ürününüzü korumanın ve kendinizi birçok baş ağrısından ve potansiyel olarak markanız üzerindeki olumsuz etkiden korumanın bazı yollarına bakalım.

İşte WordPress eklentinizi veya temanızı güvenli bir şekilde geliştirmek için yapabilecekleriniz.

1. Güvenliği her açıdan düşünün!

Eklentinizi veya temanızı kimin kullandığını ve eğer varsa, güvenlik konusunda ne düzeyde anlayışa sahip olduklarını asla bilemezsiniz.

Eklentinizi veya temanızı kimin kullandığını ve eğer varsa, güvenlik konusunda ne düzeyde anlayışa sahip olduklarını asla bilemezsiniz.Tweet

Herhangi bir müşteri web sitesindeki yöneticiler, editörler veya normal kullanıcılar güvenli şifreler kullanmayabilir ve hesapları saldırıya uğrayabilir. Ürününüz güvenli değilse, müşterinizin web sitesine kötü amaçlı kod yüklemek için daha fazla erişim elde etmek için bu hesaplar kötüye kullanılabilir.

Web sitesinin çalıştığı sunucuyu yapılandıran sunucu yöneticilerinin, web sitenizi aynı sunucudaki diğer sitelerden nasıl koruyacağınız konusunda yeterince bilgi sahibi olmasını beklememelisiniz. Web sitesi büyük bir sağlayıcı tarafından barındırılıyorsa, web sitesinin düzgün bir şekilde “ayrı” olmasını bekleyebilirsiniz, ancak ürününüzün nereye kurulacağını bilemezsiniz.

Bu paranoyak geliyor mu? Belki. Ancak, eklentiniz veya temanız çok popüler hale gelirse, güvenlik konusunda paranoyak bir yaklaşım benimsemekten mutlu olacaksınız.

Eklentiniz veya temanız süper popüler hale gelirse, güvenliğe paranoyak bir yaklaşımda bulunmaktan mutlu olacaksınız.Tweet

2. XSS – Siteler Arası Komut Dosyası Çalıştırma saldırılarını önleyin

WordPress, Gutenberg ve ReactJS ile daha ön uç odaklı bir proje haline geldiğinden, bu giderek daha önemli hale geliyor.

WordPress geliştiricileri için en yaygın hatalardan biri, kodlarını doğrulamayı ve temizlemeyi unutarak XSS saldırılarına açık bırakmaktır. XSS'nin birkaç varyasyonu vardır, ancak genel olarak, bir bilgisayar korsanının sunucuya kod enjekte etmesine ve ardından bir ziyaretçinin tarayıcısında yürütmesine izin verildiğinde bir XSS saldırısı gerçekleşir.

Bir girdi alanınız olduğunu hayal edin. Basitlik adına, kullanıcıların veya ziyaretçilerin bir gönderiye yorum gönderebilecekleri bir yorum alanı olduğunu varsayalım.

Bir bilgisayar korsanı "<script>alert('XSS');</script>" ile bir yorum göndermeye çalışacak.

Şimdi, bu sadece kullanıcının ekranında bir uyarı açan basit bir örnek ve başka bir şey değil. Gerçek bir bilgisayar korsanı, sitelerinden ziyaretçinin tarayıcısından bilgi çalabilecek ve çok daha fazlasını çalabilecek kodu yükleyen kodu enjekte etmek için yorum alanını kullanır.

Bunun olmasını doğrulama, sterilize etme ve kaçma ile önleyebiliriz.

Doğrulama , veri tabanında saklamak gibi herhangi bir şey yapmadan önce gönderilen verileri kontrol etmektir. Veri gönderildiğinde, kontrol edebilir ve kabul edilebilir olduğundan emin olabilirsiniz. Bir miktar alanıysa, bir sayı beklersiniz. Sayı değilse, kullanıcıya bir hata mesajı gönderebilirsiniz.

Verileri sterilize etmek, gönderilen bilgileri işlemek ve istenmeyen karakterleri kaldırmak gibi saklamak istemediğimiz hiçbir şey içermediğinden emin olmaktır. WordPress'in buna yardımcı olmak için yerleşik birkaç işlevi vardır. Birazdan dezenfekte etme hakkında daha fazlası.

Kaçmak , herhangi bir kötü amaçlı kodun tarayıcınızda gerçekten yürütülmesini engelliyor. Diyelim ki web sitenize zaten kötü amaçlı kod enjekte ettiniz veya başka bir eklenti veya tema, bilgisayar korsanlarının kullandığınız verilere kod eklemesine izin veriyor - verileri göstermeden önce ekrana sızdırmak, bunun bir sorun olmasını önleyecektir.

"<script>alert('XSS');</script>" öncesinde kullandığımızla aynı basit örneğe bakalım.

Bu kodla herhangi bir işlem yapmazsak tarayıcı bunun HTML kodu olduğunu düşünecektir. Buradaki önemli detay, HTML etiketlerini tanımlamak için kullanılan < > karakterleridir. Bunlardan kaçarak < 'yi &lt; ve > &gt; Tarayıcı artık bunun gerçek HTML kodu olmadığını anlıyor ve bunun yerine küçük ve büyüktür işaretini göstermesi gerekiyor.

Uygulamanıza giren ve çıkan tüm verileri doğrulayarak, temizleyerek ve kaçarak, kullanıcılarınızı en yaygın saldırı yöntemlerinden birinden koruyorsunuz.

3. SQL enjeksiyonları konusunda dikkatli olun

Adından da anlaşılacağı gibi, bir saldırgan web sitenizin ince ayarlı bir SQL sorgusu işlemesini sağlamak için SQL enjeksiyonlarını kullanabilir ve bunu veritabanınıza erişmek için kullanabilir.

Web sitenizde depoladığınız verilere bağlı olarak, web sitenizin bir SQL enjeksiyon saldırısından sızması utanç verici olmaktan itibarınızı ve işinizi tamamen mahvetmeye kadar gidebilir.

SQL enjeksiyonu, bir web sitesine saldırmanın eski bir yoludur, ancak yine de çok etkilidir ve bu saldırı biçimini kullanmanın yollarını arayan birçok insan var. Ekim 2020'de, popüler Loginizer WordPress eklentisi, bir milyondan fazla web sitesini risk altında bırakan bir SQL enjeksiyon güvenlik açığına sahip olduklarını duyurdu.

2019'da bilinmeyen bilgisayar korsanları bir SQL enjeksiyon saldırısı yoluyla milyonlarca Bulgar'ın vergi verilerini çaldı ve 2016'da bir grup Rus bilgisayar korsanı Ohio'da yaklaşık 500.000 kişinin seçmen bilgilerini çıkardı. Bu tür saldırılar hala çok etkilidir ve onlar hakkında birçok bilgi bulabilirsiniz.

Veri Girdilerinin Temizlenmesi Hakkında Çizgi Roman

Kaynak: https://xkcd.com/327/

Bir SQL enjeksiyonunun gerçekleştiği en yaygın yer, kullanıcı girdisini kabul eden bir form alanıdır - örneğin, bir isim. Saldırı, giriş alanlarına SQL kodunun bölümlerini girerek, beklediğinizden farklı bir sonuç veren özel bir sorgu oluşturarak gerçekleşir.

Diyelim ki insanların belirli bir adı aramasına izin veren bir formunuz var.

SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' AND meta_key = 'celebrity_name';

Bu basit örnek, Henry adına ve belirli bir anahtara, celebrity_name olan tüm satırlara sahip post meta tablosundaki tüm satırları alır - bu şekilde, tüm veritabanını ve yalnızca ihtiyacımız olan belirli satırları döndürmeyiz.

Saldırgan, farklı bir değeri ayrıştırmaya çalışır – örneğin 'Henry' OR 1=1--

SQL'de OR 1=1 her zaman doğru olduğundan, sorgu şimdi tüm satırları belirli değerimizle veya başka herhangi bir şeyle döndürecektir.

Daha da kötüye gidiyor. SQL sorgumuz yalnızca meta_key aradığımız belirli değerle eşleştiği sonuçları istedi, bu nedenle her şeyi döndürmeyiz. Bu, SQL enjeksiyon saldırısının etkisini sınırlamalı, değil mi?

Öyle değil. SQL'de çift çizgi bir yorum göstergesidir, dolayısıyla bundan sonra gelen her şey yorumlanır.

SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1--' AND meta_key = 'celebrity_name';

Bu, sorgunun şöyle göründüğü anlamına gelir:

SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1

Sorgu şimdi esasen o veritabanı tablosundaki her şeyi döndürür.

Bu sadece basit bir örnekti. Bir veritabanındaki bilgilerin tümüne olmasa da çoğuna erişmenin çok daha karmaşık yolları vardır. Saldırgan, kör SQL enjeksiyon saldırılarını deneyebilir; bu, veritabanınızda kod çalıştırma anlamına gelir – yeni bir yönetici ekleme, tüm verilerinizi kaldırma vb.

Çoğu saldırı, web sitesi formlarınıza gönderilen SQL parçalarını içeren rastgele sorgu dizeleri biçiminde olacaktır. Otomatik komut dosyaları, web sitenizin çıktısındaki değişiklikleri algılar ve ardından saldırı potansiyelini algılar.

Basit ve etkili bir yol, girdi olarak bir kesme işareti ' göndermek ve herhangi bir şeyi değiştirip değiştirmediğini, bir hata oluşup oluşmadığını veya daha fazla sonuç döndürülüp döndürülmediğini görmektir.

Kurtarmak için WordPress

Herhangi bir geliştirici, doğrudan veritabanıyla etkileşim kurmak yerine, WordPress'teki yerleşik veritabanı soyutlama sınıfını kullanmalıdır, $wpdb .

WordPress'teki $wpdb sınıfı, veritabanıyla güvenli bir şekilde etkileşim kurmak için ihtiyaç duyduğunuz tüm CRUD işlevselliğine sahiptir ve eklentiniz veya temanız gerekiyorsa, sınıfı kendi veritabanı tablolarınızla etkileşim kurmak için bile kullanabilirsiniz.

Her giriş formuna makul bir şekilde ne tür verilerin girilmesi gerektiğini tahmin ederek sorunu çözebilirsiniz. Bir önceki örneğimizde bir isim aradık. Yalnızca mektupları kabul ettiğimizden emin olmak için girişi sterilize edebiliriz. Yalnızca birkaç seçenek içeren bir seçim kutunuz veya radyo grubunuz varsa, izin verdiğiniz seçeneklerden yalnızca biri olduğundan emin olmak için verileri kontrol edebilirsiniz.

Problemi çözmek için yapabileceğiniz en önemli şey, $wpdb->prepare() fonksiyonu ile verilerinizi hazırlamaktır.

Bu işlev, hazırlanmış bir sorgu dizesi ve SQL sorgusuna eklenmesini istediğiniz argümanların bir dizisini alır.

$meta_key = 'celebrity_name';
$meta_val = 'Henry'
$allhenrys = $wpdb->get_results(
  $wpdb->prepare(
    "SELECT * FROM $wpdb-&gt;postmeta WHERE meta_key = %s AND meta_value = %s",
    $meta_key,
    $meta_val
  )
);

Tüm iş prepare() işlevi içinde gerçekleşir. İlk parametre, hazırlanan sorgu – gerçek değerler yerine %s yer tutucusunu içerir. Bu, diğer ayrıştırılmış değişkenler, $meta_key ve $meta_val ile değiştirilir.

Not – Yer tutucuları çevreleyen sorgunuzda kesme işareti olmaması önemlidir, çünkü işlev sizin için bunları ekleyecektir.

Bu basitleştirilmiş bir örnektir, ancak aynı işlem herhangi bir veritabanı sorgusu için kullanılabilir ve dizeler için %s , tam sayılar için %d ve kayan noktalar için %f kullanabilirsiniz.

Veritabanına yeni bir satır eklemek gibi belirli durumlar için işlevler de vardır. Bu amaçla $wpdb->insert() kullanabilirsiniz.

$wpdb->insert(
  "{$wpdb->prefix}my_custom_table",
  array(
    'name'   => 'Henry',
    'userid' => 123,
    'score'  => 10,
  ),
  array(
    '%s',
    '%d',
    '%d',
  )
);

Hazırlama işlevini kullanmak, ürününüze yönelik SQL enjeksiyon girişimlerinin çoğunu önlemeye yardımcı olabilir.

Lütfen $wpdb belgelerini kontrol etmeyi unutmayın. Bazı işlevler sizin için girdiden kaçacaktır; diğerleri, verileri işleve ayrıştırmadan önce girdiden kendiniz çıkmanızı bekler.

4. İsteklerinizi korumak için nonces kullanın

WordPress'te nonce sistemini kullanmak birçok saldırıyı önlemenize yardımcı olabilir. Güvenlik açısından nonce, yalnızca bir kez kullanılan bir sayıdır. Buradaki fikir, bu isteğin yasal olduğunu doğrulamanın bir yolu olarak, kodunuzdan WordPress kurulumuna yaptığınız tüm isteklere bu benzersiz numarayı eklemektir.

Bir kulübe girmek için fedailere vermeniz gereken gizli bir şifreye sahip olmak gibi.

Bununla birlikte, WordPress'teki nonce'ler biraz farklıdır - ne bir sayıdırlar ne de nonce yalnızca bir kez kullanılır.

Teknik olarak WordPress'teki nonces hem küçük harf hem de sayı içerebilir ve yalnızca bir kez kullanılması yerine bir süre sonra yeniden oluşturulur.

Bir nonce kullanma şekliniz, JavaScript dosyalarınızı kaydeden PHP kodunun küçük, benzersiz bir sayı ve harf kombinasyonu oluşturması ve JS kodunuzun okuyabilmesi için bunları ayrıştırmasıdır.

JavaScript kodu web sitenize her istek gönderdiğinde, o kod parçasıyla birlikte gönderir ve kod eşleşmiyorsa, kodunuz isteği tamamen yok saymalıdır.

Bir örnekle her zaman biraz daha kolaydır, bu yüzden şu adımları izleyerek eklentinize bir .js dosyası yüklemenin basit bir yolunu görelim:

WordPress eklentisinde nonces kullanma

add_action('wp_enqueue_scripts', 'load_my_plugin_script');

function load_my_plugin_script() {
  // Register the script with all details and ensures it is loaded after jQuery
  wp_register_script('secure-plugin', plugin_dir_url( __FILE__ ). 'js/secure-plugin.js', array( 'jquery' ) );

  // Here happens the magic, we add some details to an object that we can later reference and read from in our JS code.
  wp_localize_script(
    'secure-plugin',
    'plugin_ajax_object',
    array(
      'nonce' => wp_create_nonce('secure-plugin-nonce')
    )
  );

  // Once that is done, we can now enqueue the script
  wp_enqueue_script('secure-plugin');
}

Bu fonksiyonda WordPress'e bir JavaScript dosyası yüklemesini söylüyoruz. Öncelikle yüklemek istediğimiz dosyayı wp_register_script() ile kayıt ediyoruz.

Ardından, bir dizi veriyi, özellikle JS kodumuzda kullanmak istediğimiz benzersiz nonce'yi içeren “nonce”ı ayrıştırmak için wp_localize_script() kullanırız. Unutmayın, o dizideki diğer her türlü bilgiyi de gönderebilirsiniz, ancak bu örnekte sadece basit tutuyoruz.

JavaScript dosyanızdan bir istek gönderdiğinizde, bu benzersiz nonce'yi eklemeniz gerekir. Bunu yapmak kolaydır:

JavaScript dosyasında WordPress eklentisinden nonce kullanma

jQuery(document).ready(function($) {
  $.ajax({
    url: ajaxurl, // WP variable, contains URL pointing to admin-ajax.php
    type: 'POST',
    data: {
      'action':      'get_custom_data',
      '_ajax_nonce': plugin_ajax_object.nonce,
      'user_data':   'Some input from a user'
    },
    success: function( response ) {
      // Here we do what happens if all is good - update the interface with a success message!?
    },
    error: function( response ) {
      // Whooops, something went wrong!
      // console.log(response);
    }
  });
});

wp_localize_script() kullandığımız için JavaScript'te plugin_ajax_object değişkenini kullanabiliriz. Nonce'yi bir değişken olarak göndeririz, _ajax_nonce .

JavaScript kodundan bir WordPress eklentisindeki bir nonce'yi kontrol edin ve doğrulayın

add_action('wp_ajax_get_custom_data', 'get_custom_data');

function get_custom_data() {
  // Ready for the magic to protect your code?
  check_ajax_referer('secure-plugin-nonce');

  /**
   * That's it - the check_ajax_referer function verifies the nonce is correct or it dies and stops code execution if it fails.
   *
   * If you want to customize the error handling and perhaps return an error to your JS code, you could change the code to something like:
   * if ( ! check_ajax_referer( 'secure-plugin-nonce', false, false ) ) {    
   *   wp_send_json_error( 'Invalid nonce' );
   * }
   */

  $sanitized_user_data = sanitize_text_field( $_POST['user_data'] );

  // ... continue with the rest of your plugin's function code ...
}

Sihir, nonce'yi kontrol eden ve nonce'nin beklenenle eşleşmemesi durumunda başarısız olan ve daha fazla kod yürütülmesini durduran check_ajax_referer() işleviyle gerçekleşir.

Kullanıcıya ne olduğu hakkında belirli bilgileri döndürmek için kodu daha da özelleştirebilirsiniz.

Kodunuzda nonces kullanmak, birçok türde bilgisayar korsanlığı girişimini önlemenin hızlı, kolay ve etkili bir yoludur. Bu, diğer tüm güvenlik önlemlerini atlayabileceğiniz anlamına gelmez, ancak en kötü sorunları azaltmaya yardımcı olur.

Kimseye güvenmemek konusunda ne dediğimi hatırlıyor musun? Bu, bizi kodunuzu korumanın başka bir yoluna getiriyor: sterilize etme.

Abone olun ve kitabımızın ücretsiz bir kopyasını alın

Kredi Kartı Anlaşmazlıklarınızı Artırmak İçin Kanıtlanmış 11 Teknik %740 Başarı Oranı Kazandırıyor

Bir arkadaşınla paylaş

Arkadaşınızın e-posta adresini girin. Onlara sadece bu kitabı e-posta ile göndereceğiz, izci şerefine.

Paylaşım için teşekkürler

Müthiş - 'Kredi Kartı Anlaşmazlıklarınızı %740 Artırmak için Kanıtlanmış 11 Teknik'in bir kopyası az önce şu adrese gönderildi: . Haberi daha da yaymamıza yardım etmek ister misiniz? Devam edin, kitabı arkadaşlarınız ve iş arkadaşlarınızla paylaşın.

Abone olduğun için teşekkürler!

- az önce 'Kredi Kartı Anlaşmazlıklarınızı %740 Başarı Oranı Kazandıracak Kanıtlanmış 11 Teknik' kopyanızı gönderdik. .

E-postanızda yazım hatası mı var? E-posta adresini düzenlemek ve tekrar göndermek için burayı tıklayın.

Kitap kapağı
Kitap kapağı

5. Kullanıcı girişini sterilize edin

Önceki örnekte, JS'den PHP'ye gönderilen ek bir veri parçası ekledik. Kodunuza her veri girdiğinizde, güvenli olmamasını beklemelisiniz.

'user_data':'Some input from a user'

Bu örnekte, bu basit bir dizedir, ancak verileri PHP'ye geri gönderdiğimiz için girdinin PHP ortamımızda istismar edilebilecek herhangi bir kod içermediğinden veya daha fazla kötüye kullanıma izin verecek şekilde veritabanında depolanmadığından emin olmamız gerekir.

Sanitasyon geliyor. WordPress, verdiğiniz girişi alan ve verileri size geri göndermeden önce temizleyen bir dizi işleve sahiptir.

Bu örnekte sanitize_text_field() işlevini kullandık, ancak WordPress, farklı veri türleri için uygun birçok temizleme işleviyle birlikte gelir.

WordPress'te kodunuzu güvende tutmak ve kötüye kullanımı önlemek için kullanabileceğiniz birçok başka harika işlev ve yöntem vardır.

Kodunuza gönderilen verileri asla ve asla sterilize etmeden kullanmamalısınız. Dezenfekte etme ve diğer harika pratik ipuçları hakkında daha fazla ayrıntı içeren yaygın WordPress geliştirici hatalarıyla ilgili bu makaleye göz atın.

Bu da beni çoğu WordPress geliştiricisinin deneyimlediği bir sonraki ipucuna getiriyor:

6. is_admin() 'in düşündüğünüz gibi olmadığını unutmayın

Kodunuzu kötülükten korumayı düşünmeye başladığınızda, muhtemelen is_admin() işlevine rastlarsınız ve adından, ihtiyacınız olan her şey gibi görünür ve tek yapmanız gereken kodunuzu bununla sarmak ve her şey iyi olacak.

Hayır, ne yazık ki değil. is_admin() işlevi, yalnızca kodun web sitesinin yönetim tarafında yürütülüp yürütülmediğini algılar. Kodunuzun normal bir kullanıcı veya yönetici tarafından çalıştırılıp çalıştırılmadığını algılamak için hiçbir şey yapmaz.

Kodu eklentinize girerseniz asla fark etmezsiniz çünkü kodu büyük olasılıkla yönetim arayüzünde çalıştırıyorsunuzdur ve bu, kodun yalnızca true olarak değerlendirileceği ve bunun hakkında düşünmeyi bırakıp bir şeye geçeceğiniz anlamına gelir. Başka.

Bir kullanıcının yönetici olup olmadığını kontrol etmenin doğru yolu, kullanıcı kapasitesini kontrol etmektir:

  if ( current_user_can( 'activate_plugins' ) ) { 
    // Do your code here
  }

Farklı kullanıcı rolleri için farklı yetenekler vardır, bu nedenle çok daha ayrıntılı kontrole sahip olursunuz. Çoğu durumda, 'activate_plugins' yalnızca yöneticiler için ihtiyacınız olan şeydir.

Hem yöneticilerin hem de editörlerin bir şeyler yapmasına izin vermenin bir yolunu istiyorsanız, 'edit_pages' yeteneğini test etmelisiniz.

7. Bağlantılarınıza rel=”noopener” veya rel=”noreferrer” ekleyin

Harici kaynaklara bağlantı vermek oldukça normaldir ve bu bağlantılara target="_blank" eklemenin eski yöntemi mantıklıdır çünkü kullanıcılarınızın eklenti/tema sayfanızdan ayrılmasını istemezsiniz.

Ancak, bu sizi Tabnabbing denen şeye açar. Bu, kötü amaçlı JavaScript kodunun JavaScript window.opener özelliğini kötüye kullanarak kullanıcılarınızdan bilgi çalabileceği bir güvenlik sorunudur.

Bunu önlemek, bağlantılarınıza rel="noopener" eklemek kadar basit olabilir. Bugün bağlantı kurduğunuz sayfa gayet iyi olabilir, ancak bu gelecekte değişebilir.

rel=noopener , bağlantı verdiğiniz sayfanın bilgilere erişemediği veya sayfanızın kontrolünü ele geçiremediği anlamına gelir.

rel=noreferrer yapar ve ayrıca tarayıcıya Yönlendirici başlığı aracılığıyla herhangi bir yönlendirme bilgisini iletmemesini söyler. rel="noreferrer" eklemek, bağlantı verdiğiniz sayfanın ziyaretçinizin nereden geldiğini bilmediği anlamına gelir.

Not: Bu iki özellik, SEO ile ilgili olan rel=nofollow ile karıştırılmamalıdır.

8. Üçüncü Taraf API'leri ile HTTPS ve Güvenli Simgeler kullanın

Bir geliştirici olarak, genellikle API'leri entegre etmeniz gerekir ve bunu ileri geri gönderdiğiniz verileri korumak için güvenli bir şekilde yapmanız hayati önem taşır.

Neyse ki, bunun nasıl güvenli bir şekilde yapılacağına dair halihazırda belirlenmiş standartlar var; Bunlardan biri HTTPS. HTTPS kullanmak, iletilen tüm verilerin şifrelendiği bir güvenlik katmanı sunar.

Ancak verilerinizin casus gözlerden korunmasını sağlamak için HTTPS kullanmak yeterli değildir.

Ars Technica'nın bu makalesinin açıkladığı gibi, "HTTPS, verilerinizin güvenli olduğu anlamına gelmez, yalnızca bağlantınızın güvenli olduğu anlamına gelir."

Güvenli jetonlar – JWT

İletişim ve API entegrasyonlarını işlemek için güvenli bir standart, JSON Web Tokens, JWT kullanmaktır.

Güvenli bir belirteç, bir kullanıcının oturum açma ayrıntılarını doğrulayan ve bir belirteç, kullanıcı adı, kimlik vb. gibi verileri içeren küçük bir dize parçası oluşturan bir sunucuya istekte bulunularak oluşturulur.

Sunucuya herhangi bir sonraki istek gönderdiğinizde, bu belirteci isteğe dahil edersiniz. Bu belirteç, kimliğinizin doğrulandığını ve erişiminizin olduğunu kanıtlar. Belirteç geçerliyse ve süresi dolmadıysa, sunucu belirteçte bulunan kullanıcı ayrıntılarını kullanacak ve istenen verileri alacaktır.

Sunucu, verileri işlemeye karar vermeden önce bu anahtar aracılığıyla kullanıcıyı aramayı gerektiren bir API anahtarı kullanmaya kıyasla, istekleri bu şekilde hızlı bir şekilde işleyebilir. Bir belirteç kullanarak, belirtecin içine kullanıcı hakkında veri ekleyebilir ve birden çok veritabanı sorgusu kaydedebilirsiniz.

Güvenli bir jetonun oluşturulma ve daha sonra kullanılma şekliyle, sahte jetonlar oluşturmak veya bir jetonun içeriğini değiştirmek mümkün değildir. Geçerli bir jeton oluşturmak, yalnızca platformun arkasındaki şirketin iyi bir şekilde gizli tutacağı gizli bir anahtarı bilmekle mümkündür.

Hatırlanması gereken çok önemli bir not, bir belirteç içindeki verilerin şifrelenmediğidir. Belirteç içeriğini geçersiz kılmadan kurcalamak imkansızdır, ancak belirtecin içindeki veriler herkes tarafından kolayca okunabilir, bu nedenle hassas verileri depolamak için iyi bir yer değildir.

Belirteçlere ve nasıl çalıştıklarına daha fazla dalmak istiyorsanız iyi bir kaynak JSON Web Belirteçlerine Giriş'tir.

9. CDN'lerden harici kütüphaneler kullanmayın

İhtiyaç duyabileceğiniz tüm kitaplıkları cdnjs.com veya diğer ücretsiz küresel CDN'ler aracılığıyla dahil etmek cazip gelse de, birkaç dezavantajı vardır.

Her şeyden önce, kütüphaneler ve eklediğiniz dosyalara sızan herhangi bir kötü niyetli kod üzerinde hiçbir kontrolünüz yok.

CDN'ler tanım gereği genellikle kararlı ve hızlı olsalar da, daha fazla saldırıya da maruz kalırlar. Kodunuz saldırı altındaki bir CDN'deki bir JS kitaplığına dayanıyorsa, eklentiniz ve temanız ya çok yavaş yüklenir ya da hiç yüklenmez.

Bu, bir eklentinin o sırada kullandığı genel CDN'nin bazı bölgelerdeki kullanıcılar için zaman aşımına uğradığı ve arayüzü kullanılamaz hale getirdiği bir müşteri web sitesinde oldu. Sonunda, hızlı bir düzeltme olarak JS betiğinin yerel bir kopyasını kullanmak için eklentiyi değiştirmek zorunda kaldım.

Harici bir 3. taraf kaynağı kullanmak da gizliliği tehlikeye atabilir. CDN'nin tüm kullanıcı IP'lerinizi kaydetmesi mümkün olacaktır - GDPR politikasını kontrol ettiğinizden ve müşterilerinizi bilgilendirdiğinizden emin olun.

Genel olarak, saygın 3. taraf CDN sağlayıcıları kullanırsanız herhangi bir sorunla karşılaşmazsınız, ancak en basit ve en güvenilir yaklaşım, ürününüze dahil olan JS kitaplığını dağıtmaktır.

Biliyor musun? WordPress, dahil olan birkaç JS kitaplığı ile birlikte gelir. Kullanmak isteyebileceğiniz daha yaygın JS kitaplıklarının çoğu WordPress ile birlikte gelir. Bu kütüphaneler temel ihtiyaçlarınızın çoğunu karşılayacaktır.

Geliştirici ipucu: Lütfen yalnızca ihtiyacınız olan belirli sayfalara fazladan JS ve CSS dosyalarını yükleyin. Bir geliştirici ve kullanıcı olarak, her sayfaya gereksiz JS ve CSS dosyaları yükleyerek yöneticiyi yavaşlatan eklentilerden pek hoşlanmam. Yalnızca diğer yönetici sayfalarını yavaşlatmakla kalmaz, aynı zamanda görsel düzeni gerçekten bozabilir ve bazı yönetici sayfalarını neredeyse kullanılamaz hale getirebilir. Lütfen

Ayrıca kodunuzu korumanıza yardımcı olabilecek bazı araçlar da vardır ve ücretsiz olarak kullanabileceğiniz harika bir araç Coderisk'tir.

Işe alıyor
Kıdemli PHP Geliştiricisi
Freemius'un ürünlerinin, hizmetlerinin ve API'lerinin özünü oluşturun ve WordPress eklentisi ve tema işletmeleri üzerindeki doğrudan etkinizi görün.
e-Ticaret Taşıma Uzmanı
Freemius ile satış yapmaya başlayan eklenti ve tema işletmeleri için lisans geçişi ve ürün entegrasyon sürecini yönetin.
İçerik Pazarlamacısı
Eklentileri ve temaları satmanın en iyi yolları hakkında eyleme dönüştürülebilir yazılı, görsel ve sesli içerik aracılığıyla bilgimizi paylaşın.

10. Kodunuzu analiz etmek için araçları ve hizmetleri kullanın

kod riski

Kod sorunlarını belirlemeye yardımcı olacak birçok otomatik hizmet vardır. Exakat, SonarSource ve PHPStan birkaç isim ve benim favorim – Coderisk.com – Kodunuzdaki daha belirgin güvenlik hatalarından bazılarını bulmanın kolay bir yolu.

Bu şirket, herkese açık WordPress.org deposundaki tüm WordPress eklentilerini tarar. Yazılımları, farklı kodlama standartlarına dayalı olarak yüzlerce farklı türde güvenlik sorununu tarayabilir ve tanımlayabilir.

Kendi istatistiklerine göre, şu ana kadar 4 milyardan fazla genel kod satırı taradılar ve en iyi eklentilerde bile oldukça fazla sorun var.

Ücretsiz hizmetlerine kaydolmak oldukça basittir - ücretsiz bir hesap oluşturabilir ve ardından eklentilerinizi talep etmeye başlayabilirsiniz. Bir eklenti talep etmek, bir sonraki yeni sürümü dağıttığınızda benioku.txt'inize koyduğunuz tek bir kod satırını almak kadar basittir.

Bu, eklentinizin en son taramasına erişmenizi sağlar ve içeride, doğrudan kodunuza bağlantılarla birlikte her sorunla ilgili belirli bilgiler ve ayrıntılar bulunur.

Coderisk Güvenlik Panosu

Unutmayın, bu ücretsiz bir hizmettir, bu nedenle eklentinizin taramasını bu kadar sık ​​​​güncellemeyebilirler, ancak bir kez bir bildirim aldığınızda, kodunuzu kontrol etmeye değer, çünkü en son gözden geçirmenizden bu yana bir hata yapmış olabilirsiniz. senin kodun.

Bir kez alıştıktan sonra arayüzde gezinmek oldukça kolaydır ve sistem çok kullanışlıdır, size neyin yanlış olduğuna dair çok kolay anlaşılır talimatlar vererek hatayı izlemenize yardımcı olur.

Ayrıca hataları filtrelemenin birçok yolu vardır ve tüm sorunlara hızlı bir şekilde genel bir bakış elde etmenize yardımcı olmak için her sorunu düzeltildi veya birçok başka seçenek olarak işaretleyebilirsiniz.

Not: Kodunuzda Coderisk'i (veya kendi kategorisindeki başka bir aracı) hiç çalıştırmadıysanız, uyarı alacağınız şüpheli sorunların sayısı konusunda endişelenmeyin. Bu araçlar, iş mantığını anlamadan yalnızca kodu analiz ettikleri için iyi miktarda yanlış pozitif üretebilir. Aracın çıktısını, gözden geçirilecek öğelerin sağlam bir başlangıç ​​listesi olarak kullanın.

PHP_CodeSniffer

Kodunuzu kontrol etmek için başka bir harika araç da PHP_CodeSniffer'dır. PHPCS, kodunuzu kontrol eden ve hataları size bildiren PHPCS ve PHPCS'nin tanımladığı uzun bir dizi sorunu otomatik olarak düzeltebilen PHPCBF olmak üzere iki komut dosyasından oluşur.

PHPCS'yi kurduktan sonra komut satırından kullanmak çok kolaydır. Bu araç, kodunuzda güvenlik sorunlarının görünmesini engellemez, ancak daha büyük sorunları kötüye kullanmayı çok daha zor hale getiren basit kodlama hatalarını ortadan kaldırabilirsiniz.

PHPCS'yi Sublime Text ve Visual Code gibi editörünüze doğrudan entegre etmek de mümkündür. Bu şekilde, hataları kolayca görebilir ve IDE'nizde hızlı bir şekilde düzeltebilirsiniz.

İster bir ekipte ister tek bir geliştirici olarak çalışıyor olun, aksi takdirde gözden kaçırabileceğiniz temel güvenlik sorunlarını ortadan kaldırmanın kolay bir yolu olduğundan otomatikleştirilmiş bir sistem kullanmaya değer.

Güvenlik sorunları için kodunuzu taramak için otomatik bir sistem kullanmak, güvenli bir tüm hataları yakalama yöntemi değildir, ancak en belirgin hataları belirlemenize yardımcı olabilir.

11. Düzgün bir inceleme yapmadan kodu web'den kopyalayıp yapıştırmayın

WP ürününüzü olabildiğince güvenli tutmak, arada bir değil, devam eden bir süreç olmalıdır. Yeni özellikler eklediğinizde veya kodu kaldırdığınızda, yeni güvenlik sorunları da ortaya çıkarabilirsiniz.

Google her zaman arkadaşınız değildir. Bir geliştirici olarak, size ilham verecek kod örnekleri için büyük geniş interneti kontrol etmeye alışkınsınız - ya da tembelseniz burada ve orada bitleri ve parçaları yeniden yazın.

İnternette bulduğunuz kod parçalarının çoğu, güvenli bir üretim ortamında nadiren kullanıma hazırdır ve düzeltmeye çalıştığınız kodlama sorununa bir örnek olarak verilmiştir. Bu kod parçalarını körü körüne ve incelemeden kullanmak, çok hızlı bir şekilde sorunlara neden olabilir.

Bir WordPress geliştiricisi olarak yapacak çok şey var ve binlerce kurulumla eklentinizdeki acil bir güvenlik sorununu çözmek bunlardan biri olmamalı.

İtibarınızın tehlikede olduğunu unutmayın

Eklenti veya tema güvenliğinize dikkat etmiyorsanız, kullanıcılarınızı, onların işlerini, işinizi ve itibarınızı tehlikeye atıyorsunuz. Bu, potansiyel olarak boşa harcanan çok fazla zaman ve para demektir!

Güvenlik açıkları, müşterilerin markanıza veya ürünlerinize duyduğu güven ve güven üzerinde büyük bir etkiye sahip olabilir. Yukarıdaki Loginizer örneği, en utanç verici güvenlik açıklarının bile güvenlik eklentisi geliştiricilerinin başına gelebileceğini gösteriyor! Ve seçmen sahtekarlığı ve hükümet hackleriyle ilgili diğer örnekler, herkesin savunmasız olduğunu söylüyor.

Bir güvenlik açığı keşfederseniz, hemen çözmek için harekete geçin ve sorunu (gerekirse) herkese açık olarak duyurmak ve bir düzeltme yayınlamak için en iyi uygulamaları izleyin.

İletişim ve zafiyetten kaynaklanabilecek “halkla ilişkiler” konularında oyunun bir adım önünde olursanız, o zaman büyük baş ağrılarından kaçınabilir ve itibarınızı zedelemek yerine arttırabilirsiniz.

Okuduğunuz için teşekkürler!

Başlamak için ne arayacağınızı bilmiyorsanız yapmanız gereken her şeye bakmak göz korkutucu olabilir ve doğru bilgiyi bulmak zor olabilir. Nereden başlayacağınız konusunda bir fikriniz yoksa, ürününüzü bir WP güvenlik uzmanı tarafından gözden geçirmeyi düşünmelisiniz (ben de güvenlik incelemeleri yapıyorum).

Bir güvenlik incelemesi için paradan veya zamandan tasarruf etmek cazip gelebilir, ancak ürününüzü mümkün olduğu kadar güvenceye almamanın maliyeti uzun vadede daha da yüksek olabilir.

Bunlar, WordPress ürününüzü suistimal edilmekten koruyabileceğiniz ve korumanız gereken yollardan sadece birkaçı . Herhangi bir şüphen varsa, sadece hatırla – Kimseye güvenme