Veilig pagina systeem
15-10-2011 11:03
Offline Stuur privëbericht
R. Jipping
Berichten: 1593

Pagina systeem
Het principe van een veilig paginasysteem is heel eenvoudig, je moet er voor zorgen dat er geen ongewenste pagina's kunnen worden geïnclude. Voor het oplossen van dit probleem heb je 3 simpele
oplossingen: Het gebruiken van Switch case en break , gebruiken van array’s of het gebruik van reguliere expressies.

Wat is het risico?
Wat is nou eigenlijk het risico van het niet beveiligen van een pagina systeem? Voor een pagina systeem gebruiken we een include, als je hem niet beveiligd zullen de website bezoekers dus ook andere websites kunnen includen. Ze kunnen dus een hack op hun eigen website zetten en dan hun link aanroepen via jou include: http://www.jouwwebsite.nl/index.php?p=http://www.hackerwebsite.nl. Het ziet er heel simpel uit maar zo kunnen ze wel aan jou database gegevens komen.

Switch case en break:
De simpelste, maar wel veilige oplossing is het gebruiken van Switch case en break. Je schrijft dus handmatig op welke pagina’s er bestaan en sluit ze naderhand af. Veilig is het zeker, maar functioneel is het niet als je veel pagina’s hebt. Denkt dat het naar een simpel voorbeeldje wel duidelijk is dus, wil er niet te diep op ingaan.

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if(isset($_GET['pagina']))
    {
    switch(
$_GET['pagina'])
        {
        case 
'home'$sInc 'home.php'; break;
        case 
'links'$sInc 'links.php'; break;
        case 
'contact'$sInc 'contact.php'; break;
        default: 
$sInc 'nieuws.php'; break;
    }
    include 
$sInc;
    }
?>


Array’s
De bedoeling van array’s in een pagina systeem is dat je in_array() kunt gebruiken om te controleren als de genoemde link voor komt in de array. Je kunt het natuurlijk ook in combinatie doen met de reguliere expressies, maar vind het zelf een beetje dubbel op.

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
$aPaginas 
= array('voorpagina','leden','misdaad','forum'); 
    
// Een gewone array, met daarin de pagina's die in je ftp vermeld staan en dus toegankelijk zijn voor de leden.

if(isset($_GET['pagina'])) 
    { 
    if(
in_array($_GET['pagina'],$aPaginas)) // Er word gecontrolleerd als de naam in de array voorkomt.
        

        if(
file_exists($_GET['pagina'].'.php')) //File_exists gaat controleren als het bestand bestaat.
            
{
    include 
$_GET['pagina'].'.php'// Als het klopt gaat hij hier de pagina includes anders:        } 
        
else 
              {
        echo 
'De pagina bestaat niet.'// De pagina is niet gevoden door de file_exists functie.
    

        } 
    else 
        {
    echo 
'Ongeldige pagina opgegeven.'// De pagina komt niet voor in de array
         

    } 
?>


Reguliere expressies:
Reguliere expressies, is gewoon een soort van array waarin je de namen zet die niet in de link mogen voorkomen. Wat je hier dus doet is ongewenste tekens inzetten zoals http, www, php, html. Etc..

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$sExpressie 
"(http:|www.|.php|.html|.asp|.js|.css)";
    
// Hierboven zie je dus de tekens die je bijvoorbeeld kunt verbieden.

if(isset($_GET['p']))
    {
    if(
eregi($sExpressie,$_GET['p']))
        
// Hierboven word dus gecontrolleerd als de verboden tekens gebruikt worden.               {
            
echo 'Ongeldige pagina opgegeven.';
        }
    else
        {
        if(
file_exists($_GET['p'].'.php')) //File_exists gaat controleren als het bestand bestaat.
            
{
            include 
$_GET['p'].'.php';  // Als het klopt gaat hij hier de pagina includes anders:
            
}
        else
            {
            echo 
'De opgegeven pagina bestaat niet.'// Bestaat het bestand niet dan word hij dus niet goedgekeurd.
            
}
        }
    }
?>


Slot
Je kunt dus een van deze mogelijkheden gebruiken om een pagina systeem te maken, je kunt nu je links veranderen naar bijvoorbeeld index.php?p=voorpagina. Binnenkort plaats ik een artikel over hoe je deze links mooi kunt maken doormiddel van .htaccess. Succes met het gebruik van de pagina systeem.

R.Jipping
PS: (Spel)fouten graag doorsturen via pb zodat ik ze onder de loep kan nemen.
Skydiving!
Berichten: 1386
Offline Stuur privébericht
Ik gebruik een heel simpel pagina systeem.
Ik maak vooral kleine websites, die hooguit 8 pagina's bevatten.
Daarom is dit pagina systeem om die reden dan ook erg gemakkelijk.

Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$pagina 
$_GET['pagina']; // De naam van de pagina ophalen

//De goede pagina ervoor halen
switch($pagina)
{
// De gekozen pagina ophalen, case is vraag, include is antwoord
case 'pagina1':
include(
'pagina1.html');
break;
case 
'pagina2':
include(
'pagina2.html');
break;
case 
'pagina3':
include(
'pagina3.html');
break;
//als er niets is opgegeven gebruik je de hoofdpagina
default:
include(
'begin.html');
}
?>


Om een pagina op te roepen gebruik je de volgende link:
index.php?pagina=pagina1


Extra aanvulling op de Switch, case en break methode
2011-10-31 13:40:37