You are here: Re: [PHP] Security check « PHP « IT news, forums, messages
Re: [PHP] Security check

Posted by Andy Pieters on 06/01/05 23:39

On Wednesday 01 June 2005 22:33, you wrote:
>
> > elseif(count($_POST)>0)
> > foreach($_POST as $key=>$value)
> > if( ($key!=='login') && ($key!=='name') && ($key!=='pass') )
> > $hiddens.=<<<_hid_
> > <input type="hidden" name="$key" value="$value">\n\t
> > _hid_;
>
> But what happened here? Why do you assume POST data is safe?

You're right it isn't. Thanks!

>
> > if( (array_key_exists('savereferer',$_GET)) &&
> > ($_GET['savereferer']=='yes'))
> > {safeReferer($ref,$chksum);
> > $hiddens.=<<<_ref_
> > <input type="hidden" name="referer" value="$ref">\t
> > \t<input type="hidden" name="checksum" value="$chksum">
> > _ref_;
> > }
>
> I don't see where $ref comes from. I am assuming it somehow trickles
> down from HTTP_REFERER? If so, did you clean it?

Here is the function safeReferer
function safeReferer(&$referer,&$checksum,$default=PAGE_PAGESTORE)
{#small piece of code to safely include referers in html code
#+ get referer, save it in the form with a digest code with some noise
#+ on request, verify the by adding the noise to the referer and calculating
the digest code.
#+ if it does not match, use standard page as referer

$referer=htmlspecialchars(urlencode( @ $_SERVER['HTTP_REFERER']));

if($referer=='')
$referer=$default;
$checksum=makeCheckSum($referer);
$req_ref=$req_chk=null;
if( (!(empty($_POST['referer']))) && (!(empty($_POST['checksum']))) )
{$req_ref=$_POST['referer'];
$req_chk=$_POST['checksum'];}
elseif( (!(empty($_GET['referer']))) && (!(empty($_GET['checksum']))) )
{$req_ref=urlencode($_GET['referer']); #parameters passed urlencoded are
automatically decoded by php!
$req_chk=$_GET['checksum'];}
else
makeCheckSum($referer);
if(!(is_null($req_ref)))
{if(makeCheckSum($req_ref)==$req_chk)
{$referer=$req_ref;
$checksum=$req_chk;}
else
{$referer=urlencode($default);
$checksum=makeCheckSum($referer);}
}
return urldecode($referer);
}

function makeCheckSum($input)
{$noise="+++some'(-546%noise#*";
$checksum=sha1(md5("$input$noise"));
return $checksum;
}


Thank you

With kind regards


Andy
--
Registered Linux User Number 379093
-- --BEGIN GEEK CODE BLOCK-----
Version: 3.1
GAT/O/>E$ d-(---)>+ s:(+)>: a--(-)>? C++++$(+++) UL++++>++++$ P-(+)>++
L+++>++++$ E---(-)@ W+++>+++$ !N@ o? !K? W--(---) !O !M- V-- PS++(+++)
PE--(-) Y+ PGP++(+++) t+(++) 5-- X++ R*(+)@ !tv b-() DI(+) D+(+++) G(+)
e>++++$@ h++(*) r-->++ y--()>++++
-- ---END GEEK CODE BLOCK------
--
Check out these few php utilities that I released
under the GPL2 and that are meant for use with a
php cli binary:

http://www.vlaamse-kern.com/sas/
--

--

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация