RuWeb.net Forum

Как защитить секретную информацию
support - 16.3.2003 в 23:05

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

Вопрос такой: Как защитить секретную информацию с которой работают PHP-скрипты? Итак:

Вариант 1. PHP в стандартном режиме, запускается как модуль Apache, т.е. под пользователем "nobody".

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


Код:
AddType application/x-httpd-pcgi phtml
Action application/x-httpd-pcgi /cgi-bin/php.cgi
Пояснение: После "AddType application/x-httpd-pcgi" указываются расширения PHP-скриптов, которые вы хотите запускать в режиме CGI.

В каталоге /cgi-bin вашего сайта создаете
php.cgi с правами 711. в нем пишите 1 строку:

Код:
#!/usr/bin/php


Также, в каталоге /cgi-bin/ создаете .htaccess и пишите в нем:

Код:
<Files php.cgi>
Order Allow,Deny
Allow from env=REDIRECT_STATUS
</Files>


После этого на файлы с секретными данными можно(и нужно) ставить права доступа 600, а на каталоги c секретными файлами - 700. Скрипты, чьи расширения вы указали в .htaccess будут свободно их читать, а никакой другой пользователь прочесть их не сможет.

Вариант 2. PHP в режиме Safe Mode, запускается как модуль Apache, т.е. под пользователем "nobody".
Если PHP на сервере работает в режиме Safe Mode, способ описанный в варианте 1, вероятно, не будет работать.
В этом случае вам необходимо попросить системного администратора
установить на ваш домашни каталог (/home/[username])
chown [username]:nobody
и
сhmod 0710
Также, не забудте в каталогах с секретными файлами создать .htaccess и запретить доступ веб-сервера к этим файлам директивами:

Код:
...
<Files имя_секретного_файла>
Order Allow,Deny
Deny from all
</Files>
...

или вообще

Код:
Deny All


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

И запомните - никаких файлов или папок с правами 777. Никогда и ни за что. (За исключением тех случаев когда вы знаете что делаете.)


support - 5.4.2003 в 23:54

Мда. Обнаружился глюк. Перемудрил я.
Вместо:
Deny from all
Allow from env=REDIRECT_STATUS
надо писать только
Allow from env=REDIRECT_STATUS
Исправлено.


support - 22.11.2003 в 02:33

Для себя запишу... Запомнить и не забывать:
Естественно с этими настройками, к скриптам нельзя обращаться через http://[ip]/~[username]/. Надо чтобыы домен работал.


Rafnot - 13.12.2003 в 02:38

Цитата:
сообщение support
Для себя запишу... Запомнить и не забывать:
Естественно с этими настройками, к скриптам нельзя обращаться через http://[ip]/~[username]/. Надо чтобы домен работал.


А какую Вы даёте гарантию сохранности данных с правами доступа cmod 600?


support - 13.12.2003 в 03:36

Обыкновенную. 12 месяцев :)

Файлы с правами 600 можно прочитать только воспользовавшись вашим логином/паролем или через какую-нить дыру в скриптах вашего сайта (если таковые имеются).


Rafnot - 13.12.2003 в 13:19

Цитата:
сообщение support
Обыкновенную. 12 месяцев :)

Файлы с правами 600 можно прочитать только воспользовавшись вашим логином/паролем или через какую-нить дыру в скриптах вашего сайта (если таковые имеются).


А как узнать где есть дырки в скрипте? Не подскажите?


support - 13.12.2003 в 23:11

