Thank you Jenda!  I acted defensively in my email response to you.

It's good to know about the 0, I never heard that before.

>I guess it's me how should apologize.
>Your second mail really sounded like you did not read my mail at
>all and I overacted.
>
>For unallowed chars:
>
>1) almost always you do not want characters with code 0
>Most system calls expect strings ended by zero so they might use
>only part of the data you pass in. Eg. suppose you want to allow
>users to upload some files, but want to allow only .html extension.
>So you do this:
>
>       $filename = $cgi->param('filename');
>       $filename .= '.html'
>               if ($filename !~ /\.html$/);
>
>       open OUT, "> $filename";
>       ... and write the posted data into that file
>
>now suppose the data sent by the malicious user were:
>       "gotcha.asp\0.html"
>
>Now your regexp is content, everything looks safe (well except that
>you should also test whether the user doesn't try to overwrite
>something or to save the file in a different folder, but that's another
>problem). But the system will only see "gotcha.asp" and will create
>that file. And (assuming all the time you are using MS IIS) the user
>may run any code he wishes on your server.
>
>2) When inserting the value into some code (even if the code is just
>HTML) you should never forget to escape the specials. For SQL
>you have to double the singlequote, for HTML the &, <, >, \x80-
>\xFF and a few others if you include the value in text, plus double
>and single quote if it's gonna be in a tag attribute, and you should
>add a backslash when escaping for JavaScript, ...
>
>       use HTML::Entities;
>       sub HTMLescape {
>               return HTML::Entities::encode($_[0],
>                       '^\r\n\t !\#\$%\"\'-;=?-~');
>       }
>       # "<title>" . HTMLescape($title) . "</title>"
>
>       sub TAGescape {
>               return HTML::Entities::encode($_[0], '^\r\n\t !\#\$%\(-;=?-~');
>       }
>       # q{<input type=text name="foo" value="}
>       #   . TAGescape($foo) . q{">}
>
>       sub JSescape {
>               my $s = $_[0];
>               $s =~ s/(['"])/\\$1/g;
>               return HTML::Entities::encode($s, '^\r\n\t !\#\$%\(-;=?-~');
>       }
>       # q{<A href="JavaScript:Foo( '}
>       #   . JSescape($bar) . q{', 1)">Foo</a>}
>
>3) When passing the data as a parameter to another program:
>       If possible use system(@list)
>       Watch mainly for [\r\n&|><\0;\$], but I'm sure there are others
>       I forgot about
>
>       when constructing a command string do not forget to enclose
>       the parameters in quotes (single or double depending on your
>       OS) in case they were spaces in them, and don't forget to
>       escape the quotes that might be in the data.
>
>4) be paranoid ;-)
>
>Jenda
>
>P.S.: The fact that I am paranoid doesn't mean they are not out to
>get me!
>
>P.P.S.: Just now I feel like killing someone ... or myself. Any
>volunteers?
>
>=========== [EMAIL PROTECTED] == http://Jenda.Krynicky.cz ==========
>There is a reason for living. There must be. I've seen it somewhere.
>It's just that in the mess on my table ... and in my brain
>I can't find it.
>                                       --- me


-- 
-------------------------------
-  Teresa Raymond             -
-  Mariposa Net               -
-  http://www.mariposanet.com -
-------------------------------

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

Reply via email to