On 4/26/06, P. Guethlein <[EMAIL PROTECTED]> wrote:
>
> Initial index.php file:
>
> <?php
> if(isset($_GET['d'])){setcookie('disp',$_GET['d'],time()+(60*60*24*60));$_COOKIE['disp']=$_GET['d'];}
> include_once('writemenus.php');
>
> if(!isset($_GET['href'])) $include = 'startpage.htm';
> else {
>   $include = $_GET['href']; $include = "$include.php";
>   if($include=='index.php')$include = 'startpage.htm';
> }
> include_once($include);
> include_once('footer.htm');
> ?>
>
> =============================
> Hackers seem to be able to call a remote script by appending the URL
> to the href= command line . ( $include )

..because you're not checking it, you're just including it.

If you turn off allow_url_fopen then this will stop it, but it's best
to fix it properly.

You could do something like this:

$mydir = dirname(__FILE__);

$include = $_GET['href'].'.php';

if (realpath($mydir.'/'.$include) != $mydir.'/'.$include) {
  $include = 'startpage.htm';
} else {
  $include = $mydir .'/'.$include;
}

You use realpath to get rid of '../' and './' type references (see
http://www.php.net/realpath), then make sure that's the same file as
in the current directory.

If they don't match, it includes startpage.htm.

--
Postgresql & php tutorials
http://www.designmagick.com/

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to