Wow, there are some long and curly ways to use RegExp-s aren't there? I'm not very 
good at them (and I hear that
they can be expensively inefficient) so I tend to look elsewhere.

Check out pathinfo -- Returns information about a file path
array pathinfo (string path)
pathinfo() returns an associative array containing information about path. The 
following array elements are
returned: dirname, basename and extension.

- the basename result appears to give what you have requested: "with all entered 
directory names but NOT
assigned their names to file name"

However you then go on to talk about "qwert.txt.ru  => qwert.txt.ru".

I'm not sure what pathinfo() does in this situation with regard to its "extension" 
result. Perhaps you will test
and advise!? Nor can I be sure that the previous contribution will address that part 
of the problem. Does having
a filename containing multiple dots (placed in the appropriate directory) contravene 
the specification?

=dn


----- Original Message -----
From: "Christian Reiniger" <[EMAIL PROTECTED]>
To: "Galkov Vladimir" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: 01 November 2001 11:50
Subject: Re: [PHP] regular expression


On Thursday 01 November 2001 10:39, Galkov Vladimir wrote:
>  Need to remove all "../"   "/.."  from user inputing string to prevent
> him walking and creating files&directories where I don't whant see
> them/him...
>
> The string:
>
>  $path =
> eregi_replace('([..]{2,})|([./]{2})|([../]{3,})|([/.]{2})|([/..]{3})',
> '', $path);
>
> works good with any  combinations ( ../../..qwert.txt  =>  qwert.txt)
> untill somth like "/../asd/../qwert.txt" will be entered ...
> (/../asd/../qwert.txt => asdqwert.txt).
>  So the qwestion is how upgrade regular expression to remove all this
> correctly (with all entered directory names but NOT assigned their
> names to file name...

Here's what I use (take out the parts useful to you):

function FixSrcURI ($SrcURI)
{
        // remove script name
        $SrcURI = preg_replace ('#^/*{{$ Page.Source }}/*#', '', $SrcURI);

        // remove potentially harmful parts
$SrcURI = preg_replace ('#/?\.\./?#', '/', $SrcURI);
$SrcURI = preg_replace ('#/\./#', '/', $SrcURI);
$SrcURI = preg_replace ('#/\.$#', '/', $SrcURI);
$SrcURI = preg_replace ('#/{2,}#', '/', $SrcURI);
$SrcURI = preg_replace ('#^/#', '', $SrcURI);

if (preg_match ('#(\A|/)\.#', $SrcURI) ||
    preg_match ('#CVS#', $SrcURI))
{
pbHTTP_404 ();
}

if ($SrcURI == '') {
return array ($SrcURI, -1, 'src');
}
else {
$matches = array ();

if (preg_match ('#^[^/]+$#', $SrcURI))
{
return array ($SrcURI, '', $SrcURI);
}
elseif (preg_match ('#^(.*)/([^/]*)$#', $SrcURI, $matches))
{
return array ($SrcURI, $matches [1], $matches [2]);
}
else
{
pbHTTP_404 ();
                        return false;
}
}
}

--
Christian Reiniger
LGDC Webmaster (http://lgdc.sunsite.dk/)

/* you are not expected to understand this */

- from the UNIX V6 kernel source

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to