wer hat das verbrochen?!?!?!

stell dir mal folgendes Script vor:

PHP:
if($pass1 == $pass2) {
   $eingeloggt == true;
}

if($eingeloggt) {
...
...
}

Im alten PHP konnte man nun ein so unsauber programmiertes Script aushebeln, indem man per URL die Variable eingeloggt schon auf true setzt.

Im neuen PHP ab 4.2 ist das Script sicher, weil die Variable nicht mehr automatisch zur Verfügung gestellt wird.

Ciao, F.o.G.
 
ok und woher kennt der angreifer den varnamen eingeloggt ?

den kann er doch nur kennen wen ich die var über get übergebe und da kann ich wie gesagt ja nachwievor den inhalt der vars per hand im
browser ändern..

wenn ich die var per session oder post handle kann er sie nicht kennen
 
Klar kann er die kennen, wenn sie per POST geschickt wird. Einmal kurz in den Quelltext geschaut und fertig.

Und dieses register_globals auf off zu stellen schließt nicht nur eine Sicherheitslücke, sondern hat auch programmiertechnisch-logische Gründe: Denn warum sollten sich die EGPCS-Variablen, die ja von außerhalb kommen, im globalen Variablenscope meines Scripts befinden? Diese externen Variablen und deren Namen können ja je nach Umgebung variieren. Und dann hast du den Salat da, wenn plötzlich nach der Portierung auf ein anderes System (OS, Webserver etc.) irgendwelche fremden Variablen in dein Script reinpfuschen... do you get my point? ;)
 
schau mal, es kommt ja nicht drauf an, woher ein anderer weiß, wie die Variable heißt, sondern dass es da ein potentielles Sicherheitsleck gibt. Es gibt ja viele, die ihre Scripte auch schnell mal zum Download anbieten. Jemand kann sich dann das Script anschauen und wenn er dieses Sicherheitsleck findet, wird er es auch sicher probieren auszunutzen.

Von daher hilft dieses System, den Code sicherer zu halten.

Ciao, F.o.G.
 
ich glaube ich bin zu doof :-)
bei der neuen version sehe ich nicht mehr sicherheit

wir sind uns ja einig: egal ob get oder post die variablennamen kann
ich über den html quelltext erfahren (teileweise auch die inhalte)
und wir können uns sicher drauf einigen das ich den quelltext ändern
kann und php nicht feststellen kann, ob die formularvars von meinem server kommen oder von ausserhalb...(egal welche varversion)

wenn ich auch noch den php-quelltext zum download anbiete ist eh alles zu spät dann komme ich auf jedenfall in das script rein
und kann blödsinn verzapfen da ich so alle varinhalte kenne die wichtig sind.

(die einzige verbesserung ist wirklich nur die sache das ich im quelltext als coder sofort sehe: das ist eine externe var..)

ich denke die einzige möglichkeit die es für die sicherheit gibt ist
die session denn nur so kann ich sehen ob die vars von meinem script kommen oder von ausserhalb unabhängig davon ob ich sie
als $eingeloggt oder als $_get['eingeloggt'] anspreche

@reima warum sollten sich die variablen namen/inhalte beim systemwechsel ändern? das einzige was sich ändert sind systemspezifische functionsaufrufe und dann muss ich eh den code ändern..
 
Original geschrieben von melmager
@reima warum sollten sich die variablen namen/inhalte beim systemwechsel ändern? das einzige was sich ändert sind systemspezifische functionsaufrufe und dann muss ich eh den code ändern..

Zitat von http://www.php.net/manual/en/reserved.variables.php

Environment variables: $_ENV

Note: Introduced in 4.1.0. In earlier versions, use $HTTP_ENV_VARS.

These variables are imported into PHP's global namespace from the environment under which the PHP parser is running. Many are provided by the shell under which PHP is running and different systems are likely running different kinds of shells, a definitive list is impossible. Please see your shell's documentation for a list of defined environment variables.
 
guck dir mal das Beispiel oben an. da wird eingeloggt erst im Script erzeugt. Das wird nicht per URL übergeben oder so ... Wenn aber jemand das Script aushebeln will, dann ruft er das script einfach mit &eingeloggt=1 in der URL auf.

Im neuen PHP wäre dann nur $_GET[eingeloggt] auf true, aber die Variable $eingeloggt ist noch nicht definiert und somit gibt die if Abfrage false zurück. Damit wäre das Script sicher, obwohl es unsauber programmiert worden wäre.

Hoffe ich konnte alle Klarheiten beseitigen.

Ciao, F.o.G.
 
Hoffe ich konnte alle Klarheiten beseitigen.

jo konntest du :-)

trotzdem sollte man auch mit der neuen version auf sicherheit achten
denn wenn ich ein andres phpscript aufrufe muss ich ja die var
eingeloggt ja irgendwie übergeben :-)

aber zumindes sehe ich jetzt wenigstens einen kleinen sicherheitsgewinn
 
Zurück