Wordpress kullanarak, Bazı biri bana giriş sanitasyon iyi şekilde söyleyebilirim?

1 Cevap php

Ben bir CMS olarak Wordpress kullanarak bir uygulama geliştiriyorum.

I have a form with a lot of input fields which needs to be sanitized before stored in the database.
I want to prevent SQL injection, having javascript and PHP code injected and other harmful code.

Şu anda veri sterilize etmek için kendi yöntemlerini kullanıyorum, ama WP kullandığı işlevleri kullanmak için daha iyi olabileceğini hissediyorum.

Ben Wordpress Data Validation baktım, ama ben kullanmalıyım ne kadar bu fonksiyonları üzerinde emin değilim, ve hangi sırayla. Herkes WP fonksiyonları kullanmak için en iyi olan ne söyleyebilirsiniz?

Şu anda aşağıdaki yaparak benim girdi "hijyen" ediyorum:

  1. Aksan (é, ô, Æ, Ø å) ile karakterler komik bir veritabanında şekilde (benim tablolar için ayarlanmış olsa bile ENGINE=InnoDB, DEFAULT CHARSET=utf8 ve {[saklanan var çünkü (2)]}), ben şimdi) (htmlentitiesi kullanarak, aksan olabilir giriş alanları dönüştürme değilim.

  2. Giriş verileri SQL dizesi oluştururken, ben kullanmak mysql_real_escape_string().

Ben bu olsa saldırıları önlemek için yeterli olduğunu düşünmüyorum. Yani iyileştirme önerileri büyük ölçüde takdir edilmektedir.

1 Cevap

Girdi "sanitisation" sahte olduğunu.

Sen (*) filtreleme veya girişi kaçan enjeksiyon sıkıntılardan kendinizi korumak için çalışmayın gerekir, sen başka bir bağlam içine koymak zamana kadar ham dizeleri ile çalışması gerekir. Bu noktada mysql_real_escape_string MySQL sorguları ve htmlspecialchars HTML çıktısı için bu bağlamda için doğru kaçışa fonksiyona gerek.

(WordPress farklı prensipte olan, esc_html gibi kendi kaçış fonksiyonlarını ekler.)

(*: Iyi, uygulamaya özgü gereksinimleri dışında, kontrol gibi bir e-posta adresi, parola vb makul ve sağlamak, gerçekten bir e-posta adresi girişine kontrol karakterleri filtrelemek için makul bir argüman da var. sahne, bu nadiren gerçekten yapılıyor olsa da.)

Şimdi) (htmlentitiesi kullanarak, aksan olabilir giriş alanları dönüştürme değilim.

Ben kuvvetle yapmıyorum öneriyoruz. Sizin veritabanı ham metni içermelidir; Eğer HTML olarak kodlanmış ettik eğer çok zor sütunlar üzerinde veritabanı işlemleri yapabilmesi için. Bu tür < ve " çok non-ASCII karakter olarak aynı anda aynı karakterleri kaçıyorlar. Eğer veritabanından veri almak ve sayfanın içine kopyalama dışında bir nedenle kullandığınız zaman, artık veri sahte HTML-kaçar var. HTML-kaçış etmeyin sayfaya metin yazıyoruz son ana kadar.

Eğer sorun veritabanına ASCII olmayan karakterler alıyorsanız yaşıyorsanız, o yerine HTML-kodlanmış veri depolama gibi sürdürülemez geçici çözümler için giden ilk çözmek gerekir farklı bir sorun var. Orada mesajların bir dizi uygun bir UTF-8 konuşmak için PHP ve veritabanları alma hakkında buraya, ama ana şey HTML çıktı sayfaları kendilerini doğru Content-Type başlık kullanarak UTF-8 olarak sunulmaktadır emin olmaktır / meta. Sonra MySQL bağlantı mysql_set_charset() kullanarak UTF-8, örneğin ayarlanmış olup olmadığını kontrol edin.

Giriş verileri SQL dizesi oluştururken, ben mysql_real_escape_string () kullanın.

Evet, bu doğru. Sürece bu gibi SQL enjeksiyon savunmasız değildir. Yerine şablonu çıkış ucunun veritabanı sonunda HTML-kaçan iseniz might (XSS neden olan) HTML-enjeksiyon vulnerabile olacak. hasn't veritabanı üzerinden gitmiş herhangi bir dize HTML-kaçmış gitmiş olmayacak (örn. $_GET doğrudan getirilen) Çünkü.