Opened 6 years ago

Closed 6 years ago

#520 closed defect (wontfix)

Не определяется расширение файла при отсутствии названия файла

Reported by: Andrew Krasichkov Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.5.x
Keywords: Cc:
uname -a: Linux AKrasichkovNotebook 3.13.6-1-ARCH #1 SMP PREEMPT Fri Mar 7 22:47:48 CET 2014 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.5.12
built by gcc 4.8.2 20140206 (prerelease) (GCC)
configure arguments:

Description

Во всех актуальных версиях nginx (проверял на 1.4.x и 1.5.x) наблюдается ситуация с не правильным парсингом расширения файла при отсутствии названия файла (имя файла до точки), что приводит к установке дефолтного Content-Type содержимого. С одной стороны это не столь значимо, но порой вынуждает разработчиков городить костыли вокруг этой особенности, т.к. при отсутствии правильного Content-Type и включенного mime-сниффинга в Internet Explorer существует риск XSS нападения, например, через загрузку вполне валидной (по мнению PHP) картинки. Разумеется, мы всем рекомендуем выставлять соответствующий заголовок вне зависимости от контекста приложения и используемого веб-сервера, но слушаются далеко не все:-(

Имеем стандартную конфигурацию и два файла: .jpg и test.jpg
Ожидаемый результат при обращении к ним:

$ http -h http://localhost:8081/test.jpg
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 5
Content-Type: image/jpeg
Date: Tue, 11 Mar 2014 12:51:53 GMT
ETag: "531f00c1-5"
Last-Modified: Tue, 11 Mar 2014 12:25:37 GMT
Server: nginx/1.5.12


$ http -h http://localhost:8081/.jpg    
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 5
Content-Type: image/jpeg
Date: Tue, 11 Mar 2014 12:51:56 GMT
ETag: "531f00c1-5"
Last-Modified: Tue, 11 Mar 2014 12:25:37 GMT
Server: nginx/1.5.12

Актуальный:

$ http -h http://localhost:8081/test.jpg
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 5
Content-Type: image/jpeg
Date: Tue, 11 Mar 2014 12:54:46 GMT
ETag: "531f00c1-5"
Last-Modified: Tue, 11 Mar 2014 12:25:37 GMT
Server: nginx/1.5.12


$ http -h http://localhost:8081/.jpg    
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 5
Content-Type: application/octet-stream
Date: Tue, 11 Mar 2014 12:54:48 GMT
ETag: "531f00c1-5"
Last-Modified: Tue, 11 Mar 2014 12:25:37 GMT
Server: nginx/1.5.12

Attachments (1)

exten_parsing_fix.patch (391 bytes ) - added by Andrew Krasichkov 6 years ago.

Download all attachments as: .zip

Change History (4)

by Andrew Krasichkov, 6 years ago

Attachment: exten_parsing_fix.patch added

comment:1 by Valentin V. Bartenev, 6 years ago

ИМХО .jpg правильно трактовать как скрытый файл с именем jpg, особенно с учетом того, что такой сущности, как файл без имени, не существует.

comment:2 by Andrew Krasichkov, 6 years ago

Я встречал различные трактовки файлов с такими именами (например, Python иного мнения, нежели Apache и PHP), поэтому отношу это к вопросу религии.
Если таково вероисповедание nginx - хорошо;-) Закроете тикет?

comment:3 by Maxim Dounin, 6 years ago

Resolution: wontfix
Status: newclosed

С учётом того, что Apache ведёт себя также, не вижу смысла что-то менять.

Note: See TracTickets for help on using tickets.