Det enda sättet är att korrekt undkomma användarinlämnad data. Andra har pekat ut några sätt att göra det på.
Det finns ett annat sätt:förberedda uttalanden och platshållare. Förberedda uttalanden stöds av alla moderna PHP-databasgränssnitt, inklusive mysqli och PDO .
Låt oss använda SUB som en demonstration. Låt oss säga att vi ville uppdatera lite data i tabellen foo
skickat av en användare.
$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
Variablerna i arrayen skickades till execute
byt ut frågetecknets platshållare i frågan. När detta händer escapes de automatiskt och citeras . Du behöver inte escape dem manuellt för att göra dem säkra att lägga i databasen!
Å andra sidan kommer du fortfarande att behöva filtrera dem för oväntat innehåll, som HTML, Javascript, bokstäver där du förväntar dig siffror, etc. Att göra data säker att infoga i databasen är bara hälften av striden .