Боюсь, это вопрос риторический... :(
Искать, думать, анализировать...


Anonymous - 23.4.2004 в 17:12

У меня два вопроса:
1. Как запретить листинг каталогов в .htaccess (Options -Indexes вызывает ошибку 500, работает только IndexIgnore *, но это не совсем то, что хотелось бы...)
2. Почему, когда на каталог выставлены права 644, при обращении к любому файлу в этом каталоге выдается Access Denied? Ведь если листинг запрещен, это не значит, что запрещено читать содержимое? Или я неправильно понимаю?


support - 23.4.2004 в 17:39

1. На новых серверах директива "Options" запрещена из соображений безопасности. Запретить листинг можно многими способами. Поставить права 711, создать пустой index.htm или, например, создать какой-нить nolisting.htm в корне сайта и использовать директиву
DirectoryIndex /nolisting.htm

2. Листинг - это атрибут "r", а доступ к содержимому - "x", который как раз и отстутсвует при правах 644.


Anonymous - 20.6.2004 в 12:33

Все сделал, как сказано, но не получилось....


Anonymous - 8.2.2005 в 20:15

А что указывать в файле .htaccess при защите папки паролем в директиве AuthUserFile?
Какой будет полный путь, если мой файл лежит в папке /domains ?


support - 8.2.2005 в 21:57

Цитата:
А что указывать в файле .htaccess при защите папки паролем в директиве AuthUserFile?
имя файла с логинами и паролями для авторизации очевидно
Цитата:
Какой будет полный путь, если мой файл лежит в папке /domains ?
/home/<имя_пользователя>/domains/<имя_файла>


DeDemon - 26.8.2005 в 21:37

"Только не забудьте закрыть прямой доступ к файлам через http (с помошью .htaccess)"

- как это сделать? Поясните, пожалуйста!


Anonymous - 3.12.2005 в 03:03

А если мне нужно запретить доступ к двум файлам?

то есть добавить добавить в .htaccess
<Files .htaccess>
order allow,deny
deny from all
</Files>

и

<Files .htpasswd>
order allow,deny
deny from all
</Files>

Как это правильно сделать?
Так правильно?
<Files .htaccess .htpasswd>
order allow,deny
deny from all
</Files>


support - 3.12.2005 в 19:58

Так и делайте - 2мя отдельными директивами Files
Или используйте FilesMatch
А вообще файлы начинающиеся с точки вроде и так недоступны для загрузки браузером.


Anonymous - 4.4.2006 в 21:48

Цитата:
сообщение support:

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

да-да, конечно, в коробочном hhtpd.conf обычно только:

Код:
<FilesMatch "^.ht">
Order allow,deny
Deny from all
</FilesMatch>
чего, как правило вполне достаточно: "to prevent .htaccess and .htpasswd files from being viewed by Web clients".

но, это не значит, что *все* .dotfiles недоступны ХТТП клиентам.


Anonymous - 31.3.2010 в 10:57

Сейчас использую бесплатный первый месяц.

Можете на примере форума phpbb3 расписать все конкретно. Как изменятся права указанные в документации к phpbb3 http://www.phpbb.com/kb/article/phpbb3-chmod-permissions/ ? И соответственно в какие каталоги следует класть файл htaccess?

P.S. Непонятно под каким именем пользователя входить на форум. Или где регистрироваться.


Anonymous - 31.3.2010 в 11:04

В документации, на которую ссылаетесь все это и достаточно конкретно написано. Если что-то непонятно, то спрашивайте на форуме phpbb и воспользуйтесь этим http://site-helper.ru/plugin.html#webscript


Anonymous - 31.3.2010 в 13:03

Т.е. я могу выполнить все согласно этой документации и не выполнять никаких действий, описанных в данном топике?
К примеру файл config.php в котором хранится пароль к БД согласно документации имеет разрешения 644. Т.е. его может читать кто-угодно? Не думаю что это допустимо для пароля БД? Или я чего-то не понимаю?


kpv - 31.3.2010 в 15:03

На нашем сервере с Directadmin структура папок, прав и настройка php на них сделана таким образом, что можете 777 поставить - другие пользователи не смогут прочитать данный файл.


kpv - 31.3.2010 в 15:05

не меняйте только права и группы на папки public_html и все выше лежащие.


Dalek - 31.3.2010 в 15:23

А тогда какова область применения данной темы и совета никогда не ставить 777 ?

P.S. Интересный ход, спрятать ссылку регистрации в форму ответа :)


kpv - 31.3.2010 в 15:32

>совета никогда не ставить 777 ?
она общая для unix систем и если Вы держите сервер для себя и у php не включен safe mode или другие способы в ограждении доступа, то да, надо всё соблюдать. И в любом случае 777 желательно никогда не ставить - через уязвимость могут залить всякую гадость в этот каталог. ставить только при полной уверенности и нужности данного действия.

p.s. ни один спамер ещё не нашёл....


Dalek - 5.4.2010 в 09:18

Спасибо, более или менее понятно