L'unico modo è sfuggire correttamente ai dati inviati dall'utente. Altri hanno indicato alcuni modi per farlo.
C'è un altro modo:dichiarazioni preparate e segnaposto. Le dichiarazioni preparate sono supportate da ogni moderno Interfaccia del database PHP, incluso mysqli e DOP .
Usiamo PDO come dimostrazione. Supponiamo di voler aggiornare un po' di dati nella tabella foo
inviato da un utente.
$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
Le variabili nell'array sono passate a execute
sostituire i segnaposto punto interrogativo nella query. Quando ciò accade, vengono automaticamente sottoposti a escape e citati . Non è necessario eseguire l'escape manuale per renderli sicuri da inserire nel database!
D'altra parte, dovrai comunque filtrarli per contenuti imprevisti, come HTML, Javascript, lettere in cui ti aspetti numeri, ecc. Rendere i dati sicuri da inserire nel database è solo metà della battaglia .