Temel SQL Enjeksiyon?

3 Cevap php

Ben sorgu SQL enjeksiyon eğilimli bir previous question söylendi.

get_stats = mysql_query("SELECT * 
                               FROM visitors 
                              WHERE site='$_GET[site]' 
                                AND date BETWEEN '$start_date' AND '$end_date' ");

Ne bu soruna yaklaşım kolay yolu olurdu? Ve biraz daha enjeksiyonları konuda okuma var mı? (Google'da kaçırabilir şey). Teşekkürler!

3 Cevap

Kullan Prepared Statements.

Çoğu durumda, hazırlanan Tablolar güvenli bir şekilde, kendi parametreleri ile sorgu birleştirme işi.

$ _GET ['Site'] düz bir kullanıcının kolayca istedikleri şey için bu değeri değiştirmek olabilir demektir tarayıcıda URL'den gelen bir değer olduğunda, kontrol etmelisiniz / bu değeri sterilize, tüm değerler aslında bir veritabanına göndermeden önce .

Böyle bir şey bir başlangıç ​​olacağını, hala daha fazla iş kullanımı ve bunu yapmanın birçok yolu var olduğunu olabilir, kolayca site genelinde aracılığıyla tüm değişkenleri geçmek için özel bir fonksiyon / sınıf yaratacak hangi olabilir böyle basit tekrarlayan şeyler

$site = mysql_real_escape_string($_GET['site']);
$start_date = mysql_real_escape_string($start_date);
$end_date = mysql_real_escape_string($end_date);

get_stats = mysql_query("SELECT * FROM visitors WHERE site='$site' AND date >= '$start_date' AND date <= '$end_date' ");

mysql_real_escape_string güvenliğinin en temel ve en kolay şeklidir burada.