Forklaring af kode

Tags:    php

Hej udvikleren.dk

Det er længe siden jeg selv har brugt dette forum, men jeg føler nu at tiden er til det igen. Jeg har netop nu fået en privat udvikler mail fra en person som vil have hjælp til nogle liniers kode. Det er ikke fordi jeg ikke kan give ham løsningen, men jeg føler nu at alle skal have lov at svare.

Fold kodeboks ind/udKode 


Han vil gerne have en forklaring på overstående.



10 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Svend har jo næsten nailen den her. Ifølge: http://dk.php.net/manual/en/reserved.variables.request.php så ses det at $_REQUEST indeholder (per. standard, dette kan ændres i PHP konfigurationen):

$_GET
$_POST
$_COOKIE

Dvs. "tekst" kan komme fra querystringen (den del af URL'en efter "?"), fra et form post (dvs. POST data i et HTTP POST request) eller fra en cookie (en HTTP Header i requestet).

Hvad der dog ikke bliver nævnt nogle steder så vidt jeg kan se er den uanede mængder af sikkerhedshuller denne kode indebærer. Idet "tekst" kan være... hvad som helst - så er der intet her som stopper ondsindede personligheder fra at inkludere system filer som så kan printes ud og ses direkte på siden.

En bedre mulighed ville være at lave en whitelist over hvad der må inkluderes. F.eks. alla:

Fold kodeboks ind/udKode 


Denne kode vil nu inkludere "includes/menu.html" hvis $tekst er "menu", "includes/andet.html" hvis $tekst er "andet", osv. Hvis $tekst ikke indeholder noget, eller indeholder noget ugyldigt, så vil "includes/opbygning.html" blive inkluderet.

Det er generelt en god ide at forvente at dine brugere er nogle ondsindede personligheder som altid forsøger at få dit site til at crashe (eller at finde et sikkerhedshul) og at gardere sig selv mod dette, via principper som disse.



På den første linje tager den en variable fra enten $_POST, $_SESSION eller $_GET og lægger det over i en variable.

Hvis den variable indeholder noget, så inkluderer den en side med samme navn som variablens indhold.
F.eks. hvis variablen er "side.php", inkluderes "side.php".

Hvis variablen ikke indeholder noget, inkluderes "includes/opbygning.html".




Håber ikke min tekst blev for snørklet :-)




Indlæg senest redigeret d. 06.06.2010 21:14 af Bruger #14210
Kan umiddelbart ikke se at der er noget galt medmindre:
$_REQUEST['tekst'] er selve teksten og ikke path'en til selve teksten. Som det ser ud vil den inklude den fil som teksten beskriver og ikke selve det som $tekst er lig med.



Indlæg senest redigeret d. 07.06.2010 00:23 af Bruger #14645
Jeg fik også mailen. Har svaret tilbage på den, så der behøves ikke bruges alt for lang tid på det herinde. :)







Indlæg senest redigeret d. 06.06.2010 21:29 af Bruger #15766
Ja. $_REQUEST skal være en hel sti.



Umiddelbart hvis man vil bruge Kaare white list foreslag ville jeg nok foreslå enten at lave den i form af et array:

$whitelist=array(
"menu"=>"menu.html"
);

eller i en database/textfil.

Generelt er min erfaring at white list lyder som en god ide i starten, men den der switch ender som regel med at blive usandsynlig stor og skal opdateres for hver ny side der skal laves.



Umiddelbart hvis man vil bruge Kaare white list foreslag ville jeg nok foreslå enten at lave den i form af et array:

$whitelist=array(
"menu"=>"menu.html"
);

eller i en database/textfil.

Generelt er min erfaring at white list lyder som en god ide i starten, men den der switch ender som regel med at blive usandsynlig stor og skal opdateres for hver ny side der skal laves.


Du har helt ret i at det ville være meget smartere at anvende et array eller database, eller noget helt trejde til formålet. Koden var mere tænkt som noget der kunne sætte tankerne igang.

Og ja, det bliver mere bøvlet end den "lette" løsning, men det er nu engang prisen for at tænke på sikkerhed. Nu skal man jo så huske at der ikke er noget galt i heller at bruge sin dovenskab til noget fornuftigt og at lave et script eller noget tilsvarende til at automatisk generere denne stump kode når man opdaterer noget i sin kode - men dette ligger nok lidt uden for hvad der kendes til af PHP her, på selve spørgsmålet at bedømme.



Er helt enig man kunne bruge sin dovenskab til at lave et script der generere den form for kode, men det ikke alle der er udstyret med den noget specielle form for dovenskab.

Personlig selv bruger jeg dog noget i retning af det posteren skrev. Dog er det kun filens navn jeg sender uden extention. Så skal man bare teste på at det sendte ikke indeholder nogen '.'

Ser ud nogenlunde sådan her:
Fold kodeboks ind/udKode 


Det har den fordel synes jeg at det eneste jeg skal gøre er at ligge en fil i pages folderen.



Det behøver overhovedet ikke at blive bøvlet eller et opdateringshelvede. Man kan jo generere listen dynamisk:

Fold kodeboks ind/udKode 


At undlade et tjek er simpelthen for farligt.



t