Kan iemand enkele voorbeelden geven van wat register_globals
is?
En wordt global $user_id;
beschouwd als een globaal register?
Antwoord 1, autoriteit 100%
De register_globals
richtlijn:
register_globals
is een interne PHP-instelling die de elementen van de $_REQUEST
array als variabelen registreert. Als u een waarde opgeeft in een formulier, via POST
of 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 true
retourneren.
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_globals
aan staan, dan zou je eenvoudig ?authorized=1
aan de URL en god-mode kunnen toevoegen zou zijn ingeschakeld!
Het global
zoekwoord:
global
is 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
, COOKIE
vermeldt, heeft effect op register_globals=on
.
Ik schrijf dit alleen om je te laten weten dat –
$_SESSION
zal 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.
$_REQUEST
$_POST
$_GET
$_COOKIE
Laten we ons nu concentreren op de $_REQUEST
SuperGlobal. Het wordt gebruikt om gegevens te verzamelen na het indienen van een HTML-formulier per gebruiker met behulp van de POST
-methode.
$_POST
en $_REQUEST
kan losjes worden gebruikt. Maar $_REQUEST
bevat ook $_GET
en $_COOKIE
Samen met $_POST
Dus u weet nooit of u weet of uw gegevens kwam uit een webformulier.
Zoals aangegeven door @Tim is register_globals
een interne PHP-instelling die de elementen van de $_REQUEST
array als variabelen registreert. Het staat ook bekend als een flag
in 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.
- “aan”
- “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.