PHP yasadışı karakter desen kurtulmak için düzenli ifade oluşturma

3 Cevap php

PHP, bir PHP sayfası kırmak için kullanılan potansiyel zararlı bir karakter listesi nedir? Ve, düzenli ifadeler kullanarak, nasıl benim kullanıcı girişi tüm karakter kötü dizisini filtre?

Bir e-posta geçerli olup olmadığını .. Örneğin kontrol etmek için ben aşağıdaki satırı kullanılabilir:

preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$",$email);

E-posta belirli bir desen için bu yukarıdaki denetler.

Giriş her giriş için bir ifadeyi kullanarak herhangi bir geçersiz karakter desenlerini Ama, eğer bir e-posta normal bir ifade kullanarak geçerli olup olmadığını kontrol ederken, sadece seviyorum, nasıl kontrol ederim? Ben bir $_GET veya $_POST sayfasını çökmesini herhangi bir hacker gibi girişleri önlemek için kabul benim php sayfanın en üstünde bu çizgiyi yerleştirmek istiyorum.

Hope this makes sense. Thank you PG

3 Cevap

Hiçbir giriş doğal olarak geçersiz hatta mutlaka kötü niyetli olduğundan size açıklamak gibi giriş süzme hiç "bir ve tek" yolu vardır. Bu do girişi ile bu konularda ne tamamen bulunuyor.

Örneğin, $_GET['field'] bazı metin var varsayalım ve bir SQL sorgusu oluşturmak üzeresiniz. Sen escape kullanarak değer mysql_real_escape_string() (MySQL için, elbette) gibi pek gerekir:

$sql = "INSERT INTO some_table (some_field) VALUES ('" . mysql_real_escape_string($_GET['field']) . "')";

Bu kaçışa bir SQL sorgusunda kullanılarak konum girişine uygulamak için kesinlikle çok önemlidir. Burada gördüğünüz gibi uygulandığı bir kez, bir hacker bile kötü niyetli giriş veritabanı üzerinde hiçbir kötü etkisi olacaktır.

Ancak, bu işlev yararsız ve sayfanızda bazı HTML çıktı $_GET['field] dahil olmak üzere eğer düpedüz wrong kullanmak için hem de. Bu durumda, işlev htmlspecialchars() yararlıdır. Sen böyle bir şey yapacağım:

echo "<p>Your comments were: " . htmlspecialchars($_GET['field']) . "</p>";

Her ikisi de bu örnekler oldukça güvenli "hacker gibi girdilerin." Eğer veritabanına veya HTML içine kötü niyetli veri ekleme olmayacaktır. Oysa, kaçan iki biçimleri tamamen farklı fonksiyonları, kullanımı her uygundur fark.

Eğer aynı anda bu iki kullanım için girdi "doğrulamak" için çalıştı aksine, hayal. Bu Cross-Site Scripting gibi kötü niyetli HTML saldırısının parçası olabilir çünkü kesinlikle, < veya > karakter izin veremezdi. Yani, yazmak istiyorum ziyaretçiler stymied olurdu "Ben 1 <3 düşünüyorum". Aynı şekilde, kötü niyetli SQL enjeksiyon saldırıları korkusuyla tırnak işaretleri izin veremezdi, çok kötü "Miles O'Brien" formunuzu doldurun asla!

Eğer (genellikle giriş doğrularken bile daha kolay!) Farklı bağlamlarda kullanmak henüz sonuç çok daha iyi olduğu gibi uygun giriş escaping, yapmak çok kolaydır.

Girişini temizlemek için çok daha iyi yolları vardır. Yerleşik işlev strip_tags hızlı olacaktır.

Eğer yerleşik htmlentities PHP işlevleri () içine ve mysql_real_escape_string () aramak, HTML karakterleri ve / veya saldırıları SQL injection türlerini içeren olacak kullanıcı girişi konusunda endişeleriniz varsa.

Ayrıntılar için docs okuyunuz: http://us2.php.net/manual/en/security.database.sql-injection.php