Не выполнять флаг в ответе http?

Я читал об атаках на сайты с возможностью загрузки и скачивания файлов. Некоторые атаки были связаны с загрузкой jpg, который на самом деле является html-файлом, и комментарием о том, что если вы хотите, чтобы пользователям было разрешено сохранять html и загружать их (или, возможно, просматривать их в браузере без использования функции сохранения как).

Есть ли какой-то тип флага, который я могу использовать, чтобы сказать, что не выполнять? Я хочу, чтобы пользователи могли просматривать изображения или видеофайлы, загруженные другими. Что делать, если я хочу, чтобы отображался пользовательский HTML-код, но я не хочу заставлять пользователей загружать его (вложение с расположением содержимого).

Есть ли способ, которым я могу сказать: «Привет, вот некоторые пользовательские данные». Это может быть изображение, поэтому я должен разрешить работу img src. Это может быть html, поэтому я хотел бы, чтобы пользователи его видели, но не позволяли ему читать/записывать файлы cookie/localstorage/вызывать запрос ajax/и т. д.?

-edit- Подумай об этом. Все мои пользовательские данные размещены на собственном поддомене без файлов cookie для статических файлов. Это избавит от многих проблем, о которых я упоминал, но что еще остается? Также я считаю, что мой ответ пантомимы полностью зависит от того, что делает мой веб-сервер (nginx atm), который может просто смотреть на расширение файла.

-edit2- Я изменил конфигурацию nginx, чтобы добавить application/unknown Content-Type. Кажется, он делает именно то, что я хочу. Я видел предложение использовать поток октетов для неизвестных файлов, но это заставляет браузеры (по крайней мере, Firefox) пытаться загрузить его, даже если это jpg, который можно просматривать в браузере.


person Community    schedule 09.07.2012    source источник


Ответы (1)


Все зависит от Content-Type в вашем HTTP-ответе.

Браузеры обрабатывают данные, возвращаемые Content-Type в ответе HTTP.

Например, если, скажем, пользователь загружает файл HTML в поле загрузки предположительно для загрузки фотографии, пока ваш веб-сервер дает Content-Type как image/jpeg (или image/png и др.), браузер должен обрабатывать его как изображение - и в этом случае недопустимое изображение, потому что изображение содержит странный HTML-материал внутри вместо обычного двоичного файла.

В любом случае, если вы чувствуете себя неуверенно, вы всегда можете просмотреть данные файла во время проверки загрузки.

person mauris    schedule 09.07.2012
comment
Я позволил серверу угадать. Если у меня есть файл .jpg, даже если это gif, сервер (nginx — мой выбор atm) делает это и называет его jpg (я не проверял, что произойдет, если я использую gif). Но я слышал, что браузеры пытаются угадать, какой это тип, и игнорируют мимы. Но я думаю, если они выполняют что-то, это проблема браузера, а не моя? - person ; 09.07.2012
comment
Если вы ответите с правильным типом MIME, а браузер вместо этого покажет его как файл HTML, это будет проблемой браузера. По стандарту они должны слушать Content-Type. - person mauris; 09.07.2012