2009-09-05 2 views
0

все. Я довольно новичок в веб-разработке, поэтому, пожалуйста, будьте осторожны. Извиняюсь, если я отправляю тему, которая уже обсуждалась; Я искал, но не мог найти то, что искал в другом потоке.безопасность загрузки файлов, htaccess и изменение расширений

Фон: У меня есть сайт, который позволяет загружать файлы, но после их загрузки их не нужно просматривать никому, кроме меня. Я реализовал некоторые меры безопасности, такие как наличие сценария загрузки php, только разрешить определенные расширения, chmoding uploaded files to 0644 и использовать -ExecCGI для различных расширений в файле htaccess внутри папки uploads.

вопросов (три из них; не так повезло):

1) Я хотел бы, чтобы мой файл .htaccess расширения переписывает PHP как-то иначе. Я нашел немного кода, чтобы сделать это, но не могу заставить его работать:

RewriteEngine On 
RewriteCond %{REQUEST_METHOD} ^PUT$ [OR] 
RewriteCond %{REQUEST_METHOD} ^MOVE$ 
RewriteRule ^(.*)\.php /site_redone/uploads/$1.nophp 

структура сайта выглядит следующим образом (по крайней мере сейчас, пока я переделка сайт): MySite .com/site_redone/uploads

Я знаю, что хост моего общего сервера допускает mod_rewrite. Они работают php 5.2.10. Не уверен, что моя проблема связана с проблемой пути (я еще не совсем понял эту часть), но пробовал различные перестановки пути в части RewriteRule безрезультатно.

2) В настоящее время имена файлов добавляются с типом отметки времени (время()), чтобы предотвратить переписывание одним и тем же именем, поэтому, например, myfile.doc становится myfile1252087685.doc. Я могу сохранить расширение в базе данных MySQL и просто переписать имя файла для завершения в .txt или что-то в моем сценарии загрузки php, но я не уверен, выполнит ли это то же самое, что и вышеупомянутая попытка mod_rewrite.

3) Есть ли способ поместить файл htaccess в более высокий каталог из папки uploads, чтобы он не мог перезаписать мою некоторую ne'erdowell, когда она находится в папке uploads? Я только хочу, чтобы это повлияло на папку uploads, а не на каталог, в котором она была размещена. Я предполагаю, что это как-то связано с использованием Directory, но я не знаю, как это сделать. Я упоминал, что я новичок в этом?

Заранее благодарен!

ответ

0

Я думаю, что регулярное выражение RewriteRule соответствует всему пути, а не по отношению к местоположению файла .htaccess. Не уверен в этом.

Таким образом, вы можете попробовать регулярное выражение как это:

^.*/([^/]*).php$ 

Или, может быть:

^/site_redone/uploads/([^/]*)\.php$ 

Я никогда не ставил mod_rewrite RewriteRule в подкаталоге раньше, поэтому выше предлагается для вашего верхнего уровня .htaccess

Я не думаю, что <Directory> разрешен в .htaccess, но есть и другая аналогичная директива, которая работает. (FilesMatch или что-то?)

Подождите ... разве вы не сказали, что хотите отказать в доступе к сети во всю папку? вы можете mod rewrite anythything, начинающийся с /site_redone/uploads/, на php-скрипт, который отображает страницу с ошибкой с кодом отказа HTTP.Итак, выражение вроде этого: ^/site_redone/uploads/.*$

+0

Спасибо за ваш быстрый ответ, Джейсон! Из учебников на modrewrite.com мое (по общему признанию шаткое) понимание - это регулярное выражение относительно файла htaccess, но для второй половины RewriteRule требуется весь путь. Но независимо, ваше регулярное выражение и подобные варианты, которые я пробовал, не дают мне никакой любви. Ну что ж. Я меньше обеспокоен тем, что люди просматривают папку, а не загрузку вредоносного кода, но мой текущий файл htaccess должен предотвращать публичный просмотр и выполнение кода. Я просто не настолько осведомлен о безопасности, насколько я, вероятно, должен быть, поэтому я стараюсь охватить все свои базы. – 2009-09-05 02:57:58

0

Ну, похоже, что то, что я пытаюсь сделать, на самом деле невозможно, по крайней мере, не так, как я пытался это сделать. Я получил некоторую помощь на форуме modrewrite.com, который сообщил мне, что, поскольку я использую загрузку файлов через форму html, правило перезаписи не будет действовать на имя файла. Этот фрагмент кода выше может быть, и я цитирую: «WebDAV или аналогичный, который больше похож на FTP». Я должен буду придерживаться php, чтобы отсеять нежелательных людей. В любом случае, надеюсь, что это поможет кому-то!

Смежные вопросы