Wat zijn register_globals in PHP?

Kan iemand enkele voorbeelden geven van wat register_globalsis?
En wordt global $user_id;beschouwd als een globaal register?


Antwoord 1, autoriteit 100%

De register_globalsrichtlijn:

register_globalsis een interne PHP-instelling die de elementen van de $_REQUESTarray als variabelen registreert. Als u een waarde opgeeft in een formulier, via POSTof GET, zal de waarde van die invoer automatisch toegankelijk zijn via een variabele in het PHP-script, genoemd naar de naam van de invoerveld.

Met andere woorden, als u een formulier heeft ingediend met een tekstveld username, wordt de uitdrukking ($username === $_POST['username'])op de het begin van het script zou trueretourneren.

De bekendheid ervan wordt toegeschreven aan het feit dat het veel beveiligingslekken opent, vooral voor mensen die vanuit een beveiligingsperspectief iets minder dan een strikte codeerstijl volgen.

Klassiek voorbeeld:

if(user_is_admin($user))
{
    $authorized = true;
}
if($authorized)
{
    // let them do anything they want
}

Als je dat script in een webbrowser hebt bezocht en de server had register_globalsaan staan, dan zou je eenvoudig ?authorized=1aan de URL en god-mode kunnen toevoegen zou zijn ingeschakeld!

Het globalzoekwoord:

globalis een zoekwoord dat weinig te maken heeft met register_globals.

Hier is een voorbeeld van het gebruik:

$foo = 'bar';
baz();
function baz()
{
    echo $foo; // PHP warns you about trying to use an uninitialized variable
               // and nothing is output (because $foo doesn't exist here)
}
buzz();
function buzz()
{
    global $foo; // Enables the use of $foo in this scope
    echo $foo; // Prints 'bar' to screen
}

Antwoord 2, autoriteit 22%

Iedereen die GET, POST, REQUEST, COOKIEvermeldt, heeft effect op register_globals=on.

Ik schrijf dit alleen om je te laten weten dat –

$_SESSIONzal ook worden beïnvloed vanwege register_globals=on.
http://php.net/manual/en/security.globals.php

Dat betekent – als je het volgende doet –

$_SESSION[x] = 123;
$x = 'asd';
echo $_SESSION[x];

De uitvoer is asd.

En dit zal ernstige beveiligingsproblemen en bugs veroorzaken. Ik heb onlangs zoiets ergs meegemaakt tijdens het gebruik van Hostgator shared hosting. Standaard hebben ze register_globals=on.


Antwoord 3, autoriteit 16%

Als je register_globals=on hebt, lijkt alles wat via GET of POST of COOKIE wordt doorgegeven automatisch een globale variabele in de code te zijn, dit kan gevolgen hebben voor de veiligheid.

D.w.z. je klikt op url test.php?access_level=100 en je hebt $access_level = 100 in PHP.

Als je globale $somevar doet, maak je je eigen globale variabele, wat meestal geen groot probleem is.


Antwoord 4, autoriteit 10%

De instelling register_globals bepaalt hoe u toegang krijgt tot formulier, server en omgeving. variabelen.

register_globals=Aan :

Je hebt toegang tot het formulierkenmerk zonder Global Arrays ( GET[], POST[] & REQUEST[])

voorbeeld:http://www.example.com /one.php?myinput=abc

Je hebt direct toegang in one.php

echo $myinput; // abc

register_globals=Uit:

U hebt alleen toegang tot alle attributen via Global Arrays.

voorbeeld:http://www.example.com /one.php?myinput=abc

Je moet toegang krijgen tot one.php

echo $_GET['myinput']; //abc

Antwoord 5, autoriteit 7%

Zoals ik het begrijp, wordt alles wat wordt doorgegeven in een GET of POST automatisch vertaald naar een variabele in PHP als je registerglobalen AAN hebt staan.

bijvoorbeeld:

http://www.domain.com/vars.php?myvar=123

zonder verdere codering zou dit automatisch worden omgezet in een variabele die beschikbaar is voor de rest van uw php-code

$myvar  //with a value of 123

Als geregistreerde globals UIT staan, worden gegevens die via GET of POST worden doorgegeven NIET automatisch vertaald in een variabele, maar moet u deze aanvragen met de Superglobals $_GET, $_POST en $_REQUEST, enz.

http://php.net/manual/en/security.globals.phpgeeft wat meer informatie over de beveiligingsimplicaties hiervan.

Anderen mogen me gerust corrigeren als ik het mis heb.

bewerken:

In relatie tot uw vraag opnieuw global $user_id;, dit maakt geen ‘Global’ in de zin van ‘register_globals’. Het verandert eenvoudigweg de reikwijdte van een variabele binnen de PHP-code.

Zie voor informatie reeks, zie: http://php.net/Manual /en/language.variabelen.scope.php


Antwoord 6, Autoriteit 5%

Registreer GLOBALS:

REGISTER_GLOBALS
De functie veroorzaakt gegevens die zijn doorgegeven aan een PHP-script via cookies of krijgen en plaatsen om verzoeken om beschikbaar te stellen als globale variabelen in het script.

Standaardwaarde: “0”

Veranderbaar: PHP_INI_PERDIR

REGISTER_GLOBALS wordt beïnvloed door de Varialbles_order-richtlijn.

Opmerking:

Deze functie is afgeweken vanaf PHP 5.3.0 en verwijderd vanaf PHP 5.4.0.


Antwoord 7, Autoriteit 3%

Globale variabelen in PHP zijn variabelen die altijd toegankelijk zijn. Ze zijn ook bekend als superglobals. Ze zijn gebouwd in variabelen die altijd beschikbaar zijn, ongeacht het bereik.

Er zijn negen superglobal-variabelen in PHP. Sommige hiervan zijn relevant voor deze discussie.

  1. $_REQUEST
  2. $_POST
  3. $_GET
  4. $_COOKIE

Laten we ons nu concentreren op de $_REQUESTSuperGlobal. Het wordt gebruikt om gegevens te verzamelen na het indienen van een HTML-formulier per gebruiker met behulp van de POST-methode.

$_POSTen $_REQUESTkan losjes worden gebruikt. Maar $_REQUESTbevat ook $_GETen $_COOKIESamen met $_POSTDus u weet nooit of u weet of uw gegevens kwam uit een webformulier.

Zoals aangegeven door @Tim is register_globalseen interne PHP-instelling die de elementen van de $_REQUESTarray als variabelen registreert. Het staat ook bekend als een flagin je php-instelling. Het wordt meestal ingesteld in het PHP-configuratiebestand dat bekend staat als het bestand php.ini. Deze instelling kan twee waarden hebben.

  1. “aan”
  2. “uit”.

Een “aan”-waarde betekent dat PHP automatisch globale variabelen maakt voor veel servervariabelen, evenals parameters voor queryreeksen. Dit is niet goed en vormt een veiligheidsrisico.

Other episodes