Gå til innhold

Er dette include-scriptet sikkert?


Anbefalte innlegg

'\' må være "\ 0" (uten mellomrom), altså med dobbeltfnutter rundt (de her: " " )

Er det ikke bedre å bruke chr(0) da?

 

Slik da:

 

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

if($side = chr(0)) {
	die("Test");
}

 

??

:p

 

Fungerte hvertfall ikke -.-

Endret av ThomasQ
Lenke til kommentar
Videoannonse
Annonse
if(strpos($side, '/') || strpos($side, chr(0)) || strpos($side, '.')) {
 die("<h1>Ulovlige tegn i adresse!</h1>");
}

:cool:

 

 

Takker :D

 

 

Er scriptet mitt "bra" nå?

 

<?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, chr(0)) || 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;
}

?>

Lenke til kommentar

Hva er feil her?

 

Warning: include_once(.php) [function.include-once]: failed to open stream: No such file or directory in C:\wamp\www\hjemmeside\index.php on line 27

 

Warning: include_once() [function.include]: Failed opening '.php' for inclusion (include_path='.;C:\php5\pear') in C:\wamp\www\hjemmeside\index.php on line 27

 

Når jeg skriver:

http://127.0.0.1/hjemmeside/ i url'en.

 

Index, inkluderes. Men ikke vis jeg skrev ?side=om da blir skjermen hvit.

 

Script:

 

<?php

error_reporting(E_ALL);

$mappe = "sider/";
$endelse = ".php";

$sider = array(
			   'index',
			   'om',
			   '',
			   '',
			   ''
			   );

$side = isset($_GET['side']) ? $_GET['side'] : include_once $mappe.'index'.$endelse;

if($side) {

$side = str_replace('\\', '/', realpath($side . '.php'));

if(!in_array($side, $sider)) {
	die("Siden finnes ikke");
}


	include_once $side.$endelse;

}

?>

Lenke til kommentar

Noe slikt?

<?php
error_reporting(E_ALL);

$mappe = "sider/";
$endelse = ".php";
$sider = array('index', 'om');

if (isset($_GET['side'])) {
$side = $_GET['side'];
if (ctype_alnum($side) && in_array($side, $sider)) {
include_once $mappe . $side . $endelse;
} else {
	  die("Siden finnes ikke");
}
} else {
include_once $mappe . 'index' . $endelse;
}

Lenke til kommentar

Sånn :D

 

Er scriptet mitt sikkert nå ?

 

 

<?php

// Raporterer alle feil som oppstår
error_reporting(E_ALL);

// Variabler
$mappe = "sider/"; /* hvor sidene ligger */
$endelse = ".php"; /* endelse på filene */

// Sidene i array's
$sider = array('index');

// Variablene $side
$side = $_GET['side'];

// Vis side er tilfelle
if($side) {

	// Gjør om \\ til /
	$side = str_replace('\\', '/', $side);

	// Vis siden er gyldig, inkluder siden
	if (ctype_alnum($side) && in_array($side, $sider) && !strpos($side, '/') && !strpos($side, chr(0)) && !strpos($side, '.')) {
		include_once $mappe . $side . $endelse;
	} else {
		die("Siden finnes ikke");
	}

} else {
	// Vises vis ikke $_GET['side'] finnes
	include_once $mappe . 'index' . $endelse;
}

?>

Lenke til kommentar

Hvorfor skulle strpos finne ? Det høres jo helt banalt ut. Søker strpos utover i minnet normalt sett da, eller bruker den noe annet enn C-implementasjonen?

Terminerer i èn funksjon, hvorfor ikke i strengefunksjoner.

 

EDIT:

Dette gjelder visst bare underliggende filsystemfunksjoner i libc.

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