Nasıl PHP ile $ _GET-değişkenler veri dezenfekte mi?
Sen do not $ _GET verileri sterilize. Bu PHP yaygın bir yaklaşımdır, ancak * tamamen yanlış.
Tüm değişkenleri dizenin başka bir tür onları gömmek noktasına kadar düz metin biçiminde kalmalıdır. Eğer değerler içine gömme olabilir dize, bütün türlerini kapsayacak hiç kimse kaçan biçimi ya da 'sanitization' yoktur.
Eğer SQL sorgusunun içine bir dize gömme eğer Yani, dışarı yolda onu kaçmak gerekiyor:
$sql= "SELECT * FROM accounts WHERE username='".pg_escape_string($_GET['username'])."'";
HTML içine dize tükürme konum Ve eğer, o zaman kaçmak gerekir:
Cannot log in as <?php echo(htmlspecialchars($_GET['username'], ENT_QUOTES)) ?>.
Eğer başında $ _GET dizisinde bu kaçan adımların hem yaptıysak, ne yaptıklarını bilmiyorum insanlar tarafından önerilen:
$_GET['username']= htmlspecialchars(pg_escape_string($_GET['username']));
Sonra kullanıcı adınızla bir '&' vardı, o gizemli veritabanındaki '&' dönüşecek, ve kullanıcı adınız bir kesme işareti olsaydı, bu sayfadaki iki kesme dönüşecekti. Bunu bu karakterler ile bir form var o zaman onlar çok kötü PHP CMSs O \ \ \ \ "New kitap gibi kırık makale başlıkları ile sona neden olan, düzenlenmiş yaparken çift kaçan şeyleri sonuna kadar kolaydır \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 'Reilly ".
Doğal olarak, pg_escape_string veya mysql_real_escape_string hatırlamak, ve bir değişken göndermek her zaman herkesin yazısının başında bir yerde (yanlış) bunu yapmak istiyor neden olan, biraz sıkıcı htmlspecialchars. HTML çıktı için, en az yankı (htmlspecialchars (...)) yapar kısa bir isimde bir fonksiyon tanımlayarak bazı yazarak kaydedebilirsiniz.
SQL için, Parametrelenmiş sorguları kullanarak daha iyidir. Postgres için var pg_query_params. Eğer belirtildiği gibi (ben şahsen onları daha yönetilebilir bulmak olsa) ya da aslında, ifadeleri hazırladı. Her iki şekilde de, daha sonra 'hijyen' veya SQL için kaçan unutabilirsiniz, ancak HTML dahil dize diğer türleri embed eğer hala kaçmak gerekir.
strip_tags () HTML görüntüleme için giriş tedavisinde iyi bir yol değildir. Tarayıcınız ayrıştırıcılar aslında çok daha karmaşık bir etiket düşündüğünüzden daha ne olabilir kendi yorumuyla olduğu gibi geçmişte de, güvenlik sorunları olmuştur. htmlspecialchars () yerine kullanmak için hemen hemen her zaman doğru bir şey, o yüzden eğer birisi türleri daha az-daha işaretiyle aslında alırsınız işaretiyle az daha ve yarım onların metin gizemli kaybolan bulamazsınız değişmez.
(*:. Enjeksiyon sorunları çözmek için genel bir yaklaşım olarak, yine Doğal olarak belirli alanlarda yapıyor değer alanı özgü kontrolleri vardır ve gönderilen değerler tüm kontrol karakterleri kaldırarak gibi yapabilirsiniz yararlı temizleme görevleri vardır Ama bu. Çoğu PHP kodlama sanitasyonuyla ne demek değil.)