Ana Sayfa » »
Ağu
23
2013

WordPress Eklentilerimizdeki Formların Güvenliğini Artırma

WordPress eklentilerimizde gerek yönetim paneli bölümünde gerekse de ziyaretçi tarafında formları kullanarak işlem yapıyorsak, güvenliği artırmak için önceki yazımda bahsettiğim nonce (tek kullanımlık) kod sistemini kullanmalıyız. Bu yöntemde form içerisine sadece o siteye ait gizli bir kod yerleştirilip, kontrolü yapılır. Böylece bilgilerin sitenin içerisinden gönderildiğinden emin olunur.

Önceki yazımda linklere bu kodun nasıl eklendiğini anlatmıştım. Bu yazımda ise aynı işlemleri formlara ve AJAX işlemlerinde nasıl yapacabileceğimizi anlatacağım.

Formlarda Nonce (Tek Kullanımlık) Kodu Kullanımı

Eklentimizde kaç tane form kullanıyorsak hepsini aşağıdaki şekilde nonce kodu ekleyebiliriz. Eğer eklentimiz yerine örneğin özel alan kutusu (custom meta box) ekliyorsak, yine orada oluşturduğumuz forma da aynı şekilde nonce kodu eklemeliyiz,

<form name="kayit" action=....>
<?php wp_nonce_field('eklentiadim-nonce'); ?>
//diğer form elemanları
.
.
.
</form>

wp_nonce_field() fonksiyonu 'eklentiadim-nonce' ifadesini kullanarak, siteye özgü bir kod üretir ve aşağıdaki gibi gizli bir form elemanı oluşturur.

<input type="hidden" id="_wpnonce" name="_wpnonce" value="7d27f08b09" />

Kullanıcı formu doldurup, gönderdiğinde bu form elemanının değeri de gönderilmiş olur. Geriye bu formu işleyecek fonksiyonun başında, formdan gelen bilgiler içerisinde _wpnonce isimli elemana ait bir değer olup, olmadığını kontrol etmek kalır. Bunu yapmak için de aşağıdaki şekilde bir kod yapısı kullanılır.

if (! wp_verify_nonce($_REQUEST['_wpnonce'], 'eklentiadim-nonce') ) die("Bu İşlem İçin İzniniz yok");

//ya da eğer yönetim paneli tarafında formu işliyorsanız sadece aşağıdaki şekilde de kontrol edebilirsiniz.
check_admin_referer( 'eklentiadim-nonce');

Kod içerisinde geçen check_admin_referer() fonksiyonu sadece nonce değerini değil, aynı zamanda yönetim formun yönetim panelinden gönderilip/gönderilmediğini de kontrol eder. Dolayısıyla yönetim paneli tarafındaki form işlemleriniz için bu fonksiyonla kontrol yapmak daha yerinde olacaktır. Ziyaretçi tarafındaki form işlemleri için kodun ilk bölümündeki, önceki yazımda da bahsettiğim kontrol yapısını kullanabilirsiniz.
Gördüğünüz gibi formlarımızı daha güvenli hale getirmek aslında çok kolaymış, tabi bu, formlardan gelen bilginin %100 güvenli olduğu anlamına gelmiyor, yine formdan gelen bilgileri filtrelemek, zararlı olabilecek kodlar arındırmak yerinde olacaktır.

AJAX İşlemlerinde Nonce Kodu Kullanımı

Eklentiler için AJAX kullanımı vazgeçilmez bir yöntem, özellikle basit bilgilerin kaydı, silinmesi ya da düzenlenmesinde artık çoğu eklentide AJAX kullanılmaktadır. Aşağıdaki örnekte basitçe AJAX isteği yapılmadan önce bir nonce kodu üretiyor ve isteğimiz içerisine bu kodu da ekliyoruz.

$nonce= wp_create_nonce  ('eklentiadi-ajax-nonce');
//nonce kodumuzu oluşturduk
//ardından ajax isteğinde bulunan JavaScript kodu içerisine bu değişkeni yazdırıyoruz.
$("#text").load(".../ajax_response_dosyasi.php?_ajax_nonce=<?php echo $nonce ?>");

Bu kodun kontrolü için ise ajax_response_dosyasi.php dosyası içerisinde işlem yapmadan önce aşağıdaki kodu kullanıyoruz.

check_ajax_referer('eklentiadi-ajax-nonce');

Kodlardan da anlaşılacağı üzere işin temelinde, AJAX isteği gönderirken, göndermek istediğiniz bilgilerin yanı sıra oluşturduğunuz nonce değerini de göndermek ve kontrolünü yapmak yatıyor. AJAX işlemini yaparken hangi yolu kullanıyor olursanız olun, yeterki önce kodu üretin ve kod değerini de AJAX isteği içerisinde gönderin, hepsi bu aslında.

Böylece, önceki yazımla birlikte yazacağımız eklentilerde güvenliği nasıl artırabilirizin cevabını vermiş olduk. Tabi ki bu yöntemler yanında başka güvenlik önlemlerini de almak gerekecektir, ama en azından bu yöntemlerden birini öğrenmiş olduk. Sonraki yazılarımda formlardan gelen bilgileri filtrelemek için kullanabileceğimiz fonksiyonlardan da bahsedeceğim.

Size tavsiyem, form işlemlerinin olduğu bir eklentiyi kullanmadan önce kodları içerisinde bu ve önceki yazımda bahsettiğim fonksiyonların kullanılıp, kullanılmadığını kontrol edin. Eğer kullanılmıyorsa, dikkatli olun, eklenti sitenizde bir güvenlik zaafiyeti oluşturabilir.

Bu yazımı beğendiyseniz, bu kategoride yer alan wpnonce Kullanarak WordPress Eklenti Güvenliğini Sağlama başlıklı Eklenti, eklenti yazma ve güvenlik konularında bilgi veren bir önceki yazımı da okumanızı tavsiye ederim.

Yorumunu Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yukarı Çık