Допустим, что плагин загружает текстовые файлы или изображения в поддиректорию WordPress. Эта поддиректория должна быть доступна для записи, т.е. для нее необходимо выставить права доступа 777, что потенциально представляет угрозу безопасности (злоумышленник может загрузить свой сценарий и взломать сайт). Для защиты можно использовать
- Ограничение по типам файлов
- Запрет выполнения сценариев: вместо выполнения сценария текст сценария в браузере или страница ошибки
***Вариант решения проблемы для продвинутых пользователей - использовать [ref url="http://httpd.apache.org/docs/trunk/suexec.html" text="suEXEC"] (пользователь Apache получает возможность исполнять CGI и SSI программы под ID, отличающемся от ID веб-сервера).
Защита директории с помощью .htaccess
В директорию с такими правами доступа, как 760, 766, 775 или777, следует поместить файл .htaccess с инструкциями, запрещающими в этой директории и всех ее поддиректориях исполнение сценариев (файлов с определенными расширениями) и/или запись файлов кроме файлов заданных типов.
Ограничение по типам файлов
Запрет на все файлы кроме файлов с заданными расширениями:
<Files ^(*.jpeg|*.jpg|*.png|*.gif)> order Deny,Allow Deny from All </Files>
Директива FilesMatch, разрешающая (Allow) в директории только файлы заданных типов. (Запрет - аналогично с Deny вместо Allow):
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$"> Allow from All </FilesMatch> Deny from All
Запрет выполнения сценариев
Вместо выполнения сценария текст сценария в браузере
Исполняемые файлы (файлы сценариев с расширением .pl, .cgi или .php) при запросе браузера будут обрабатываться сервером как простой текст, т.е. вместо результата выполнения сценария в браузер будет передан текст сценария (он появисят в окне браузера!):
AddType text/plain .pl AddType text/plain .cgi AddType text/plain .php
или
AddType text/plain .pl .cgi .php
Вместо выполнения сценария страница ошибки
Директива Options -ExecCGI запрещает исполнение cgi-сценариев. Следующая директива AddHandler регистрирует все файлы с заданными расширениями как cgi-сценарии. Таким образом, при попытке доступа к файлам с этими расширениями появится страница ошибки.
Options -ExecCGI AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
Следующая директива отменяет все обработчики и действия, обычно применяемые к файлам с заданными расширениями, т.к. предписывает использовать эти файлы как простой текст:
<FilesMatch ".(php|pl|py|jsp|asp|htm|shtml|sh|cgi)$"> ForceType text/plain </FilesMatch>
Источник: [ref url="http://codex.wordpress.org/htaccess_for_subdirectories" text=".htaccess for subdirectories"]
А как сделать, чтобы все загружалось с правами 755?