On Wed, April 26, 2006 12:53 am, P. Guethlein wrote:
> <?php
> if(isset($_GET['d'])){setcookie('disp',$_GET['d'],time()+(60*60*24*60));$_COOKIE['disp']=$_GET['d'];}
I suppose this isn't so terribly awful, since experienced users can
forge their Cookies as easily as GET, but as a matter of principle,
you SHOULD insure that $_GET['d'] has the data you expect.
> include_once('writemenus.php');
>
> if(!isset($_GET['href'])) $include = 'startpage.htm';
This is fine.
> else {
> $include = $_GET['href']; $include = "$include.php";
This is SOOOOOOOOOOOOOOOOOOOOO not fine!!!
You are allowing the Bad Guys to include *ANY* file they want here!
Never ever ever ever use a variable in include() that the user gets to
pick whatever they want.
You need to decide, in advance, which files the user CAN include, like
your 'startpage.htm' and only allow $include to take on those values
you hvae pre-determined to be valid.
Here's one easy way to do this:
switch($_GET['href']){
case 'startpage':
case 'index':
case 'about':
case 'contact':
$include = $_GET['href'] . '.php';
break;
default:
error_log("HACK ATTEMPT $REMOTE_ADDR " . date('m/d/Y h:i:s a);
die("No.");
break;
}
> 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 )
>
> What buttons do I need to push to stop this? Does PHP have a setting
> to allow only local calls? or do I have to do it in the index.php file
> ? or ??
Required Reading:
http://phpsec.org/
All of it.
The whole damn site.
Now.
Sorry.
--
Like Music?
http://l-i-e.com/artists.htm
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php