Prodigal Skrevet 14. august 2007 Skrevet 14. august 2007 Dette er hentet fra index siden og er include-funksjonen for menyen. Er det mulig å gjøre denne litt mer sikker? <?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"); } ?>
Crowly Skrevet 14. august 2007 Skrevet 14. august 2007 (endret) 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 Endret 14. august 2007 av crowly
ZoRaC Skrevet 14. august 2007 Skrevet 14. august 2007 Hva skjer om jeg skriver "?page=../../../../../annenPHP-fil" Ville brukt $p = basename($_GET['page']);
Crowly Skrevet 14. august 2007 Skrevet 14. august 2007 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"; } //.... ?>
Bakke Skrevet 15. august 2007 Skrevet 15. august 2007 Den måten er da lite praktisk om du har mange sider. Dabear har skrevet et flott guide om dette her: https://www.diskusjon.no/index.php?showtopic=291972
supermodps2 Skrevet 15. august 2007 Skrevet 15. august 2007 (endret) 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. 0 => array( 0 => 'test', // Link href. ( filnavn ) 1 => 'Tester', // Diverse, f.eks. Link Navn 2 => '2', // Kan jo være permission id her, eller noe sånt. ), // Link 2. 0 => array( 0 => 'test', // Link href. ( filnavn ) 1 => 'Tester', // Diverse, f.eks. Link Navn 2 => '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 15. august 2007 av supermodps2
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå