Avatar billede akyhne Nybegynder
17. marts 2008 - 17:21 Der er 19 kommentarer og
2 løsninger

variabler i adresser

Det er åbenbart for lang tid siden jeg har rodet med PHP.

Jeg har lige flyttet en side til en anden host, og nu virker mine variabler ikke længere.

Hvis jeg har et link der ser således ud: http://www.minside.dk/index.php?menu=envariabel
og jeg ikke kan bruge/fange værdien envariabel fra menu, hvad mangler der så?

register_globals er slået til!
Avatar billede hmortensen Nybegynder
17. marts 2008 - 17:44 #1
Hvordan ser koden ud?
Avatar billede akyhne Nybegynder
17. marts 2008 - 17:51 #2
Hvad mener du?
Jeg døber bare en variabel i toppen af siden: $menunavn = $menu og bruger $menunavn de steder hvor jeg skal.

Men hverken echo $menu eller echo $menunavn giver noget output.
Avatar billede akyhne Nybegynder
17. marts 2008 - 17:56 #3
Jeg har ikke ændret noget som helst, og siden har kørt problemfrit hos en anden host i to år.
Avatar billede smitten1 Nybegynder
17. marts 2008 - 18:01 #4
hvis $menunavn = $_GET['menu'];
virker, så er det nok alligevel register globals
Avatar billede akyhne Nybegynder
17. marts 2008 - 18:24 #5
Det virker tilsyneladende med $_GET
Avatar billede akyhne Nybegynder
18. marts 2008 - 17:18 #6
Så vidt jeg husker er der en vis usikkerhed i at bruge $_GET eller husker jeg forkert?
Avatar billede dkfire Nybegynder
18. marts 2008 - 17:46 #7
Så længe du validere dine inputs fra brugere, om det så er fra $_POST eller $_GET de kommer fra, så skulle der ikke være noget problem i $_GET.
Der i mod er der en stor sikkerhedsrisiko ved at have register_global sat til on.
Avatar billede akyhne Nybegynder
18. marts 2008 - 20:01 #8
Kan du uddybe hvorfor, eller henvise til en fyldestgørende forklaring?
Avatar billede dkfire Nybegynder
19. marts 2008 - 00:27 #9
Hvad vil du have jeg skal uddybe ??

At du skal validere alt som kommer fra brugere ???
Det gi er lidt sig selv, du kan på forhånd ikke være sikker på at det du forventer en bruger sender, faktisk er det som brugeren sender, til dit script.

At register_global ikke skal være sat til on ?
Register_global betyder at alle dine variabler er globale, det gør at en bruger udefra kan påvirker dit script, da en vilkårlig variabel i dit script også kan gives en værdi ved at skrive variablens navn og nye værdi i f.eks. adresselinjen når scriptet kaldes.

Håber det gav lidt mening. Har desværre ikke lige et link til noget mere tekst, men søg på google og du vil sikkert finde noget.
Avatar billede dkfire Nybegynder
19. marts 2008 - 00:42 #10
Avatar billede akyhne Nybegynder
19. marts 2008 - 01:15 #11
Det er bare mig der er lidt tungnem.

Hvis jeg har en side hvor brugeren bliver dirigeret videre via variabler i links, er det vel lige meget for sikkerheden om jeg bruger $_GET eller jeg bruger globale variabler. Brugeren kan da stadig gå op i adressefeltet og ændre værdien på variablen.
Avatar billede akyhne Nybegynder
19. marts 2008 - 01:16 #12
...men jeg må hellere nærstudere dine links og se om det giver bedre forståelse.
Avatar billede olebole Juniormester
19. marts 2008 - 01:41 #13
<ole>

<?
// Her modtages $bla via URL'en:
if ($bla=="blabla") {
  // En masse kode, der ender op i,
  // - at $noget bliver sat
    $noget = "foo";
}

if ($noget) {
    // Gør et eller andet
    // - på baggrund af $noget
}
?>

Hvis jeg som bruger kan gætte, der er en variabel, der hedder $noget, kan jeg bare sætte den i URL'en og springe $bla-betingelsen over. Det ville jeg ikke kunne, hvis register_global var sat til 'off'.

Det er godtnok ikke god kodeskik at spørge på en variabel, man ikke selv har initialiseret - men kommer man til at lave sådan en bommert, blotter man sig fatalt, hvis register_global er sat til 'on'.

Der er masser af andre eksempler  ;o)

/mvh
</bole>
Avatar billede dkfire Nybegynder
19. marts 2008 - 10:53 #14
Når du har sat register_global til on, så kan bruger, udover at ændre den variabel du har sat i links, ændre samtlige andre variablers startværdi i adresselinjen.

Hvis du bruger $_GET så er du sikker på at kun de variabler du vægler at hente fra adresselinjen bliver brugt i dit script, og på det6 tidspunkt du vægler at bruge dem. Alle andre variabler i scriptet har de værdier du regner med de har.
Avatar billede dkfire Nybegynder
19. marts 2008 - 10:56 #15
Og hvis man skulle lave et link til oleboles script:

olescript.php?bla=blabla

Men det kan også skrives som:

olescript.php?noget=hejhej

Hvilket jo bevirker at kun sidste if-sætning bliver kørt.
Avatar billede akyhne Nybegynder
19. marts 2008 - 11:14 #16
Ok, så fes den ind :-)
Avatar billede akyhne Nybegynder
13. april 2008 - 02:41 #17
Point?
Avatar billede akyhne Nybegynder
12. juni 2008 - 23:30 #18
Lukker..
Avatar billede dkfire Nybegynder
13. juni 2008 - 07:43 #19
Et svar, hvis du føler jeg har har hjulpet :-)
Avatar billede olebole Juniormester
13. juni 2008 - 15:23 #20
;o)
Avatar billede akyhne Nybegynder
13. juni 2008 - 15:38 #21
Takker for god forklaring fra begge.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester