[PHP] register_global staat aan, hoe var bron weten?

Pagina: 1
Acties:

Onderwerpen


  • spleethoven
  • Registratie: Oktober 2010
  • Laatst online: 24-01-2024
Ik werk voor een bedrijf dat aan klanten een webcms aanbied. Dit is compleet custom made en heeft ongeveer een drieduizendtal klanten en een paar duizenden mensen die inloggen per dag.

Doordat we heel hard gegroeid zijn en dit niet voorzien was, zijn er voor mijn tijd (werk er nu een jaar of 2) een aantal beslissingen genomen die eigenlijk verkeerd waren. Zo zitten we nu met een infrastructuur van de jaren 90.

We zijn ons best aan het doen om alles wa te updaten en vooral onze security te verbeteren.

Een van die foute beslissingen is het gebruik van register_global. Het gebruik hiervan komt erop neer dat variabelen gewoon kunnen gebruikt worden zonder te specifieren vanwaar deze komt.

Zo kan je op een pagina $_SESSION['test'] = "bla"; (in ons geval zelfs session_register("test"); 8)7 )aanzetten en op de volgende gewoon $test gebruiken.

Nu zouden we willen weten vanwaar al deze variabelen komen. Heeft er iemand een goed idee hoe dit aan te pakken?

Het gaat om duizenden .php files. Dingen zoals een debugger zouden wel kunnen, maar is wel serieus duur in manuren.

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:01

Ventieldopje

I'm not your pal, mate!

Ik zou er niet eens mee beginnen te checken waar ze vandaan komen, dit gaat echt enorme problemen opleveren. De tijd die je er in steekt kun je beter gebruiken om het te herschrijven zonder gebruik te maken van register_global ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Makkelijk zat: register_globals uitzetten, notice-meldingen aanzetten en dit bovenaan je code zetten:
PHP:
1
2
3
extract($_SESSION);
extract($_GET);
extract($_POST);

Vervolgens comment je de eerste regel weg en kijk je naar welke notices je krijgt: die variabelen komen uit $_SESSION. Rinse and repeat met de andere twee bronnen en je hebt het wel zo'n beetje gehad.

Al ben ik benieuwd of het de moeite waard gaat zijn. Zoals Ventieldopje al zegt zou dit wel eens meer problemen kunnen opleveren en tijd kunnen kosten dan de zaak opnieuw opzetten.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Jullie overdrijven, dit kan nooit even veel werk zijn als een totale rewrite.

Andere optie: Nog even aanlaten en alle gebruikte keys in alle globals een tijdje loggen.

{signature}


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Evenveel werk misschien niet, maar je gaat hier maanden later wel nog steeds problemen mee ondervinden tenzij je voor elke usecase en daarbinnen voor elke mogelijke optie een test doet. En dat laatste is verdomd tijdrovend in een applicatie van "duizenden PHP-files" zoals de topicstarter zei. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.