login  Naam:   Wachtwoord: 
Registreer je!
 Nota's op tutorial:

Tutorials > PHP > Veilig paginasysteem
Pagina:

Reacties op de tutorial Veilig paginasysteem


Offline  nemesiskoen
Gepost op: 05 januari 2006 - 10:59
Gouden medaille

PHP expert


Iets als dit:
  1. case 'home': $sInc = 'home.php'; break;
  2. case 'links': $sInc = 'links.php'; break;
  3. case 'contact': $sInc = 'contact.php'; break;


is gelijk aan dit:
  1. case 'home': case 'links': case 'contact': $inc = $_GET['page'] .".php"; break;

Offline  Wijnand
Gepost op: 05 januari 2006 - 11:21
Moderator

trouwens, ik zou geen eregi() gebruiken maar preg_match();

Offline  ece
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

Offline  Barato
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).

Offline  Tuinstoel
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.

Offline  leendert
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().

Offline  XenoX
Gepost op: 07 januari 2006 - 18:36
Gouden medailleGouden medaille

PHP expert


Include kan geen externe pagina's includen. Dus wat is er dan niet veilig aan ?

Offline  Tuinstoel
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;-) .

Offline  Richard
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

Offline  Ultimatum
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??

Offline  Maarten
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.

Offline  Tuinstoel
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.

Offline  leendert
Gepost op: 12 januari 2006 - 22:29
HTML beginner

preg_match() is sneller.

Offline  Tuinstoel
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.

Offline  Ultimatum
Gepost op: 14 januari 2006 - 01:07
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.


ja maar hij zet er autmatisch .php achter dus zou de link
?page=http://www.sitemasters.be.php worden en dat doet het niet (tenzij een file zo heet natuurlijk ^^)

btw, nog niet gezegd, maar goeie tutorial 

Offline  Button
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.

Offline  Thomas
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:

  1. <?php
  2. if(isset($_GET['pagina'])) {
  3. // bepaal pagina
  4. switch($_GET['pagina']) {
  5. case "...": $page = "..."; break;
  6. ...
  7. // geen zinnige pagina gevonden, include een default pagina
  8. default: $page = "...";
  9. }
  10. } else {
  11. // geen pagina ingevuld, toon een default pagina
  12. $page = "...";
  13. }
  14. require($page);
  15. ?>


Dit kan ook korter door $page een initiële waarde te geven.

Offline  ikkedikke
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.

Offline  Tuinstoel
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è.

Offline  ikkedikke
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 ?

Offline  Threetimes
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.

Offline  Showie
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 ?

Pagina:

Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.062s