Как запретить запуск языков Php, Html и Javascript в определенном каталоге?

Допустим, у меня есть скрипт загрузки изображений, я хочу, чтобы каталог загрузки не выполнял Php или даже html, показывая его только как обычный текст, я видел этот трюк на многих веб-сайтах, но я не знаю, как они это делают.

Вкратце, если я загружу evil.php в этот каталог и попытаюсь получить к нему доступ, я увижу только источник простого текста, html или php не выполняются. (но я все еще хочу, чтобы изображения отображались нормально, конечно)

Я знаю, что могу сделать это с помощью header("content-type:text/plain");, но это не поможет, потому что я хочу, чтобы сервер автоматически устанавливал content-type:text/plain для каждой вещи, выводимой из каталога загрузки, кроме изображений.

Примечание: я использую php 5.3.2/Cent OS и последнюю версию cPanel.

Спасибо


person Emily    schedule 11.04.2010    source источник
comment
Безопасно ли предположить, что вы используете Apache в качестве HTTP-сервера? Поскольку все решения до сих пор предполагают, что   -  person Gareth    schedule 12.04.2010
comment
Насколько я знаю, javascript будет выполняться только при вызове из файла HTML. Попробуйте щелкнуть ссылку на файл js в своем браузере, и он выведет открытый текст. Некоторые браузеры могут попытаться загрузить файл, поэтому лучше установить тип text/plain, чтобы учесть это, но нет реального риска того, что кто-то загрузит js сам по себе и причинит вред другому пользователю. (Опять же, хороший призыв к нейтрализации в любом случае, но поскольку вы конкретно упомянули js...)   -  person Anthony    schedule 12.04.2010
comment
@ Гарет, я был бы очень шокирован, если бы они использовали что-то еще из CentOS. Есть ли другой основной HTTP-сервер для Linux?   -  person Anthony    schedule 12.04.2010
comment
Если вы собираетесь разрешить загрузку только картинок, было бы лучше убедиться в том, что скрипт не разрешает загрузку исполняемых файлов. Конечно, всегда лучше с дополнительной защитой, если кто-то каким-то образом нашел эксплойт в вашем скрипте. Я также вижу, что люди предполагают, что вы запускаете Apache в качестве веб-сервера, было бы неплохо указать, какой веб-сервер вы используете. Это может быть не напрямую связано с php, а больше связано с веб-сервером.   -  person Hultner    schedule 12.04.2010
comment
@Anthony: lighttpd, возможно, не такой большой, но он используется и является альтернативой.   -  person Hultner    schedule 12.04.2010
comment
@Энтони - например. Популярность Nginx (en.wikipedia.org/wiki/Nginx) растет, но да, я оцените, что весьма вероятно, что это сервер Apache   -  person Gareth    schedule 12.04.2010


Ответы (4)


По крайней мере, вы захотите поместить в свой файл .htaccess для каталога загрузки следующее:

Options -Indexes
Options -ExecCGI
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi

Проблема с файлом .htaccess заключается в том, что если ваша загрузка не блокирует загрузку, ваш .htaccess может быть перезаписан. Альтернативным решением является использование директивы Apache (если вы используете Apache), показанной здесь, Отключить PHP в каталоге (включая все подкаталоги) с .htaccess

person sblom    schedule 11.04.2010
comment
Вы бы установили это только для определенного каталога. - person VolkerK; 12.04.2010

Поместите .htaccess в каталог загрузки.

AddType 'text/plain' .php .html

or

ForceType 'text/plain'
#...
person Ming-Tang    schedule 11.04.2010


Поскольку вы говорите о загрузчике изображений, вы не хотите отображать изображения как plain/text. Как бы вы отделили изображения от вредоносных файлов? Во время этой задачи просто заблокируйте сохранение конкретного файла.

person BalusC    schedule 11.04.2010
comment
BalusC, я зашел только в заголовок не-изображений как обычный/текст. Благодарность - person Emily; 12.04.2010