Gå til innhold

Hvordan sikre et inkludescript?


Anbefalte innlegg

Jeg skal bruke et includescript, og vet at det er lett å msibruke disse. Hvordan skal jeg validere input'en fra $_GET ?

 

Denne bruker jeg på e-poster (noe omskrevet, bl.a. fra post til get), holder dette?

 

if (eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$', $_GET['side'])) {

Lenke til kommentar
Videoannonse
Annonse

Kan bruke switch. Da fungerer bare de "fil.php?side=bla" du selv har definert.

 

<?php

switch ($_GET['side']) {
case "side1":
$file = "side1.php";
break;
case "side2":
$file = "side2.php";
break;
default:
$file = "default.php";
}

include($file);

?>

 

Eller så kan du gjøre noe sånt som det her

 

<?php

$filer = array("side2.htm","side2.php"); 

// kan f.eks bruke scandir() i PHP5 til å fylle array med filer fra en mappe

if(in_array($_GET['side'],$filer))
{
include($_GET['side']);
}

else
{
echo("Nei nei hva driver du på med?");
}

?>

 

Er mange løsninger :p

Endret av shaker
Lenke til kommentar

En regel jeg har lært meg er at man ikke skal etterbehandle invalid data for å gjøre de valide. Er det et invalid input er det nok noen som prøver seg på noe snusk. Har tittet litt på Martins script, fikset litt selv og slengt ihop et script jeg selv syns ser nogenlunde sikkert ut ikveld. Eneste er at noen kan ha det moro med å sende meg en masse e-poster. Skal se om jeg ikke finner en måte å unngå det på. (Blokkere etter 50 e-poster e.l.)

 

Jeg har ikke planer om å bruke scriptet på annet enn bestemte undersider i porteføljen min, og side skal alltid være definert. Noen som vil se om jeg har latt en dør stå åpen eller vil hjelpe meg / gi feedback på scriptet? Har ikke så mye erfaring, men har skjønt at sikkerhet er viktig. :)

 

// php-taggene i forumet gir meg tekniske problemer, får bruke code..

<?php
   
   $side = $_GET['side'];
   $Til = '[email protected]';
   
   // Sjekker om $side er tom
   if(!empty($side)){
   	// Sjekker for null-byte
   	if(!preg_match("#\.\./|^/#", $side)){
     // Sjekker om filen eksisterer
     if(file_exists('les_mer/foto/' . $side . '.html')){
     
     include('les_mer/foto/' . $side . '.html');
     
     }
     // Hvis filen ikke eksisterer
     else{
     
     	$IP         = $_SERVER['REMOTE_ADDR'];
     	
     	// Om $IP er endret i forsøk på hacking
     	if(preg_match("#\.\./|^/#", $IP)){
     	echo "Bad input. Incident logged";
     	}
     	
     	//Om $IP er fin, send e-post
     	else{      
     	$Hostname   = gethostbyaddr($IP);
     	$dato       = date('dmyhi');
     	$Beskjed = 

"
$side 
ble kalt, men filen den referrer til eksisterer ikke.

IP: $IP
Host: $Hostname
Tidspunkt: $dato
";
     	$Emne = 'Feil IP';
     	mail($Til, $Emne, $Beskjed, "From: Sikkerhet" );
     	
     	echo "Filen eksisterer ikke. Hendelsen logget.";
     	}
     }
   	}
   	// Om null-byte funnet
   	else{
   	
     $IP         = $_SERVER['REMOTE_ADDR'];
     
     // Om $IP er endret i forsøk på hacking
     if(preg_match("#\.\./|^/#", $IP)){
     echo "Bad input. Incident logged";
     }
     
     //Om $IP er fin, send e-post
     else{      
     $Hostname   = gethostbyaddr($IP);
     $dato       = date('dmyhi');
     $Beskjed = 

"
$side
ble sendt, den passerte ikke null-byte testen.

IP: $IP
Host: $Hostname
Tidspunkt: $dato
";
     $Emne = 'Feil IP';
     mail($Til, $Emne, $Beskjed, "From: Sikkerhet" );
     
     echo '<p>Bad input. Incident logged</p> <p>Feil inndata. Hendelsen logget.</p>';
     
     }
     
   	}
   	
   }
   // Om $side ikke definert
   else{
   include("404.php");
   }
   
   ?>

Lenke til kommentar

Den skal kjøre på en UNIX-sever, men det kan jo være greit å fikse det allikevel i tilfelle jeg kommer til å bytte en gang. Jeg har ikke snøring på hvordan jeg legger til tegn det skal søkes etter i preg_match, kan du/noen andre forklare?

 

Hvordan skal man komme inn i extFolder? Man kommer jo inn i les_mer/foto Her skal jeg kun ha harmløse htmlfiler. Hvordan skal man kunne jobbe seg oppover eller nedover fra denne mappen? Trodde noe av dette ble behandlet i jakten på nullbyte i preg_match jeg.

 

EDIT: Kunne vel trengt å vite mer om det egentlig dabear. Mulig jeg ikke trengte det på $IP, men jeg leste en gang: "Validate all input". Mulig jeg gjør det på feil måte, men jeg vil gjerne lære mer om sikkerhet. Lånte boka innocent code i noen uker, men fikk ikke gått virkelig i dybden i alle kapitlene. Trodde man jaktet på nullbytes for å unngå at man skulle kunne "hoppe over" en, ja f.eks en filendelse sjekk i et includescript. $IP er ikke brukt til noe slikt, så vet vel egentlig ikke helt om det er noe vits i å behandle den på noe vis. Trenger erfaring.

Endret av -Teddy-
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...