Nou ik heb dit stukje script gemaakt die met $_GET['id'] een query uitvoerd ....
<?
if($_GET['id'])
{
if(is_numeric($_GET['id']))
{
$mgs_sql = "SELECT * FROM news WHERE id = '$_GET[id]'";
$mgs_res = mysql_query($mgs_sql);
if(mysql_num_rows($mgs_res) == 0)
{
echo "<b>Het opgegeven bericht bestaat niet!</b>";
}
else
{
while($mgs = mysql_fetch_array($mgs_res))
{
echo "<p><b>" . $mgs['titel'] . "</b> door <u>" . $mgs['door'] . "</u> op <i>" . $mgs['datum'] . "</i> :<br>";
$bericht = nl2br($mgs['bericht']);
echo $bericht;
echo "<p><a href=\"Javascript:history.back(-1)\" class=\"normal\">Terug...</a>";
}
}
}
else
{
echo "<b>Er is heeft een ongeldige bewerking plaatsgevonden. De pagina is niet geladen!</b>";
}
}
else
{
echo "<b>Er is heeft een ongeldige bewerking plaatsgevonden. De pagina is niet geladen!</b>";
}
?>
... nou is mijn vraag hoe veilig is dit? Kan iemand op een of andere manier mijn query beinvloeden? (met erge gevolgen bedoel ik)
nee die hoeft niet, het is alleen handig om erbij te zetten als je kolomnamen of tables spaties erin hebben
maar dat is meestal overbodig, het ziet er alleen netter uit omdat je precies weet wat een tabel/kolom is
voor de duidelijkheid doe ik het meestal net zoals keys het doet, netjes en zeker weten veilig
maar ik zie wel dat keys hier een fout maakt, het is een integer, geen string dus hij moet zo:
mgs_sql = "SELECT * FROM `news` WHERE `id` = '.$_GET['id'].';';
Het risico met mysql is dat je niet kan vertrouwen wat je binnen het web binnen krijgt. Daarom raad ik aan ALLES te quoten of "addslashes" te gebruiken. Dat dicht het volgende mogelijke lek:
En wanneer je (zonder magic quotes) de volgende code gebruikt:
<?
$naam = $_GET['naam'];
$sqlquery "SELECT * FROM namen where naam = $naam";
// .. lalala uitvoeren, etc
?>
Wat gebeurt er wanneer een grapjas als naam
'naam; drop table namen' invoert?
In principe niets, omdat ';' dmv magic quotes een slash krijgt, en niet als mysql commando wordt geintrepeteerd.
Verder, als we het over veiligheid hebben: 10 centjes van mij.
Boek: Hackers guide, uigeverij SAMS, anonieme schrijver. 1000 pagina's. Zeer goed boek met uitgebreide veiligheidsinformatie van C tot PHP, van Apache tot ISS, van windows tot LINUX. Te koop voor 25 tot 50 euro bij de locale boekenboer of beurzen. Nederlandstalig.
http://www.owasp.org/documentation
Open Web Application Security Project. Houd zich bezicht met veiligheid van Webscripts/talen. Erg veel kennis op te doen over spelende zaken op het gebied van veiligheid. Goed vertoeven in documentatie, algemene kennis. Engelstalig.
http://www.hackers4hackers.org
Voormalig webzine voor veilgheid-geinteresseerde mensen. Veel info over de gehele breedte, goede (maar verouderde) artiekelen met uitleg over spelende lekken in Linux tot Windows C, perl, CGI applicaties.
http://pear.php.net/manual/nl/standards.php
PEAR coding standards. Regels om je aan te houden voor het coden voor het PEAR project. Gericht op het leesbaar houden van PHP code, en netjes coden. Lees het eens aandachtig door, smijt het door de printer.
Er zijn er meer, maar ik ben moe, en zal ze later nog eens opduikelen.
Nog even wat ideetjes die ik nu opdoe voor phphulp.nl:
[o] Tips!
[o] een goede FAQ
[o] Een team van mensen die regelmatig nuttige artiekelen schrijft.
?
Onbekende gebruiker
16-03-2004 23:42
Ik raad je wel aan altijd die ` krengen te gebruiken. Dan kom je niet opeens te staan met een vage error die je "niet kan verklaren". Er zijn in mysql namelijk gereserveerde "woorden". Ik had ooit een keer de rij naam "limit". MySQL is dan in de war. Gebruik dan `om aan het aan te duiden.