Hallo,
Ik ben bezig met mijn script te beveiligen voor SQL injections, nu heb ik wat op het internet gelezen maar staan er wat voorbeelden waar ik niet wijzer van word

Ik heb nu een voorbeeld code dat ik gebruik: en ik vraag me af of ik het goed doe
<?php
if (isset($_GET['id']))
{
$naamID = $db->real_escape_string(trim($_GET['nameID']));
$id = intval($_GET['id']);
$idnext = $id + 1;
$goo = $db->query("SELECT * FROM category INNER JOIN post ON category.name = post.cat WHERE post.cat = '" .$naamID. "' AND post.id = $id") or die($db->error);
}
?>
Is naamID een type char of varchar? dan moet je die inderdaad escapen met real_escape_string(). en de $id is nummeriek zo te zien, Je gebruikt hierbij intval() waardoor $id niets anders meer kan zijn dan een geheel getal. En daarmee kunnen hackers geen grappen uithalen met je database.

Je kunt ook een stapje verder gaan door te werken met prepared statements: http://php.net/manual/en/mysqli.prepare.php
Wat heeft een prepared statement voor voordelen ten opzichte van hoe het nu gedaan is?
Het voordeel is dat de query parameters gescheiden blijven van de query structuur.

Als je eens googled op 'mysql_real_escape_string versus Prepared Statements' dan leer je dat mysql_real_escape_string niet in alle situaties veilig is en dat je deze ook zou kunnen vergeten als programmer. Prepared statements vergeet je nooit want dan werkt je query simpelweg niet.
Het nadeel is dat die parameters aan een prepared statement verbonden zijn.

Vanuit de database gezien bestaan prepared statements NIET VOOR SECURITY, maar gewoon on snel(ler) een aantal dezelfde queries met verschillende parameters achter elkaar uit te kunnen voeren

Reageren