Veiligheid ...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?
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>";
}
?>
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)
dat stukje code vangt iig alle slechte code op omdat er niets anders meer dan alleen cijfers ingevoert kunnen worden
dus wat dat betreft is dit wel veilig
mgs_sql = "SELECT * FROM news WHERE id = '$_GET[id]'";
-->
mgs_sql = "SELECT * FROM `news` WHERE `id` = '".$_GET['id']."'";
Ja ik weet dat hij "anders ook werkt". Zo is alleen beter :)
Ik ben idd bezig met "leren" netjes programmeren :)
Dat werd eindelijk een keertje tijd :)
Moeten die gekke ` ` ook perse?
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'].';';
Even aanvulling op Rick:
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:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
$naam = $_GET['naam'];
$sqlquery "SELECT * FROM namen where naam = $naam";
// .. lalala uitvoeren, etc
?>
$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.
http://nl2.php.net/get-magic-quotes-gpc
Het is een goede en veilige gewoonte om uit gewoonte alle data van en naar mysql te quoten.
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
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.
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.
Ik raad je aan geen mysql commando's als column naam te nemen en die vervelende `'s te vergeten ;))
het enige waar ik ze echt nuttig voor vind is het duidelijk maken van een query voor een ander, voor de rest maakt het weinig uit
Och, het is natuurlijk gewoon de netste manier om alles mooi te quoten, maar ik breng die dicipline gewoon niet op, zeker omdat het in perl ook nog aparte betekenis heeft en je met extra quotes zit om te escapen, en het gewoon moeite is die niet nodig is.
Maar: De vraag is natuurlijk: Hebben jullie mijn zuurgespaarde bookmarks al een vroege lach gegunt?
mayb kijk ik vanavond nog wel even.
beveiliging daar kan je nooit genoeg over weten ;)