GET ve POST verileri doğrudan kullanıcıya gönderilen veridir. Siz kullanıcı ve program arasında hiçbir çek veya doğrulama ile, çiğ olsun. Eğer verileri köken gereken formu doğrulamak için olsa bile, bir saldırganın elle o ne isterse veri ile bir istek oluşturabilir. Yani her zaman güvenilmeyen kullanıcı girişi gibi istek verileri tedavi gerekir.
Orada o isteği verileri güvenilmez unutmadan coder'da güveniyor saldırıların bir dizi, ama en iyi bilinen SQL enjeksiyon. SQL enjeksiyon kök nedeni elle dizeleri birleştirerek bir sorgu inşa ediyor, bazıları güvenilmeyen kullanıcı girişi vardır. Bu güvenilmeyen kullanıcı girişi yürütmek için veritabanı söylüyorum demektir.
SQL enjeksiyon naif çözüm girişleri doğrulamak ve daha sonra bir sorgu dizesi onları birleştirmek için, ama bu da kötü şeklidir. Sen dize güvenli yapmak için doğrulama mantığı güvenmek ve bunu yanlış varsa - ya da mantığı adamcağız - o zaman bir kez daha saldırılara maruz kalmaktadır.
Doğru çözüm, içerdiği verilerin adresinin sorgusu ayırmaktır. Hemen hemen tüm veritabanı adaptörleri Bu yaklaşımı destekleyen ve sizin nedense değilse, bu kullanım için uygun değil. En yaygın deyim (özel bir dilde) olan:
myDB.query ("select * Stuff id =?", [42]);
Bu parametrelerin yürütülmez (örneğin, bir sistemde) garanti eder. Güvenilmeyen veri ayrılmış iken sorgu dizesi, tamamen güvenilir verilerin yerleşik. En kötü ihtimalle, bu yaklaşım yanlış veri değil, bir yanlış komut neden olabilir yanlış girişine uygulanmıştır.
SQL enjeksiyon kaçınmak için bu yaklaşım istek veri saldırıları her türlü geçerlidir merkez ilkesini vurgular: isteği veri sizindir değildir ve güvenli değil. Istek veriler dahil olmak üzere herhangi bir kullanıcı girişi tutarken, her zaman sistem samimi bilgisi olan bir saldırganın kaynaklanan ediyor varsayalım. Bu paranoyak görünebilir, ama güvenli tutar.