Gå til innhold

include meny sikkerhet


Anbefalte innlegg

Dette er hentet fra index siden og er include-funksjonen for menyen.

Er det mulig å gjøre denne litt mer sikker? :hmm::nei::yes:

 

<?php

$p = $_GET['page']; // ?page=

$ex = "php"; // File extension

$folder = "includes"; // Folder where the files you want to include is

$main = "main"; // Main page

$error = "404"; // 404 error page

 

if (empty($p)) {

include("$folder/$main.$ex");

}

else if (file_exists("$folder/$p.$ex")) {

include("$folder/$p.$ex");

}

else if (!file_exists("$folder/$p.$ex")) {

include("$folder/$error.$ex");

}

?>

Lenke til kommentar
Videoannonse
Annonse

Trenger du virkelig $ex og de andre varriablene? er det ikke bare å legge til hele path'en i includen ?

 

For å være på en sikre siden så ville jeg ha hatt med en "ren" else også, i tilfelle noe uforutsett så går den dit. Evt så kan du vurdere en kombinasjon av IF og SWITCH.

 

PHP
<?php

$ex = ".php"; // File extension

$folder = "includes/"; // Folder where the files you want to include is

$main = "main"; // Main page

$error = "404"; // 404 error page

 

if (empty($_GET['page']) OR !isset($_GET['page'])) 

  include $folder.$main.$ex;

else if (file_exists($folder.$p.$ex)) 

  include $folder.$p.$ex;

else if (!file_exists($folder.$p.$ex)) 

  include $folder.$error.$ex;

else // forsikkerhetsskyld 

  include $folder.$main.$ex;

?>

 

Jeg bruker alltid en SWITCH og spesifiserer hver fil som kan inkluderes i en egen case og en default. Henter aldri filnavnet fra "brukerdata", aldri stol på brukeren :p

Endret av crowly
Lenke til kommentar

Som jeg skrev i den andre posten så ville jeg egentlig ikke ha brukt brukerdata i include. Bør kanskje bruke include_once(). Kan jo sjekke $_GET['page'] om den inneholder ../ og lignede verdier, og så gå direkte til feilmeldingen, eller strippe dem ut før include. Bør nok validere innholdet for å forsikre seg om at det inneholder informasjon som forventet.

 

Jeg bruker alltid denne metoden, som blir litt mer å skrive, men er tryggere da brukerdata kun påvirker hvilken case som blir utført og ikke selve include'en.

(ett utdrag fra ett av mine tidligere skript)

PHP
<?php

//....

switch ($_GET['opt'])

{

case 'brackets':

include "brackets.php";

break;

case 'signup':

include "signup.php";

break;

case 'reggame':

if ($s[0]=="Cup")

include "reggame_cup.php";

else 

include "reggame.php";

break;

case 'cupd':

include "cupd.php";

break;

default:

if ($s[0]=="Cup")

include "cup.php";

else

include "results.php";

}

//....

?>

Lenke til kommentar

det som kanskje er best er å definere sider i et array. Da dette er lettere å få dynamisk..

 

Det som er fordelen med et array er at man kan lett legge til f.eks. at man trenger de og de rettighetene for at PHP skal inkludere denne filen ..

 

Lagde dette så det er lett å forstå:

PHP

<?php

// Her lager vi et array over linker. Hver link har forskjellige spesifikasjoner

// Dette array er veldig bra fordi vi kan legge til funksjoner for siden f.eks. at en annen ikke har lov å gå på denne siden

// fordi han har en annen rank en 2.. etc.

$links = array(

 

// Link 1.

=> array(

=> 'test'// Link href. ( filnavn )

=> 'Tester'// Diverse, f.eks. Link Navn

=> '2'// Kan jo være permission id her, eller noe sånt.

),

 

// Link 2.

=> array(

=> 'test'// Link href. ( filnavn )

=> 'Tester'// Diverse, f.eks. Link Navn

=> '2'// Kan jo være permission id her, eller noe sånt.

),

 

);

 

 

$site $_GET['page'];

 

 

// Hvis vi får page la oss se hva vi gjør med det..

if ($_GET['page'] != ''){

// Skjekk gjennom hver link om denne link finnes i vårt array..

foreach($links as $link){

// Hvis pagen vi mottar = arrayen.. jepp da inkluderer vi.

if ($site == $link['0'] && $exit_arr == FALSE){

 $include_path "includes/".$link['0'].".php";

 $exit_arr TRUE;

}

}

// Hvis siden ikke finnes i vårt array ->

if ($include_path == ''){

$include_path "includes/main.php";

}

// Hvis vi ikke får noe page.. include denne filen

}else{

$include_path "includes/main.php";

}

// Ok. Da er vi klar, da inkluderer vi filen da...

include $include_path;

?>

Endret av supermodps2
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...