Re: Хочется сделать статическую раздачу файлов, но с произвольными именами

Борис Долгов boris at dolgov.name
Sat Nov 14 01:58:07 MSK 2009


Файл просто будет отдан с таким расширением, сервер его выполнять не будет.

14 ноября 2009 г. 1:38 пользователь Vitaly Puzrin <vitaly at rcdesign.ru> написал:
> Игорь, спасибо большое.
>
> А есть какие-то заморочки с безопасностью, на случай если люди будут
> ручками имя отдаваемого файла менять? Ну например зальют файл как
> картинку, а потом дернут как php
>
> Пока только надумал, что можно жестко ограничить расширения файлов в
> фильтре. Что-нибудь еще надо предусмотреть?
>
> Vitaly Puzrin
> http://www.rcdesign.ru
>
>
>
> 13 ноября 2009 г. 23:56 пользователь Igor Sysoev <is at rambler-co.ru> написал:
>> On Fri, Nov 13, 2009 at 11:37:54PM +0300, Igor Sysoev wrote:
>>
>>> On Fri, Nov 13, 2009 at 11:15:55PM +0300, Vitaly Puzrin wrote:
>>>
>>> > Есть форум, куда юзеры льют картинки и прочую лабуду. Естественно,
>>> > каждый называет файлы "как умеет". Сейчас "настоящие" имена  хранятся
>>> > в базе, а на диске имена содержат только циферки. Все раздается
>>> > скриптом -  генерятся хедеры с правильным именем, и делается
>>> > accel-redirect на бинарник.
>>> >
>>> > Хочется вызов скрипта исключить совсем. Но хранить произвольные имена
>>> > в файловой системе - стремно. Могут и на японском что-нибудь запихать,
>>> > и файлы с одинаковыми именами.
>>> >
>>> > Существует ли какое-то красивое решение? Пока думал, что можно на
>>> > вебстраничках нагенерить хитрых ссылок, где не только путь к
>>> > бинарнику, но и желаемое имя, под которым надо отдать. А дальше
>>> > встроенным перлом прямо в nginx заголовки составлять и доклеивать
>>> > блоб. Не уверен, что это самый разумный метод. Может кто подскажет
>>> > получше?
>>>
>>> Для ссылок вида "/files/1/2/345678?name=хитрое%20японское%20имя" можно
>>> без перла:
>>>
>>>   location /files/ {
>>>       root         /path/to/files;
>>>       add_header   Content-Disposition 'attachment; filename="$arg_name"';
>>>   }
>>
>> Или так:
>>
>>  /files/1/2/345678/хитрое%20японское%20имя
>>
>>   location ~ ^(/files/.+)/([^/]+)$ {
>>       alias        /path/to/files$1;
>>       add_header   Content-Disposition 'attachment; filename="$2"';
>>   }
>>
>>
>> --
>> Игорь Сысоев
>> http://sysoev.ru
>>
>>
>



-- 
С уважением, Борис Долгов.
icq 77556665
e-mail boris at dolgov.name


More information about the nginx-ru mailing list