Güvenli WordPress Kodu İlkeleri

Güvenlik çok önemli bir konudur. WordPress’i güvence altına almak için, güvenli bir sunucuda yalnızca güvenli kodlar (bazı ek “sertleştirme” tarafından desteklenebilecek) yürüten WordPress örneklerini kullanan sorumlu kullanıcılara sahip olmanız gerekir. Ancak, herhangi bir kısmının uzlaşması, tüm çalışmalarınızı başka bir bölümde iptal edebilir. Güvenli bir WordPress sitesine sahip olmak için tek bir çözüm yoktur. Bu makaleye odaklanacağımız şey, bir geliştirici olarak, net hatalardan ve güvenlik hatalarından kaçınmak istiyorsanız, WordPress için PHP yazarken düşünmeniz gereken şeydir. Sunucuyu (WordPress sitesinin% 90’ı için, onu işleyen ana bilgisayar) veya WordPress’i güvenli bir şekilde kullanma hakkında konuşmayacağız. (Kısacası: İyi bir şifre kullanın, güncellemeye devam edin.)
Bu aynı zamanda bu konunun derinlemesine bir araştırması değildir. En iyi üç tehdidi zaten tanıyorsanız: SQL, XSS, CSRF enjeksiyonu, bu makaleden fazla bir şey alamayabilirsiniz. Ancak bunu tanımıyorsanız, bunun ne anlama geldiği ve nasıl önleneceği hakkında kapsamlı bir açıklama yapacağız ve diğer bazı yaygın hataların. Haydi Yapalım şunu!
Tehdit modelini tartışmadan – kim ve ne hakkında endişelendiğimiz? —Agny aptalca. Bu makalede, bir WordPress eklentisi veya teması yazdığınızı ve bunun güvenli olduğundan emin olmak istediğinizi varsayıyoruz. Bunu yapmak için, tehdidinizin nereye geleceği konusunda iyi bir fikriniz olmalı. Tehdit modelini tartışmadan güvenlik hakkında konuşmak – kim ve ne için endişelendiğimiz? —Agny aptal.
Peki, ne için endişeleniyoruz? Geliştiriciler olarak, düşmanlarımız genellikle kötü kullanıcılardır. Bir kullanıcı birçok nedenden ötürü kötü olabilir. Bu nedenle, WordPress geliştiricileri olarak, sitenin ana yöneticileri olmayan sitelere sızmayı hedefleyen insanlar hakkında endişeleniyoruz. Yani, tüm temaları ve eklentileri silerek WordPress sitenizde “yönetici” hesabı olan birinden gerçekten korunmuyoruz. Geliştirdiğiniz koddaki bundan korunmak çok zordur ve işe yaramaz. Kaybeden bir savaştır. Ayrıca, bu şekilde kullanmayı beklemediğimiz yazılımımızın kenarlarını kullandıklarında yanlışlıkla istemedikleri kötü şeyler yapmalarını önlemeliyiz. SQL enjeksiyonu, çoğu web uygulamasında en iyi veritabanı kullanımı ve WordPress bir istisna değildir, veritabanları verilerin depolandığı verilerin kalbidir ve dolayısıyla korumanız gereken şeylerin çekirdeğidir. Burası aynı zamanda yeni geliştiriciler tarafından yapılan en yıkıcı ve yaygın hatalardan bazıları da. Acele eden veya SQL enjeksiyon saldırıları riskine alışık olmayan geliştiriciler, bir veritabanı kodu yazarken büyük olasılıkla bazı zararlı hatalar yapacaklar.
Bilinmeyen için SQL “Yapılandırılmış Sorgu” anlamına gelir. Her bir ilişkisel veritabanının biçimi – WordPress, MySQL adlı bir tane kullanır – SQL varyantı. Ve bu ortak dil nedeniyle, bir veritabanında konuşan yazılım üreticisi dikkatli değilse, insanların zayıf SQL kodlarını veritabanı işlemlerine “enjekte etmesi” yeterince kolaydır. SQL enjeksiyon enjeksiyon enjeksiyonu, ünlü “Bobby Tablos” çizgi roman tarafından gösterilen çok basit olan SQL. Temel öncül, bir geliştirici olarak hakem formları veya URL dizeleri alanının yeterli koruma olmadan veritabanına dahil edilmesine izin verdiyseniz, kötü bir zamanda. Şaka, yazılımın kalitesine inanan annelerin, oğlunun okulunun tüm veritabanlarını, sadece adını sisteme girerek öğrencilerinin tüm listesini silecek şekilde test etmeleridir. Okul kayıtlarının tüm tablolarını bırakmak (SQL konuşmuyorsanız silmek) için SQL enjeksiyon vektörlerini kullandı.
XKCD’de açıklandığı gibi basit saldırıların WordPress’te yapılması kolay değildir. Ancak veritabanınızdan ödün vermenin başka bir yolu. WordPress’e savunmasız bir veritabanı kodu yazabileceğiniz konseptinin kanıtı olarak şunu yaptım: add_shortcode (‘hack_my_db’, ‘hack_my_db’); işlev hack_my_db () {$ id = $ _get [‘id’]; Global $ WPDB; $ Post_title = $ wpdb-> get_var (wp_posts’tan Post_Title’i seçin ID = ‘. $ id); Dönüş $ Post_title; } Bu kod ne yaptı – hangisi yalnızca yerel bir test sunucusunda çalışmalısınız? Keyfi sorgular (URL’deki http://wordpress.org?id=123 gibi bir soru işaretinden sonra bir parça gibi) ve onunla bir veritabanı arıyor. Bu, E-Niaga eklentisinde kısa bir kod aracılığıyla sayfa yapımı sipariş gibi bir şeye benzer. Yazdığım belirli kod $ WPDB gerektirmez, ancak karşılaştırılabilir kod mümkündür. Ve bu kod kasten savunmasız hale getirildiğinden, wpdb-> sorgu yapmaya hazırlanmıyoruz. Bu yöntemi kullanmak, bu kodu güvenli hale getirecek kolay şeylerden biridir. Hazır olmadığı için, bu kod birisinin sitede SQL enjeksiyon saldırıları başlatması için kapıyı açar. Aslında, ücretsiz ve kolay araçlar kullanarak bu SQL enjeksiyonunun kırılganlığından yararlanma hakkında bir bonus video kaydettim. “Bobby Tables” saldırısı benim için başarılı değildi, ancak bu kodu sitedeki tüm kullanıcıların kullanıcı adını ve şifresini bulmak için kullanabildim. Size iletmek için e -posta adresinize ihtiyacımız var:

SQL Enjeksiyon Saldırılarından Nasıl Güvenli Kalınır Yapılması gereken basit şey, sorgu yapınızın hazırlanması ve veritabanını anlatmak ve bazılarını tamsayılarla değiştireceğinizdir. Yapılacak basit şey, sorgu yapısı veritabanınızı hazırlamak ve anlatmak ve bazılarını tamsayılarla değiştireceğinizdir. Bunu yaparsanız, ___ damla masası asla yürümeyecek ve kullandığım gibi daha karmaşık bir saldırı. Çizgi romanlara yanıt veren birisi gerçekten bobby tablolar.com yapar ve hazırlık ifadesini (WordPress örnekleri dahil) daha ayrıntılı olarak açıklar. Bu özel kod açısından, kendi başına olan WP_Query’nin kullanımıyla daha fazla korunacağım. Bu sorunun türünün korunma katmanı türü çıkarın. Aldığım belirli veritabanı verileri bu şekilde elde edilebildiğinden, daha kolay ve daha akıllıca olacaktır. Ancak her $ WPDB kullanımı yönlendirilemez. Bu nedenle, herhangi bir hazırlık hakkında bilmek önemlidir. Bu durumda oldukça basit sanitasyon ile SQL enjeksiyon saldırılarından da korunabilirsiniz. Beklediğimiz türün değerini, bu durumda tamsayılara zorlayarak sağlayabiliriz. Bu durumda, $ kimlik değerinin bir tamsayı olmasını istediğimizi biliyoruz. Bu yüzden sadece PHP IntVal işlevini sağlamak için kullanmamız gerekir. Bu, WordPress sitesinden kimlik bilgilerini çalmak için videoda yaptığım gibi SQL enjeksiyon saldırılarını önleyecektir.
Veritabanı sorguları için daha karmaşık parametrelerle, daha karmaşık sanitasyon gerekebilir.Veritabanına girmeden önce e -posta adresini numaraya dönüştüremezsiniz.Sanitize_email gibi sanitasyon için varsayılan WordPress işlevlerinden bazılarına ulaşacaksınız.Doğrulama, IS_EMAIL gibi bir şeyle de yapılabilir.Söylenmelidir, kullanıcılar doğrulamayı tercih etmeli ve tercih etmelidir – girdilerinin yanlış olduğunu bilmeli, sadece onunla hareket etmeden önce değiştirmeyin.Ancak her ikisi de veritabanınızı SQL enjeksiyon saldırılarından korumak için çalışabilir.
Çapraz yer komut dosyaları (XSS) çapraz yer komut dosyaları yapmak, orada yürütme için sitenizde çalışmayı beklemediğiniz JavaScript yazmak için kullanılan savunmasız girdi alanlarını bırakarak en sık işaretlenen saldırı sınıflarıdır. Dikkatli değilseniz, bu şekilde yürütülebilecek PHP’yi de çalıştırabilirsiniz. Bu, tüm bu çıktılardan çıkmayı gerekli kılan çapraz yerinde bir komut dosyasıdır, çünkü sunucu ile aynı alandan sunulan JavaScript, diğer yerlerden daha fazla ayrıcalıklara sahip olma eğilimindedir. Bu, kötü veya kötü yazılmış JavaScript’ten güvende olmayı bilmediğiniz tüm çıktılardan çıkmayı gerekli kılan bir çapraz yerinde bir komut dosyasıdır. TextAea bölgesinden oluşturduğunuz formda veri temizlemeyi düşünmeden düşünmeden bu imkansız değil, hatta zor değil ve daha sonra site ziyaretçilerine görüntülendiğinizde bundan kaçınamıyor. Bu, veri çalan veya ziyaretçilerinizi istenmeyen () uyarılarıyla rahatsız eden beklenmedik JavaScript’i tetikleyerek insanların size saldırmasına izin vermenin en yaygın yoludur.
XSS’den nasıl güvende kalırsınız Yukarıda önerdiğimiz gibi, çapraz alan senaryo saldırılarına karşı iki savunma hattı vardır. Birincisi, kullanıcıdan aldığınız tüm verileri onlara geri göstermeden veya kaydetmeden önce doğrulamak ve/veya temizlemektir. Yine, bu, IS_EMAIL işlevini kullanmak isteyebileceğiniz bir yer. Ancak çok uzun ve karmaşık bir metin düzlemi, örneğin PHP Strip_TAGS işlevine ulaşmanızı gerektirecektir. Kullanıcının size çok sayıda sıradan metin vermesini umuyorsanız, Strip_Tags ve Script etiketleri aracılığıyla çalıştırabilirsiniz ve HTML işaretlemesi silinir. Öte yandan, çıktıdan kaçarak XSS saldırılarını da önleyebilirsiniz. Kullanıcı HTML göndermişse ve HTML’yi göstermeniz gerekiyorsa, komut dosyası etiketinin HTML’den çıkarak yanlışlıkla yürütülmesine izin vermediğinizden emin olabilirsiniz. WordPress’te birçok farklı kaçış fonksiyonu vardır. En sık kullanılan ve önemli olanlardan bazıları: ESC_HTML, ürettiğiniz metnin HTML içermemesini sağlamak için bir WordPress işlevidir. Bu, tüm köşe parantezlerinizi vb. Doğru HTML varlığına değiştirecektir.
WP_kses (_Post), kullanılmamak için belirli HTML öğelerini durduran (sınıf) nadiren kullanılan bir işlevdir. Ne alacağınızı açıklarsınız ve işlev diğer HTML işaretlemesi türlerini siler.
ESC_ATTR, HTML öznitelik etiketinde sona erecek şeyler içindir. Temel olarak, bu, yanlışlıkla veya kötülükte girdiğiniz alıntıları kırmasını önlemeyi sağlar.
Bu direnç için talep etmenin en yaygın savunma alanı sahteciliği, “nonce” olarak adlandırılan şeyi kullanmaktır – çapraz yer talebinin (CSRF) sahteciliği üç ana güvenlik açıkının en ezoteriktir. Belirli sayfalara veya URL’lere gönderilen resmi kullanıcıların yaptıkları fark etmedikleri şeyleri yapabilecekleri fikrine bağlıdır. XSS saldırıları ile eşleştirildiğinde, örneğin, yalnızca “Ara” düğmesine basacağını düşünen kullanıcılar tarafından gerçekleştirilen “Sil” eylemidir. Buna karşı en yaygın savunma, “silinen” sayfanın yanlışlıkla oraya yönlendirilen bir “arama” isteği almamasını sağlamak için SO -CONRED “nonce” i – bir kez kullanılan miktar – kullanmaktır. Her form, belirli bir formdan geldiğini belirleyen nonce gönderir ve istismar kodu hedef form için nonce bulamaz. Yani, “nonce” i kontrol ettiğinizde

Formlarınızı gönderen kullanıcılar için, bunları düşündükleri dışında kazara eylemlerden korursunuz. WordPress’te nonce kullanımının detayları, bu makalenin kapsamı biraz ötesindedir. Ve biz onu WPSOUT üzerinde açıklayan içerik yok. Bu CSS hile makalesi sizin için alana kadar sürebilir. Kısa sürüm, wp_nonce_field () işlevini arayarak WordPress’teki formunuza nonce ekleyeceğiniz ve daha sonra WP_VERIFY_NONCE adresine bir çağrı ile formunuzu almadan önce aynı olmayanı doğrulayacağınızdır. Bu adımlardan birini atlamak, beklediğiniz gibi her şeyi işleyemez. Nonses yapmanın başka yolları da var ve Ajax istekleriyle biraz daha karmaşık hale geliyorlar, ancak bu temel fikir: bu eylemi özellikle yapmayı planladıklarını bilmediğiniz sürece birisinin bir eylem yapmasına izin vermeyin. Yukarıdaki üç konu başlığını hatırlamak için bir başka güvenlik sorunu, geliştirici tarafından farkında olmadan sağlanabilecek en yaygın ve tehlikeli güvenlik açığıdır, ancak yanlış olabilecek tek şey bu değildir. Hatırlamak istediğiniz diğer bazı şeyler, kodunuzdaki yetenekler, kod yolu hataları ve sömürülen aktarım sorunudur. Bu yetenek sınavı büyük üç anlamda bir hata değildir, çünkü bir “saldırgan” gerektirmez. WordPress kodunda basit görünen en yaygın sorunlardan biri, formu gönderen sayfada bulunan kullanıcının bu eylemi gerçekleştirmek için gereken ayrıcalığa sahip olmasını unutmayı unutmaktır. Bu, büyük üçü anlamında bir hata değildir, çünkü bir “saldırgan” gerektirmez.
.Tek başına hareket eden saf kullanıcılar bile bu sorunu tetikleyebilir.Ancak bu hala çok yaygın bir güvenlik açığı kaynağıdır.Yalnızca Sitedeki belirli verileri “yönetici” silmek istiyorsanız, sitenizdeki verileri silmek için bir form gönderen kullanıcının “Yönetici” olduğundan emin olun.Bu kavramsal olarak zor değil, ama acelenizde olduğunuzda unutmak çok kolay.Current_user_can bunu uygulamanın en iyi yoludur, çünkü “yeteneği” kontrol eder
rol yerine kullanıcı. Yukarıda listelenen yetenekler sorunu gibi olmak zorunda kaldığınızda koruma maddesinden çıkmayın, çok kolay güvenlik sorunlarına neden olabileceğini, ancak aslında bir saldırıya neden olabileceğini kastettiğinizde kodunuzda her şeyin durduğundan emin olamayın. Bu sadece istediğiniz yerde her zaman geri döndüğünüzü veya ölmenizi sağlamakla ilgilidir. Bu tür bir sorunun tanıması biraz daha zordur, çünkü koruma maddesinin ortaya çıktığını düşünebilirsiniz, ancak görünüşe göre değil. Küçük mantık hataları ancak önemli güvenlik sorunlarına neden olabilir. #Gotofail Apple hatası klasik bir örnektir. Dikkate alınması gereken son sorundan yararlanabilecek aktarım, bir sorgu dizesi gibi bir şeyin eylemden sonra kullanıcı tarafından hangi sayfaların devam ettiğini kontrol etmesine izin verebilmenizdir. Bunu yaparsanız, istediğiniz URL olduğundan emin olun. Bu nedenle WordPress’in WP_SAFE_REDIRECT adlı bir işlevi vardır. Bu aşırı görünebilir, ancak WordPress sitenizdeki kullanıcıların veya geliştiricilerin beklenmedik bir şekilde devam eden URL’ye akıllı bir bağlantı, akıllı bir saldırganın elinde güçlü bir saldırı vektörü olabilir. Gerçekliğin iyimser dozu gerçektir, WordPress geliştiricisi olarak kariyerimde yazdığım kodların çoğu bir sitede ücretsizdir. Yıllardır daha iyi bir WordPress geliştiricisi olmak için çalışırken, yazdığım bazı kodların hala SQL enjeksiyon güvenlik açığı, saha arası komut dosyaları veya benzer sorunları var.
Milyonlarca kurulum ve güvende kalmak için güçlü ihtiyaçları olan büyük önemli eklentiler bile hata yapmak. Ancak, bildiğim kadarıyla, hatalarımla hiçbir site devredilmedi. Belki de bunu söyleyerek kaderi çekerim, ancak kod bir sitede (bir çocuk olduğunda) kullanıldığında, küçük bir ölçekle biraz korunursunuz. Güvenlik önemlidir ve tüm iyi WordPress geliştiricileri hatırlamalıdır, ancak geçmişte bu hatayı yaptıysanız korkmanıza gerek yoktur. Milyonlarca kurulum ve güvende kalmak için güçlü ihtiyaçları olan büyük önemli eklentiler bile hata yapmak. Ve genellikle büyük ölçekte sömürülmeden önce bulunurlar. (Bu, bir WordPress yöneticisi olarak, eklentiyi düzenli olarak güncellemelisiniz.) Mümkün olduğunca, gelecekte net bir yol artık bu hatayı yapmak değil. Ve bu öğrenmeyi gerektirir. Umarım bu makale WordPress güvenliği hakkında nasıl düşündüğünüzü açıklamıştır, ancak bu soruların son cevabı olduğunu düşünmüyorum, daha fazla öğrenmeye ihtiyaç duyulacak. Ancak güvenli kod hala önemlidir. Çok. Her ne kadar ilk uyguladığınız güvenli kodun sizin veya kullanıcınız için kötü bir etkisi olmaması mümkün olsa da, sadece bir hata gerektirir, kendinizden şüphe duyan ve pişman olan bir dünyada olmanız için uygun şekilde kullanılır. Kesinlikle, WooCommerce mağazasına zarar verdiğim ve geçersiz bir saldırganın SQL güvenlik açığı veya CSRF saldırıları yoluyla siteyi devralmasını bırakarak saatlerce (yıllarca değilse) verileri kaybettiğim bilgisinden keyif almayacağımı biliyorum.

admin

Bir Cevap Yazın

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