Re: opendir security hole
| From: | Analysis & Solutions | Date: | Mon, 03 Jun 2002 14:37:48 +0000 |
| Subject: | Re: opendir security hole | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-100399@lists.php.net to get a copy of this message | ||
On Thu, May 23, 2002 at 11:23:42AM -0400, Analysis & Solutions wrote:
> On Thu, May 23, 2002 at 11:22:28PM +1000, daniel wrote:
> > dir=../../../../ it will show you the root dir of the server , how can i
>
> Before passing the $Dir variable to the file functions, clean it up...
>
> $Dir = preg_replace('/..\//', '', $Dir);
------------------------------------------------
The initial poster just wrote me off list with a follow up question.
Here's my reply....
Hi:
> $dir = preg_replace('/..\//', '', $dir);
Hmm. I must have been tired when I wrote that. "." matches
any character. Thus "..\/" will match any two characters before a "/".
I should have escaped the periods. That should have been
$dir = preg_replace('/\.\.\//', '', $dir);
Sorry.
Now, you are also attempting to strip ".." via a whole separate regex.
> $dir = preg_replace('..', '', $dir);
First, that expression isn't encapsulated in the "/" delimiters, thus
it's an invalid preg expression. Second, as in my first regex, you
didn't escape the "." Third, you can do it in the initial expression.
$dir = preg_replace('/\.\.\/?/', '', $dir);
That translates to find any string that has two periods and maybe one
forward slash.
Enjoy,
--Dan
--
PHP classes that make web design easier
SQL Solution | Layout Solution | Form Solution
sqlsolution.info | layoutsolution.info | formsolution.info
T H E A N A L Y S I S A N D S O L U T I O N S C O M P A N Y
4015 7 Av #4AJ, Brooklyn NY v: 718-854-0335 f: 718-854-0409