> Is there a good tutorial on untainting data received via a cgi script?
If you look at the message right before yours, you'll see a link.
http://www.easystreet.com/~ovid/cgi_course/lesson_three/lesson_three.html

Best Regards,
JOSHUA D. HAYDEN
Owner/Operator of www.PinnacleSiteDesign.com


----- Original Message -----
From: "Rob" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, February 26, 2002 5:50 PM
Subject: Re: Very serious security hole in your script


> 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]
>
>
>


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

Reply via email to