On Wed, 19 Feb 2020 at 16:42, Bishop Bettini <bis...@php.net> wrote:

> On Wed, Feb 19, 2020 at 10:29 AM Craig Francis <cr...@craigfrancis.co.uk>
> wrote:
>
>> On Wed, 19 Feb 2020 at 05:23, Bishop Bettini <bis...@php.net> wrote:
>>
>>> On Sun, Feb 16, 2020 at 6:24 PM Craig Francis <cr...@craigfrancis.co.uk>
>>> wrote:
>>>
>>>> Just to check, at the moment, if I was an evil hacker, and was to run:
>>>>
>>>> curl -F 'file=@example.jpg;filename=../../../example.php'
>>>> https://example.com/upload/
>>>>
>>>> The $_FILES['file']['name'] would be set to "example.php", where PHP has
>>>> removed the leading "../../../" (good to see).
>>>>
>>>> Does that happen simply because of this IE fix, where it uses
>>>> _basename()
>>>> in the PHP source:
>>>>
>>>>
>>>> https://github.com/php/php-src/blob/0b4778c377a5753a0deb9cfc697d4f62acf93a29/main/rfc1867.c#L1144
>>>
>>>
>>> Mostly, it seems. _basename will either be php_ap_basename[1] or
>>> php_mb_rfc1867_basename[2], and both of those handle the base name
>>> functionality regardless of platform.
>>>
>>> The comment's a little misleading, though. The original
>>> implementation[3] had a magic quotes check when compiled under WIN32, and
>>> that's what the comment's talking about. The comment's not saying that the
>>> basename call itself is for Windows only.
>>>
>>> [1]:
>>> https://github.com/php/php-src/blob/0b4778c377a5753a0deb9cfc697d4f62acf93a29/main/rfc1867.c#L558
>>> [2]:
>>> https://github.com/php/php-src/blob/2e97ae91c8ac404be00050eef414b555aba45a1c/ext/mbstring/mbstring.c#L852
>>> [3]:
>>> https://github.com/php/php-src/blob/7ee1fdb657f2a6da65087552e6dda8cf2f4bd1ef/main/rfc1867.c#L1088
>>>
>>
>>
>>
>> Thanks Bishop,
>>
>> That's interesting, so the comment probably should be updated.
>>
>> I don't think it matters where PHP is compiled, as I'm more focused on
>> what the browser sends to the server.
>>
>> Personally I'd like the comment to mention the security value it
>> provides, as I've seen a few systems that don't
>> pass $_FILES["file"]["name"] though basename(); and if this behaviour was
>> to change (e.g. when "IE's user base drops to nill"), that would introduce
>> a problem.
>>
>>
>> https://stackoverflow.com/questions/18929178/move-uploaded-file-function-is-not-working
>>
>
> I've updated this comment ([1]) to reflect that basename-ing is mandatory
> for RFC 7857 multipart/form-data processing of filename parameters ([2]).
>
> Thank you for helping improve PHP!
>
> [1]:
> https://github.com/php/php-src/commit/fb57ae9084a98ac5f06cd7b2d10205489b537e20
> [2]:https://tools.ietf.org/html/rfc7578
>



Thanks again Bishop.

Reply via email to