[php] Wat veiligheids tips tegengekomen op Zend

Pagina: 1
Acties:

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hey,

ik kwam hier:
http://www.zend.com/tips/tips.php?id=223&single=1
wat veiligheidstips tegen en ik snap ze niet allemaal.

Dit zijn ze:
1. Always initialize your variables.
2. Turn register_globals off in php.ini.
3. Set your error level to E_ALL in php.ini while debugging, to help check for
any holes.
4. Use the built-in arrays.
Punt 1 snap ik niet, misschien dat ik het al wel doe, maar ik weet niet echt wat ze ermee bedoelen :?

Punt 2 is logisch, dat hoeft niemand uit te leggen (ik zou wel graag weten wat precies de reden is waarom je dat beter kunt doen en wat er anders mis kan gaan)

Punt 3 snap ik ook wel, dat is te doen, maar wat gebeurt er dan precies en moet je dan nog op een bepaalde manier debuggen om er 'gebruik van te maken'?

Punt 4 snap ik half, ik neem aan dat ze daar arrays als $GETENV enzo mee bedoelen?
Arrays die standaard dus al bestaan?

Verwijderd

Op donderdag 27 december 2001 15:35 schreef Tangletje het volgende:

Punt 1 snap ik niet, misschien dat ik het al wel doe, maar ik weet niet echt wat ze ermee bedoelen :?

dat ze alvast een variable zetten :?
iets van #variets = ""; :?
Denk ik :D

  • Juicy
  • Registratie: December 2000
  • Laatst online: 19:11
Deze opmerking is reeds ter harte genomen *D

-


Verwijderd

Op donderdag 27 december 2001 15:38 schreef Juicy het volgende:
Hee Xtentic, quote de volgende keer alleen het relevante stuk ... lastig lezen zo met "zoek de verschillen"
snel post geedited :X

*D laat um toch lekker staan :+

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

Inderdaad, hoe init je een variable dan? Zo'n ding bestaat toch uberhaupt pas als je iets doet als $var = "value"; of niet dan?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op donderdag 27 december 2001 15:40 schreef GeonetiX het volgende:
Inderdaad, hoe init je een variable dan? Zo'n ding bestaat toch uberhaupt pas als je iets doet als $var = "value"; of niet dan?
Variabelen initialiseren betekent ze een waarde geven, zodat ze niet van buitenaf veranderd kunnen worden. Als jij in je programma een variabele $i gebruikt als teller, moet je die op 0 zetten, want stel dat er iemand zou zijn die jouw programma als volgt zou oproepen 'test.php?i=3' zal dat jouw hele programma door de war gooien, omdat $i nu 3 is.

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 14-09 23:09
Op donderdag 27 december 2001 15:35 schreef Tangletje het volgende:
Hey,

ik kwam hier:
http://www.zend.com/tips/tips.php?id=223&single=1
wat veiligheidstips tegen en ik snap ze niet allemaal.

Dit zijn ze:

Punt 1 snap ik niet, misschien dat ik het al wel doe, maar ik weet niet echt wat ze ermee bedoelen :?
Voordat je een variabele gebruikt, altijd eerst initialiseren, dsu $var = '', zodat je zeker weet dat er geen informatie van buitenaf(GET/POST/Cookies/Sessions), in de die variabele zit. Nu vind ik dit persoonlijk niet erg nodig als je register_globals uit hebt staan, wat ik _altijd_ heb, aangezien er dan toch al geen vars in je global scope neergezet kunnen zijn.
Punt 2 is logisch, dat hoeft niemand uit te leggen (ik zou wel graag weten wat precies de reden is waarom je dat beter kunt doen en wat er anders mis kan gaan)
Door register_globals uit te zetten komen er geen variabelen met info van buitenaf in je global scope, maar alleen in bep. array's(HTTP_*_VARS of voor PHP4.1.*, _GET, _POST, etc.). Hierdoor los je meteen het probleem op van punt één, simpel voorbeeldje:
code:
1
2
3
if($pass == 'blaat'){
    $logged_in = TRUE;
}

Bij dit soort code kan een aanvaller dan $logged_in gewoon op waar zetten door dit in de URL mee te geven: blaat.php?logged_in=1. Dan ben je dus gelijk al je beveiliging kwijt, terwijl als je register_globals niet aanhad, er niks aan het handje was.

Zet daarom dus register_globals altijd uit. Nou is het wel erg irritant om de hele tijd met HTTP_*_VARS['var'] te moeten werken, du heb ik zelf een functie geschreven, die alleen de vars die je zelf aangeeft in de global scope importeert, waardoor je wel de extra beveiliging hebt, maar geen nadelen met één extra functie-aanroep per file. ik kan het bestand zo snel ff niet vinden, maar het is makkelijk zelf te schrijven met function_get_args() en de $GLOBALS array.
Punt 3 snap ik ook wel, dat is te doen, maar wat gebeurt er dan precies en moet je dan nog op een bepaalde manier debuggen om er 'gebruik van te maken'?
Je krijgt dan voor _alle_ dingen die er gebeuren meteen een foutmelding, en ze laten warnings niet zomaar gaan. Het voordeel hiervan is, dat je die dingen dan meteen kunt oplossen(het is niet voor niets een warning), en niet dat je er later achterkomt dat er iets fout mee was. Hierdoor kun je bijv. ongeinitialiseerde variabelen vermijden(en die waren juist zo irritant bij punt 1).
Punt 4 snap ik half, ik neem aan dat ze daar arrays als $GETENV enzo mee bedoelen?
Arrays die standaard dus al bestaan?
Klopt, in PHP4.1.* dus _GET, _POST etc., maar daarvoor HTTP_*_VARS. Nu vind ik dit zelf dus niet zo fijn, maar kijk maar of je mijn oplossing handig vind.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Ok bedankt, duidelijke uitleg...ik snap het nu allemaal, maar nog ff 1 ding:

Als je het volgende gebruikt dan is het toch niet nodig om register_globals uit te zetten of wel dan?
if($pass == 'blaat'){
$logged_in = TRUE;
} else {
$logged_in = FALSE;
}
Dan heeft een test.php?logged_in=TRUE namelijk geen zin...
Pagina: 1