Tutorials >
PHP >
Veilig paginasysteem
|
Gepost op: 05 januari 2006 - 10:59 |
|
|
|
PHP expert
|
Iets als dit:
case 'home': $sInc = 'home.php'; break;
case 'links': $sInc = 'links.php'; break;
case 'contact': $sInc = 'contact.php'; break;
case 'home': $sInc = 'home.php'; break; case 'links': $sInc = 'links.php'; break; case 'contact': $sInc = 'contact.php'; break;
is gelijk aan dit:
case 'home': case 'links': case 'contact': $inc = $_GET['page'] .".php"; break;
case 'home': case 'links': case 'contact': $inc = $_GET['page'] .".php"; break;
|
|
|
|
Gepost op: 05 januari 2006 - 11:21 |
|
|
|
Moderator
|
trouwens, ik zou geen eregi() gebruiken maar preg_match(); |
|
|
|
Gepost op: 05 januari 2006 - 22:40 |
|
|
|
HTML interesse
|
Nooit geweten dat je zo een site kon hacken met zoiets:S nou ja weet ik het nu:D. Dan ga ik daar opletten. (Y) tutorial:D |
|
|
|
Gepost op: 06 januari 2006 - 12:38 |
|
|
|
Nieuw lid
|
"Reguliere expressies worden doorgaans het meest gebruikt."
volgens mij niet, en ik zou het ook niet doen. een array is veiliger en sneller. bovendien kun je bij jouw voorbeeld nog steeds een oneindige lus maken door ?pagina=index
met een array of switch werk je bovendien vanuit het principe dat alles verboden is, tenzij expliciet is opgegeven dat het mag. dat is gewoon net wat veiliger. een keer vergeten iets aan die array toe te voegen is minder erg dan vergeten dat je wachtwoorden via ?pagina=../config uitgelezen kunnen worden (als ze daarin als php vars staan is er nog niet veel aan de hand, dus dit voorbeeld is niet heel goed). |
|
|
|
Gepost op: 06 januari 2006 - 13:30 |
|
|
|
PHP expert
|
Citaat: [I][B]Barato[/B] schreef op 06 Januari 2006 - 12:38[/I]
"Reguliere expressies worden doorgaans het meest gebruikt."
volgens mij niet, en ik zou het ook niet doen. een array is veiliger en sneller. bovendien kun je bij jouw voorbeeld nog steeds een oneindige lus maken door ?pagina=index
met een array of switch werk je bovendien vanuit het principe dat alles verboden is, tenzij expliciet is opgegeven dat het mag. dat is gewoon net wat veiliger. een keer vergeten iets aan die array toe te voegen is minder erg dan vergeten dat je wachtwoorden via ?pagina=../config uitgelezen kunnen worden (als ze daarin als php vars staan is er nog niet veel aan de hand, dus dit voorbeeld is niet heel goed). Ik was vergeten dat allemaal er in te zetten, heb er gister avond nog wel aan gedacht maja toen had ik een feest. |
|
|
|
Gepost op: 06 januari 2006 - 15:48 |
|
|
|
HTML beginner
|
if(eregi($sExpressie,$_GET['pagina']))
Als je het speciaal met reguliere expressies wilt doen ( wat niet slim is want dan kan je beter strpos(), strstr() gebruiken ) gebruik dan idd preg_match(). |
|
|
|
Gepost op: 07 januari 2006 - 18:36 |
|
|
|
PHP expert
|
Include kan geen externe pagina's includen. Dus wat is er dan niet veilig aan ? |
|
|
|
Gepost op: 07 januari 2006 - 19:22 |
|
|
|
PHP expert
|
Citaat: [I][B]XenoX[/B] schreef op 07 Januari 2006 - 18:36[/I]
Include kan geen externe pagina's includen. Dus wat is er dan niet veilig aan ? LoL, ik heb in het verleden heel wat websites omzeild hiermee, dat hangt gewoon van de server instelling af;-) . |
|
|
|
Gepost op: 08 januari 2006 - 13:45 |
|
|
|
Crew algemeen
|
inderdaad, include kan prima externe sites gebruiken, en als je ervoor zorgt dat php niet van te voren geparsed word (of speciaal geparsed terug word gegeven)... word het uitgevoerd op die server, en kun je alle bronnen zo vinden:P |
|
|
|
Gepost op: 09 januari 2006 - 12:33 |
|
|
|
PHP expert
|
ja, maar met dat include systeem dat jij in tutorial gebruikt checkt ie of de pagina bestaat, dus als je http://sitemasters.be/index.php wel bestaat, maar die vind hij niet terug op de server dus krijg je toch een error terug, dus wat is er nou niet veilig aan dan?? |
|
|
|
Gepost op: 11 januari 2006 - 20:12 |
|
|
|
Erelid
|
Je kan bijvoorbeeld ook al je includes in een aparte map stoppen, zoals
/inc/mods/.
En dan roep je aan met ?mod=iets.
Dan controleer hij of /inc/mods/iets.php bestaat en wordt dat evt geinclude.
Vervolgens zal ?mod=http://www.sitemasters.be/evil.php niet werken aangezien /inc/mods/http:// .. zeker niet bestaat.
Als je alles gewoon in je root map zet kan dat inderdaad wel, omdat hij dan gewoon checkt of http:// .. bestaat.
Goede tutorial. |
|
|
|
Gepost op: 11 januari 2006 - 20:16 |
|
|
|
PHP expert
|
Citaat: [I][B]Murfy[/B] schreef op 11 Januari 2006 - 20:12[/I]
Je kan bijvoorbeeld ook al je includes in een aparte map stoppen, zoals
/inc/mods/.
En dan roep je aan met ?mod=iets.
Dan controleer hij of /inc/mods/iets.php bestaat en wordt dat evt geinclude.
Vervolgens zal ?mod=http://www.sitemasters.be/evil.php niet werken aangezien /inc/mods/http:// .. zeker niet bestaat.
Als je alles gewoon in je root map zet kan dat inderdaad wel, omdat hij dan gewoon checkt of http:// .. bestaat.
Goede tutorial. Eindelijk een positieve reactie:) . Maar nu moet ik nog eens weten waarom preg_match() beter is. |
|
|
|
Gepost op: 12 januari 2006 - 22:29 |
|
|
|
HTML beginner
|
|
|
|
Gepost op: 13 januari 2006 - 14:20 |
|
|
|
PHP expert
|
Citaat: [I][B]leendert[/B] schreef op 12 Januari 2006 - 22:29[/I]
preg_match() is sneller. Mja. Hangt er van af, maar dat zul je zelf denk ik ook wel beredeneerd hebben?
Het zal geen seconden schelen, en als je niet een zeer belaste server hebt dan zou eregi geen kwaad kunnen, maar dan blijft preg_match altijd nog beter. |
|
|
|
Gepost op: 17 januari 2006 - 18:31 |
|
|
|
PHP ver gevorderde
|
Citaat: [I][B]JeXuS[/B] schreef op 08 Januari 2006 - 13:45[/I]
inderdaad, include kan prima externe sites gebruiken, en als je ervoor zorgt dat php niet van te voren geparsed word (of speciaal geparsed terug word gegeven)... word het uitgevoerd op die server, en kun je alle bronnen zo vinden:P
JeXus wat bedoel je met "en als je ervoor zorgt dat php niet van te voren geparsed word (of speciaal geparsed terug word gegeven)? en op welke pagina bodoel je dan ? op de index.php met het includesystem of op source.php met de show_source erin. |
|
|
|
Gepost op: 17 januari 2006 - 19:38 |
|
|
|
Moderator
|
file_exists() lijkt me ook een redelijk dure operatie? Verder is het nogal suf dat je gaat controleren of een bestand bestaat op je eigen server, je wéét namelijk welke bestanden je hebt, maak hier dus ook gebruik van in je switch-statement. De "lompste" (?) manier is IMO de netste (en meest logische) manier.
Verder kun je door dit soort switch-statements te maken je site hiërarchisch indelen. In je root-index.php zou je weer kunnen verwijzen naar index.php-bestanden van subonderdelen.
Ook is het misschien netter om een soort errorpage te maken, in plaats van zo'n "kale boodschap". Werk met defaults:
<?php
if(isset($_GET['pagina'])) {
// bepaal pagina
switch($_GET['pagina']) {
case "...": $page = "..."; break;
...
// geen zinnige pagina gevonden, include een default pagina
default: $page = "...";
}
} else {
// geen pagina ingevuld, toon een default pagina
$page = "...";
}
require($page);
?>
<?php if(isset($_GET['pagina'])) { // bepaal pagina switch($_GET['pagina']) { case "...": $page = "..."; break; ... // geen zinnige pagina gevonden, include een default pagina default: $page = "..."; } } else { // geen pagina ingevuld, toon een default pagina $page = "..."; } require($page); ?>
Dit kan ook korter door $page een initiële waarde te geven. |
|
|
|
Gepost op: 30 januari 2006 - 21:49 |
|
|
|
PHP expert
|
http://www.voor...hp?hack=ht tp:/ /w ww.voorbee ld.nl /index.php
moet http://www.voor...=index.php
zijn
verder wel goed uitgelegd. deze fout is veel gemaakt en duidelijk niet ongevaarlijk.
dit is nog een onschuldig voorbeeld, maar als iemand echt op zoek is naar dit soort gaten, kan die bijvoorbeeld servers platgooien door al die gaten tegelijk uit te buiten zonder dat hij zijn internetlijntje gebruikt.
|
|
|
|
Gepost op: 31 januari 2006 - 13:39 |
|
|
|
PHP expert
|
Citaat: [I][B]ikkedikke[/B] schreef op 30 Januari 2006 - 21:49[/I]
http://www.voor...hp?hack=ht tp:/ /w ww.voorbee ld.nl /index.php
moet http://www.voor...=index.php
zijn
verder wel goed uitgelegd. deze fout is veel gemaakt en duidelijk niet ongevaarlijk.
dit is nog een onschuldig voorbeeld, maar als iemand echt op zoek is naar dit soort gaten, kan die bijvoorbeeld servers platgooien door al die gaten tegelijk uit te buiten zonder dat hij zijn internetlijntje gebruikt. Is veranderd. 't Is ook weer lang geleden dat ik dat geprobeerd heb hè. |
|
|
|
Gepost op: 05 maart 2006 - 15:22 |
|
|
|
PHP expert
|
verder over die reguliere expressie:
waarom op shttp checken als je http gewoon er ook al uit filtert ? |
|
|
|
Gepost op: 02 januari 2007 - 21:37 |
|
|
|
PHP beginner
|
Citaat: Je hebt in principe 3 mogelijkheden om dit te voorkomen: manier 4: zet/haal alles in/uit de database. |
|
|
|
Gepost op: 16 maart 2007 - 18:29 |
|
|
|
Nieuw lid
|
En als je website pas geladen wordt, dus /index.php zonder een variabel achter.
Hoe laad je dan met dit script, die home.php ? |
|
|
Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties. |
|
|
|