Eklentilerim / temalarımdaki tüm verilerin veritabanına girmeden önce ve tarayıcıya çıkmadan önce güvenli bir şekilde işlendiğinden emin olmak istiyorum. Benim sorunum, API'nın sizin için - saniyeler sonrası meta alanlarını kaydederken - ve eklenti / tema yazarının bunu yapmaktan tamamen sorumlu olduğu diğerleri için - sanitizasyonu işlediği durumlar olduğu - özel ayarları kaydederken olduğu gibi.
Bu sorunun kapsamı için, etki alanı düzeyinde verileri doğrulamakla ilgilenmiyorum - örneğin, bir formdaki Yaş alanının 0 ile 120 arasında olup olmadığını veya bir e-posta adresinin geçerli olup olmadığını denetleme. Ben sadece güvenlik endişe - örneğin, veritabanına kaydederken SQL enjeksiyon önlemek için SQL sorguları kaçmak veya XSS önlemek için HTML şablonları çıktı veri sanitizing.
Çıktı sterilizasyonu için, değişkenleri HTML şablonlarına yansıtırken esc_html()
ve her zaman fonksiyonları kullanmanız gerektiğini biliyorum esc_attr()
. Peki, şablon etiketlerini kullanmaya ne dersiniz ? Hepsi çıktıyı sterilize ediyor mu? Öyleyse, hangi bağlam için (genel HTML, etiket özellikleri vb.)? Bazı işlevlerin farklı bağlamlar için değişkenleri vardır ( the_title_attribute()
ancak çoğu yoktur.
Giriş temizliği için, $wpdb->prepare()
manuel sorgulamalar yaparken kullanmam gerektiğini biliyorum , ancak eklenti ayarları sayfası oluşturmak veya özel bir yazı türü için yazı meta alanlarını kaydetmek için Ayarlar API'sini kullanmaya ne dersiniz?
Şu anda Core'u kazıyordum ve sanitize olup olmadığını öğrenmek için bir işlevi her kullandığımda öğreticiler okuyorum, ancak bu hataya eğilimli ve zaman alıcı. Tüm olası durumların ve API'nın işleyip işlemediğinin kapsamlı bir listesini bulmayı umuyorum. Örneğin,
API doğrular / sterilize ediyor
- İle meta sonrası kaydetme
update_postmeta()
- İle kullanıcı meta kaydetme
update_user_meta()
- Bir yazı başlığı çıktısı vermek için -
the_title()
- vb
Manuel olarak doğrulamanız / sterilize etmeniz gerekiyor
- Ayarlar API'sı ile eklenti seçeneklerini kaydetme. Öğesinin 3. parametresi olarak bir geri arama iletin
register_setting()
. - Doğrudan veritabanı sorguları: Sorguyu içine sarın
$wpdb->prepare()
. - HTML'de değişken çıktıları. Kullanım
esc_attr()
,esc_html()
vb - vb
Ayrıca API'nin neden belirli durumlarda sağladığını, ancak diğerlerinde olmadığını anlamak isterim. Verilerin bilinmeyen doğası ile ilgili bir şey olduğunu varsayıyorum, ancak kapsamlı bir açıklama duymak isteriz.
the_title()
, the_permalink()
vs) ince ama özel verilerle (örn değildir get_post_meta()
). Şüpheniz varsa, kendinizi sterilize edin - incitemez.