Gå til innhold

Er dette include-scriptet sikkert?


Anbefalte innlegg

Mekket et includescript nå :yes:

 

Lurer på om det finnes noen svakheter i det? Evt, noen ting som kunne vært bedre.

 

<?php

$mappe = "sider/";
$default = "index";
$fil = ".php";
$side = trim($_GET['side']);

if(!$side) {
	include_once $mappe.$default.$fil;
}

$fa_side = $mappe.$side.$fil;

if($side) {

if(strpos($side, '/') || strpos($side, '\\') || strpos($side, '..')) {
	die("<h1>Ulovlige tegn i adresse!</h1>");
}	

if(!file_exists($fa_side)) {
	die("<h1>Beklager, siden du leter etter finnes ikke!<br>Vennligst gå tilbake til forsiden, å prøv igjen!</h1>");
}
	include_once $mappe.$side.$fil;
}

?>

Endret av ThomasQ
Lenke til kommentar
Videoannonse
Annonse

Ikke sikkert i det heltatt. Er $_GET['side'] null terminert dropper både file_exists og include å ta med .php, og da kan man jo i praksis inkludere hva man ønsker. I tillegg går det fult an å hente inn filer i mappestrukturen både over og under sider ved å bruke ..

 

Det du altså må gjøre er å sjekke at den ikke inneholder null-byte og ..

Lenke til kommentar
Ikke sikkert i det heltatt. Er $_GET['side'] null terminert dropper både file_exists og include å ta med .php, og da kan man jo i praksis inkludere hva man ønsker. I tillegg går det fult an å hente inn filer i mappestrukturen både over og under sider ved å bruke ..

 

Det du altså må gjøre er å sjekke at den ikke inneholder null-byte og ..

 

Gi et eksempel på hvordan jeg kan inkludere hva som helst?

Lenke til kommentar

../mappePåSammeNivåSomSider/sensitivFil\ 0

Dette vil medføre at du inkluderer "sider/../mappePåSammeNivåSomSider/sensitivFil\ 0.php" som i øynene på både file_exists og include blir det samme som "mappePåSammeNivåSomSider/sensitivFil". I eksemplet gikk jeg bare et hakk opp i mappestrukturen, men det er ingenting i veien for å bruke

../../../../../../mappe/fil\ 0

, havne 5 mapper opp i strukturen og hente inn fil i mappen mappe. Bytt ut mappe med etc, fil med passwd og få antall ../ riktig så kan man hente inn /etc/passwd, og det et aldri så lite sikkerhetsproblem.

 

Red.: Bruk \ 0 for nullbyte.

Endret av Ernie
Lenke til kommentar
if(strpos($side, '/') || strpos($side, '\') || strpos($side, '..')) {
 die("Ulovlige tegn i adresse!");
 }

 

Takk ;)

 

 

strpos($side, '\')

 

Fungerer ikke:

Parse error: syntax error, unexpected '.' in C:\wamp\www\design 15\index.php on line 16

Endret av ThomasQ
Lenke til kommentar
Du har en syntaksfeil! Nå er det back to the basics, her. Og dersom du forventer at vi skal vise deg hvor denne feilen ligger, så er du nødt til å vise oss nøyaktig hva som står på linje 14-18.

 

http://www.google.no/search?hl=no&q=ph...3%B8k&meta=

 

Edit: «Fungerer dårlig» sier ingen her noe som helst, så vær mer spesifikk.

 

if(strpos($side, '/') || strpos($side, '\') || strpos($side, '..')) {

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...