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.