2012-01-02 2 views
0

Я пытаюсь установить некоторую базовую безопасность, чтобы другие пользователи на общем хостинге не могли включать сценарии, которые не принадлежат им. Я придумал ниже и немного изменил его, чтобы он также работал на Windows, которая работала (как с Windows, так и с Mac), пока я не загрузил ее с локального на веб-сервер.Подтверждение запроса корневого пути является локальным

define("ROOTPATH", str_replace("_scripts/php/", "", str_replace("admin/_scripts/php/", "", str_replace("\\", "/", realpath(dirname(__FILE__)) . "/")))); 

if(!strstr(ROOTPATH, str_replace("admin/_scripts/php/", "", str_replace("\\", "/", realpath($_SERVER['DOCUMENT_ROOT']))))){ 
    die("Server path check failed"); 
} 

Кажется, мой хозяин имеет DOCUMENT_ROOT, отличающийся realpath(dirname(__FILE__)), который я не знал, был возможно до сих пор - есть способ улучшения выше, так что проверка еще правильно в то время как учет хостов, которые имеют разные корни документа как хранятся файлы?

На данный момент определенный ROOTPATH ​​равен /home/USERNAME/htdocs/, хотя проверка выдается как /home/SOMETHINGELSE/htdocs/, поэтому мой чек в основном не работает - я точно не хочу, чтобы я терпел неудачу с моей собственной проверкой lol!

Minor Update

Я знаю, что всегда можно использовать define('checkme', 'abc123');, который я использую, как хорошо - я просто хочу, чтобы иметь другую проверку поставить на место, чтобы убедиться, что он исходит из своего хостинг-пакет, а не кто-то elses на сервере ... если вы понимаете, что я имею в виду.

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

+0

Если другие пользователи вашего общего хоста * могут * включать эти файлы, вы должны переключать хосты. – hakre

+0

Ну да, но лучше предотвратить это, чем надеяться, что кто-то не найдет какой-либо эксплойт (на сервере или через мой скрипт) – MrJ

+1

Если вы пытаетесь запретить другим читать ваши скрипты, они могут просто использовать file_get_contents() и читать файл таким образом. –

ответ

0

Это больше, чем обсуждение ответа, но я думал, что это может быть полезно.

Виртуальный хостинг тип потребительной случае РНР open_basedir установка адресов конкретно ...

open_basedir могут быть установлены в файле php.ini, но это не помогает вам на общем сервере. Что хозяин должен сделать, это изменить запись httpd.conf для отдельного сайта:

<VirtualHost*:80> 
    ServerName www.mysafedomain.com 
    DocumentRoot /home/USERNAME/htdocs/ 
    php_admin_flag open_basedir /home/USERNAME/ 
</VirtualHost> 

Если вы используете виртуальный хостинг, вы, вероятно, не имеют доступа к редактированию файла httpd.conf, однако. Любая реальная служба хостинга должна обрабатывать это для вас, чтобы внешние пользователи не могли получить доступ к скриптам, которые им не следует через PHP.

Если вы хотите проверить сами, вы можете увидеть значение параметра open_basedir на выходе phpinfo(). Вы можете убедиться, что он соответствует вашему каталогу home/user. Если это так, ваша пользовательская функция проверки путей, вероятно, не нужна. Кроме того, это может быть педантичным, чтобы упомянуть об этом, но НИЧЕГО, хранящееся в каталоге htdocs, будет видимым для всего мира (и за его пределами).

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