Bu fonksiyon çifti uygun sanitization mi?

4 Cevap php

Bu alındı ​​O'Reilly's Learn PHP, MySQL, and Javascript,

function sanitizeString($var)
{
    $var = stripslashes($var);
    $var = htmlentities($var);
    $var = strip_tags($var);
    return $var;
}

function sanitizeMySQL($var)
{
    $var = sanitizeString($var);
    $var = mysql_real_escape_string($var);
    return $var;
}

Bu işleme için bütün bir ihtiyaçları POST ve GET veri var mı? Kaynak göz önüne alındığında, bu yeni başlayanlar için dumbed olmuştur ve daha sonra saldırmak için savunmasız kendimi gidiyorum korkuyorum.

Teşekkür ederim.

4 Cevap

Genellikle ve gelişigüzel gelen verileri "sterilize" mümkün değildir. Her zaman onunla ne yapmak istediğinize bağlıdır.

sanitizeString() yöntemi sayfanızın HTML çıktısı içinde görüntülenecek olduğunu size (teminatsız formundan örneğin) güvenemem içeriğini temizlemek için uygundur. Nothing else. Bu tür etiketler gibi bilgileri kaldırır ve özel karakterleri değiştirmek olacaktır.

sanitizeMySQL() yöntemi bunu, artı bir mySQL sorgu kullanmak için güvenli yapacaktır. Yine, bu kullanıcı girişi örneğin aşağı şerit istiyorsanız yararlı olduğunu bir ziyaretçi defteri veya shoutbox için. Eğer yetkili kullanıcılar ile bir CMS olsaydı, bunu yapmak istemem.

Hiçbir koşulda, her zaman gelen tüm değişkenleri için bu geçerlidir. Örneğin bir sipariş formu varsa, bu e-posta yoluyla size iletilir, htmlspecialchars() varlıkları içine tüm özel karakterleri dönüştürmek istiyorum - a ({[1) (]} gibi) tam anlamıyla görüntülenmesini sadece metin E-Posta. Bunu yapmak istemem.

I this iyi bir cevap olduğunu düşünüyorum nerede kullanmak için ne sanitasyon genel bir bakış için. Ayrıca, gelen verilere dayalı olarak e-posta göndermek için gidiyoruz eğer, kontrol Mail injections.

Aksine eski MySQL sürücüsünü kullanarak ve mysql_real_escape_string, destekleyen bir daha modern sürücüsü kullanmak daha prepared statements (örneğin, PDO).

htmlentities dönüştürmek '<' ve '>' onların eşdeğer HTML karakter varlıkları içine, yani htmlentities hiçbir etkiye sahip olacak sonra strip_tags çağırıyor.

Sihirli tırnak (kullanım get_magic_quotes_gpc and get_magic_quotes_runtime Bu test etmek için) etkinse stripslashes sadece aranmalıdır.

Sen onunla ne tamamen bağlıdır çünkü kullanıcı girişi güvenli hale getirmek için sihirli mermi işlevi yoktur. Eğer bir metin kutusu var ve yukarıdaki fonksiyonu ile kullanabilirsiniz Örneğin, bu dize açık olacak:

javascript:someFunction()

bir sorun değil ki ... Eğer bir bağlantının bir onclick özelliğindeki bu kullanıcı girişi kullanmadığınız sürece. Olası? Tabii. Ama counterexample tarafından kanıtıdır.

Bunu tanıtmak veya istismar ve sonra uygun hareket olabilir açıklarını ne için kullanıcı girişi kullanıyorsanız anlamak zorundayız.

Bir no-beyin yüzden mysql_real_escape_string() SQL enjeksiyon durdurmak için yeterlidir. XSS durdurmak için çok daha belirsiz olduğunu.

İyi bir başlangıç. İdeal olarak, serbest biçimli olmayan şeyler için, size SQL içine gitmek için kodlanmış değerleri arama için bir switch deyimi (ya da herneyse) olarak girişini kullanabilirsiniz. Bu sanitizing cevapsız şeyleri önlemeye yardımcı olur.