Re: Re: move_uploaded_file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



It's also a security flaw... php should be chrooted to the webroot! Or
it should be chrooted to the users home directory. Especially on windows
systems where security is not so strict.

My 2 cents,
Carl.

Roberto wrote:
> Hi Joseph,
>
> I'm perfectly fine with the concepts of absolute/relative path and
> webroot, trust me.
> For me it was just unclear from the documentation the fact that the
> "target path" in the move_uploaded_file function was "absolute" with
> respect to the file system and not to the "webroot".
> At the beginning I thought the function itself was taking care about
> adding the server root on its own to that path.
> Thinking carefully, it makes perfectly sense for the function to
> behave the way it actually does, since otherwise it would be
> impossible to get these files out of the server root in file system
> terms.
> Just, this should be written in CAPITAL LETTERS in the documentation.
> Thanks for the interest,
>
> Roberto Aloi
> http://aloiroberto.wordpress.com
> Twitter: @prof3ta
>
>   
>> When used in PHP, an absolute path does not go off the web root. In Premise
>> 3 below, an absolute path of "/upload" will NOT bring up the directory
>> "/home/prof3ta/projects/moodle/htdocs/upload" but rather simply "/upload"
>>  In Windows terms, an absolute path would be "C:\upload" versus
>> "C:\home\prof3ta\projects\moodle\htdocs\upload".  The only time an absolute
>> path is figured relative to the web root is when it is referenced in a
>> browser.  At this point, for all intents and purposes, it locates the file
>> based on the web root.  This is a fundamental difference between absolute
>> and relative paths.
>>
>> Absolute:  begins at "/" in Linux operating systems and "C:\" in Windows OS
>> Relative:  begins wherever the running script is located in the file system.
>>
>> Joseph
>>
>> Roberto wrote:
>>     
>>> HI,
>>>
>>> Premise 1:
>>> echo exec("pwd"); -> "/home/prof3ta/projects/moodle/htdocs/feedback_tool"
>>>
>>> Premise 2:
>>> I have an "upload" folder with 777 permissions under:
>>> /home/prof3ta/projects/moodle/htdocs/upload
>>>
>>> Premise 3:
>>> The server root is obviously htdocs:
>>> /home/prof3ta/projects/moodle/htdocs
>>>
>>> This said, the following doesn't work:
>>>
>>> <?php
>>> $uploads_dir =/upload";
>>> $tmp_name =_FILES["file"]["tmp_name"];
>>> $name =_FILES["file"]["name"];
>>> move_uploaded_file($tmp_name, "$uploads_dir/$name");
>>> ?>
>>>
>>> The following does work:
>>>
>>> <?php
>>> $uploads_dir =../upload";
>>> $tmp_name =_FILES["file"]["tmp_name"];
>>> $name =_FILES["file"]["name"];
>>> move_uploaded_file($tmp_name, "$uploads_dir/$name");
>>> ?>
>>>
>>> I consider it as a documentation bug (in the sample code they use an
>>> absolute path).
>>> I indeed believe I *should* be able to use both of them if not
>>> documented otherwise.
>>> I will dig into the C implementation of the move_uploaded_file
>>> function and I'll check, though.
>>>
>>> Cheers,
>>>
>>> Roberto Aloi
>>> http://aloiroberto.wordpress.com
>>> Twitter: @prof3ta
>>>
>>>
>>>       

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux