Is there a good tutorial on untainting data received via a cgi script?

On Tue, 26 Feb 2002, Curtis Poe wrote:

> --- erotomek <[EMAIL PROTECTED]> wrote:
> > ALWAYS USE THE TAINT MODE !!!
> > 
> > Use the -T switch:
> > 
> > #!/usr/bin/perl -wT
> > 
> > and untaint the $file variable:
> > 
> > die 'INSECURE $file !!!' if $file =~ /\.\./;
> > if ($file =~ /^([-\w./]+)$/) { $file = $1 }
> > else { die 'INSECURE $file !!!' }
> > 
> > and now you can use it.
> 
> You supplied some great information, however, your example of plugging the security 
>hole has a
> security hole itself.  From the command line on any *nix system, enter the following 
>(assuming you
> are not in root):
> 
>     cd \.\.
> 
> You quickly discover that the shell allows those dots to be escaped.  In a url, that 
>translates to
> something like:
> 
>     %5c.%5c.%2F%5c.%5c.%2Fetc%2Fpasswd
> 
> (That's "\.\./\.\./etc/passwd")
> 
> Many variations of that can be tried to find out if their is a security hole.  If 
>you must allow
> the user to specify a file name, get rid of any ASCII zeroes in the file name (to 
>prevent NUL byte
> hacks -- I explain that at
> http://www.easystreet.com/~ovid/cgi_course/lesson_three/lesson_three.html under the 
>title "Poison
> Null byte").  Then, you can use File::Path to get the real filename.  Even then, 
>though, I'm leery
> of allowing the user data near the shell, but sometimes it is necessary.
> 
> Cheers,
> Curtis "Ovid" Poe
> 
> =====
> "Ovid" on http://www.perlmonks.org/
> Someone asked me how to count to 10 in Perl:
> push@A,$_ for reverse q.e...q.n.;for(@A){$_=unpack(q|c|,$_);@a=split//;
> shift@a;shift@a if $a[$[]eq$[;$_=join q||,@a};print $_,$/for reverse @A
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Sports - Coverage of the 2002 Olympic Games
> http://sports.yahoo.com
> 

-- 
Rob

Good judgement comes from experience, and experience -
well, that comes from poor judgement.



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to