Søger du en specifik kategori?

 



Oprettet tir. d. 03. februar 2009 kl. 16:39

googolplex
googolplex (33.713 point)
Guidens karaktér
1
2
3
4
5

Register Globals Off

Lad os slå en ting fast med det samme - register_globals = Off er en god ting, i hvert fald set ud fra et sikkerhedsmæssigt synspunkt. Det kan dog stadig volde problemer, hvis man ikke har arbejdet med det før, men løsningen ligger heldigvis lige for.
Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

Se eksempelvis på følgende formular:

<form action="nyside.php" method="post">
    <input type="text" name="fornavn" value="" /><br />
    <input type="text" name="efternavn" value="" /><br />
    <input type="submit" name="send" value="Send" />
    <input type="reset" value="Nulstil" />
</form>

Når formularen 'submittes' får du på siden 'nyside.php' automatisk adgang til følgende variabler:

$fornavn (indeholder det brugeren indtastede som fornavn)
$efternavn (indeholder det brugeren indtastede som efternavn)

På samme måde gælder det for følgende URL:

http://domaene.dk/nyside2.php?artikelID=125&side=3

Her får vi i 'nyside2.php' adgang til:

$artikelID (125)
$side (3)

Det er naturligvis dejlig nemt, men desværre ikke særlig heldigt set ud fra et sikkerhedsmæssigt synspunkt (Læs mere på http://dk.php.net/ (...)).

Derfor sætter man ofte register_globals = Off. Det betyder, at variablerne i overnstående eksempel ikke længere er tilgængelige per automatik. Har man baseret sin kode på register_globals = On virker den naturligvis ikke længere!

Variablerne ligger dog stadig gemt i følgende superglobale arrays:

$_POST - Her ligger variablerne sendt med post-metoden (fx $_POST['variabel'])
$_GET - Her ligger variablerne sendt med get-metoden (fx $_GET['variabel'])
$_REQUEST - Her ligger variablerne fra fra både $_POST, $_GET (og $_COOKIE - se senere)

Personligt bruger jeg $_POST og $_GET i stedet for $_REQUEST, så har jeg bedre styr på hvor variablerne kommer fra.

Det nemmeste er at gemme variablerne under nogle nemmere navne, i vores tilfælde ville vi indsætte følgende inden vi skal bruge dem:

$fornavn   = $_POST['fornavn'];
$efternavn = $_POST['efternavn'];
$artikelID = $_GET['artikelID'];
$side      = $_GET['side'];

Eller alternativet:

$fornavn   = $_REQUEST['fornavn'];
$efternavn = $_REQUEST['efternavn'];
$artikelID = $_REQUEST['artikelID'];
$side      = $_REQUEST['side'];

Herefter kan vi bruge variablerne præcis som vi gjorde med register_globals = On.

Det er naturligvis ikke nødvendigt at gemme dem først, vi kan også bruge dem direkte:

if (isset($_POST['fornavn']) && $_POST['fornavn'] == 'Peter')
{
    echo 'Hej Peter, du er min ven :-)';
}
else
{
    echo 'Du er ikke min ven :-(';

}

Hvis du skal konvertere din kode fra register_globals = On til register_globals = Off, er det nemmest at bruge den første metode. Så slipper du med at gemme dine variabler i starten af koden - i stedet for at foretage ændringer mange steder i din kode.

Som du forhåbentlig kan se, er det ikke så avanceret at konvertere til register_globals = Off og absolut noget du bør overveje uanset din konfigurationen!

Der findes i alt 9 superglobale arrays, her følger en liste:

$GLOBALS : Alle globale variabler, også andre superglobale variabler
$_COOKIE : Variabler modtaget fra cookies (HTTP cookies)
$_ENV    : Variabler fra serverens miljø - se i phpinfo() hvilke der er tilgængelige på din server
$_FILES  : Special array der kommer ved HTTP-POST-upload af filer
$_GET    : Variabler fra adresselinien eller en formular hvor method="get" (HTTP GET)
$_POST  : Variabler modtaget fra en formular hvor method="post" (HTTP POST)
$_REQUEST: Samling af $_GET, $_POST og $_COOKIE
$_SERVER : Variabler fra serveren - se i phpinfo() hvilke der er tilgængelige på din server
$_SESSION: Variabler fra brugerens session

Du kan læse mere om dem på http://dk.php.net/ (...)

Her på falderebet en lille funktion jeg har fundet og tilrettet. Den er til alle jer, der må lide under register_globals = On :-)

Smid den i starten af din kode (før du begynder at arbejde med variabler) så skal du bare se løjer ;-)

<?php

/* Funktion der 'sætter' register_globals = Off */
/* Void unregister_globals() */

function unregister_globals()

{
    $COOKIE = $_COOKIE;
    $ENV = $_ENV;
    $FILES = $_FILES;
    $GET = $_GET;
    $POST = $_POST;
    $REQUEST = $_REQUEST;
    $SERVER = $_SERVER;


    if (isset($_SESSION))
    {
        $SESSION = $_SESSION;
    }

    foreach ($GLOBALS as $key => $value)
    {
        if ($key != 'GLOBALS')
        {
            unset($GLOBALS[$key]);
        }
    }

    $_COOKIE = $COOKIE;
    $_ENV = $ENV;
    $_FILES = $FILES;
    $_GET = $GET;
    $_POST = $POST;
    $_REQUEST = $REQUEST;
    $_SERVER = $SERVER;

    if (isset($SESSION))
    {
        $_SESSION = $SESSION;
    }
}

/* Husk at bruge funktionen */

unregister_globals();

?>

Derudover kan du smide følgende i din '.htaccess':

php_flag register_globals off

Det kan bruges på nogle servere, alt efter hvad du har tilladelse til.

Bemærk: ini_set() kan ikke benyttes!

Håber du blev en smule klogere, vi ses på Eksperten!

Skrevet ons. d. 28. januar 2004 kl. 14:09| #1


Skrevet tir. d. 24. februar 2004 kl. 10:49| #2


Skrevet tir. d. 25. maj 2004 kl. 08:29| #3

alleykat (21.936 point)
Rigtigt go' oversigt over dem, og for en gangs skyld en ordentligt struktureret forklaring på det! Tak googolplex

Skrevet tor. d. 17. juni 2004 kl. 01:17| #4

123maka (10.605 point)
Supergod!

Skrevet tor. d. 29. juli 2004 kl. 02:56| #5

hyha (17.140 point)
Total nice artikkel. Efter at have bøvlet med dette problem i 4 uger, og så får man serveret det, vor herre ikke havde udstyret mig med...

Skrevet man. d. 16. august 2004 kl. 10:41| #6

smeier (14.500 point)
Fed artikel.

Skrevet søn. d. 05. september 2004 kl. 17:45| #7

morteeart (15.108 point)
Genialt, et must-read for enhver begynder. (eller øvede som ikke havde lært det fra starten ;)  :D

Skrevet tor. d. 23. september 2004 kl. 13:06| #8


Skrevet ons. d. 29. september 2004 kl. 13:59| #9


Skrevet søn. d. 24. oktober 2004 kl. 16:17| #10

talrinys (11.898 point)
Genialt, jo flere der ved at det er bedst at have den off jo bedre.

Skrevet tir. d. 09. november 2004 kl. 17:46| #11

gartzen (19.263 point)
God artikkel som er godt forklaret med gode begrundelser! Perfekt længde for en artikkel, efter min mening. Nem at forstå samtidig med at det hele er med! SUPER :D

Skrevet søn. d. 14. november 2004 kl. 19:06| #12

basementjack (20.181 point)
Sikkert god.. Ville rart hvis man kunne læse at det var om PHP, uden at smide 5 point efter den..

Skrevet søn. d. 16. januar 2005 kl. 18:15| #13

rjpa (17.316 point)
Den er sku god, lærte mig noget nyt i dag også ;)

Skrevet tir. d. 18. januar 2005 kl. 19:07| #14

espersen (72.714 point)
fin fin ; udemærket artikel, fin gennemgang med eksempler så det er til at forstå.
og ja - den er jo oprettet under PHP, hvilket den også omhandler ;o)

Skrevet man. d. 14. februar 2005 kl. 04:51| #15


Skrevet tor. d. 17. februar 2005 kl. 06:49| #16

Rigtig god og velformuleret artikel /Wicez

Skrevet ons. d. 23. marts 2005 kl. 04:51| #17

tfswebguy (14.667 point)
En af de korteste, mest detaljerede og beskrivende artikler jeg længe har landet på. Det er sku dejligt at se :o)
Kører selv scripts med Register Globals til On, da det er det jeg har lært mig til fra starten af.. Men nu hvor der er noget overblik over funktionerne vil jeg begynde at omprogrammere til Reg = Off :o)

Skrevet lør. d. 16. april 2005 kl. 17:58| #18

horizon (11.987 point)
Superfin!

Skrevet tir. d. 28. juni 2005 kl. 15:29| #19


Skrevet tir. d. 09. august 2005 kl. 22:01| #20

jesperjuul (12.675 point)
Jeg synes den er udmærket. For den der ikke vidste det i forvejen er det i hvert fald nyttig viden.

Skrevet ons. d. 20. juni 2007 kl. 23:22| #21


Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger