SQL Injections voorkomen
In principe moet je nooit inkomende data blindelings vertrouwen. Hoe betrouwbaar de gebruikersgroep er ook uit mag zien. Er zijn een aantal manieren om SQL injections te voorkomen.
Probeer de waardes altijd te casten.
Als we een veld nodig hebben dat alleen een numerieke waarde bevatten, dan kunnen we zorgen dat we deze waarde casten naar int zodat we zeker weten dat we een integer waarde binnen krijgen:
$id = (int) $_GET['id']; $query = "SELECT * FROM data WHERE id = {$id}"
Escapen van strings
In PHP is het mogelijk om speciale karakters zoals '
te escapen. Hiervoor kan de functie
mysqli_real_escape_string
gebruikt worden.
$username = mysqli_real_escape_string( $_POST['username'] ); $query = "SELECT * FROM users WHERE name = '{$username}'";
Prepared statements
Door middel van een prepared statement wordt de structuur van de query vooraf al vastgelegd. We geven daarbij tevens aan welke waardes we op welke plekken verwachten. Alles wat daarvan afwijkt zal resulteren in een foutieve query.
Beperken van de gebruikersrechten
In principe is dit het verdoezelen van een mogelijk probleem. Maar als je echt wilt voorkomen dat er mogelijk tabellen worden verwijderd. Dan kun je ervoor kiezen om de rechten zodanig in te stellen dat er alleen records gelezen, ingevoerd, gewijzigd en verwijder mogen worden. Alle andere mogelijke opties kun je dan uitschakelen. Op deze manier zou de data iets veiliger kunnen zijn.