MySQL Kodlanmış sorgusu, boşluk yok

3 Cevap php

Ben MySQL ile hiçbir boşluk isteği oluşturmak mümkün olup olmadığını bilmek istiyorum?

Ben kendi web sitesinin güvenliğini test, ve ben koydum: str_replace(" ", "", $POST['id']); Tüm SQL injection olur:

id=-1 UNION SELECT pass...

strReplace sonra:

-1UNIONSELECTpass

O bana kendi web güvenlik yüksek seviyede verir misiniz? Bir sorgu SQL enjekte etmenin başka yolları var mı?

Ben zaten sorguda () bir mysql_real_escape_string koyduk.

3 Cevap

SQL enjeksiyon önlenmesi oldukça geniş bir konudur (ve ona okumak için orada bol), ama yazdım örnekte basit bir korunma yöntemi muhtemelen size sadece bir tamsayı kabul ediyoruz sağlamak olacaktır. Yani bir şey gibi:

var $id = (int)$_POST['id'];

Ve sonra sorguda $ id kullanın.

PDO ile hazırlamak

http://php.net/manual/en/pdo.prepare.php

Calling PDO::prepare() and PDOStatement::execute() for statements that will be issued multiple times with different parameter values optimizes the performance of your application by allowing the driver to negotiate client and/or server side caching of the query plan and meta information, and helps to prevent SQL injection attacks by eliminating the need to manually quote the parameters.

Ayrıca, bu iyi bir soru / cevap kısmına bakınız:

http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php

@ Boris, sana Haim tavsiyesi @ takip ve PDO kullanmanızı öneririz. Bu tür app daha fazla veritabanı agnostik yapma ve çalışmak için tercih ettik ne olursa olsun veritabanı altyapısı SQL enjeksiyonu önlemek için kaçan mekanizmasının sağlanması gibi birçok avantaj sağlayacaktır.

Ben özellikle SQL enjeksiyon sorunları ile ilgili bir bölüm içerdiğini birkaç yıl önce PHP webapp güvenliği ile ilgili bir makale yazdım. Ben daha iyi ve daha güncel malzeme artık orada eminim, ama güvenlik endişeleri farklı türleri hakkında daha fazla ve nasıl bunları önlemek öğrenmek için bunu kontrol etmek zarar veremezler: Real-world PHP Security . İyi şanslar!