Security issues
Als eerste een uitspraak die ik heb geleerd en welke veel zegt over de gebruiker:
Vertrouw de input van een gebruiker nooit.
Daarom zal ik een paar punten noemen waar je op moet letten en wat je er mogelijk tegen kan doen.
Denk aan het risico van mysql injections, site defacing, crosssite scripting enz. Dit is via bijvoorbeeld een slecht stukje script en een userinput via de url al mogelijk.
Cross-site scripting
Dus probeer nooit deze vorm:
Een veilige vorm hiervan is:
Hierbij word gecontroleerd of jij het toegestaan heb d.m.v. de array en ook gekeken of het bestand bestaat. Een aanroep van de pagina zou kunnen zijn:
http://www.domein.nl/index.php?pagina=downloads
De aanroep van
http://www.domein.nl/index.php?pagina=gevoeligbestand
leidt dan gewoon naar default.php
Als deze beveiliging er niet in zat dan had je gewoon het volgende aankunnen roepen:
http://www.domein.nl/index.php?pagina=http://www.badsite.nl/badfile
In het script word dit:
http://www.domein.nl/index.php?pagina=http://www.badsite.nl/badfile.php
Een simpel voorbeeld van het badfile.php
Bedenk zelf maar wat je meer kan uithalen met dit scriptje...
Integer waarden
Zoals in deze tuturial al vermeld zijn er een aantal filter mogelijkheden voor cijfer s (integers). Eén functie wil ik jullie niet onthouden: intval
Deze functie kan je bijvoorbeeld aanroepen als de is_int/is_numeric aanroep mislukt. Deze functie verwijderd alle tekens behalve cijfers. Nu kan je weer gaan kijken of het wel een correcte waarde is. (en je kan de event loggen).
Hier een voorbeeld code met mail functie als er iets verkeerd gaat:
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
if(isset($_GET['id']) && is_int($_GET['id']))
{
echo $_GET['id'];
}
else
{
//Verkeerde waarden uitfilteren
$id = intval($_GET['id']);
$hacked = 1;
if(!empty($id))
{
echo $_GET['id'];
}
else
{
$hacked = 2;
die("Hacking attempt");
}
if($hacked == 1)
{
//bijv naar een simpel txt bestandje schrijven
}
else
{
//mail sturen, urgente situatie ;)
}
}
?>
Ik hoop je met dit voorbeeldje weer een beetje dichterbij de noodzaak te brengen van security. Ik heb dit ook een poos onderschat, totdat ik een eigen online rpg game opzette. (Ja, criminals ik weet het :))
Ik zal ook nog kijken voor een voorbeeld met strings...