Безопасность сессий в PHP-скриптах.

Net.Ru

Новичок
Безопасность сессий в PHP-скриптах.

Уязвимость локального характера, характерна только для shared-хостинга. Т.е. снаружи злоумышелнник ее использовать не может, может только сосед по хостингу, или злоумышленник, сломавший соседа и взявшийся за вас.

Уязвимость относится к древнему виду tmp file attack, когда для хранения временных файлов используется общий каталог, работать с которым разрешено всем. Атака основана на чтении, изменении или создании временных файлов, используемых различными программами и скриптами.

Решения для сессий PHP такое же как и для всего класса tmp file attack:
1. Ограничивать доступ к временному файлу, проверять, что временный файл принадлежит именно нам, не был изменен и т.д.
2. Использовать для хранения временных файлов собственный каталог, доступ к которому имеете только вы.

Рекомендации по настройке

1. Если скрипт выполняется с правами пользователя.
Достаточно создать каталог, установить на него разрешение 0700, и через php.ini или .htaccess установить session.save_path на этот каталог

2. Если скрипт выполняется с правами веб-сервера или nobody, safe_mode включен.
Нужно создать каталог и установить на него разрешение, дающее веб-серверу возможность читать, выполнять и записывать этот каталог. Скорее всего это будет что-то типа 0770, как у нас. Обратите внимание, что владельцем
каталога с сессиями должен быть именно пользователь, а не веб-сервер, иначе safe_mode не сможет корректно разделять доступ. Далее, как в первом случае, через php.ini или .htaccess указать session.save_path на этот кталог.

3. Если скрипт выполняется с правами веб-сервера, а safe_mode не включен.
Узнать у провайдера, может быть он использует какой-нибудь другой механизм разграничения доступа. Если нет, то проблема осложняется. Ее тоже можно решить переписывая хэндлер сохранения сессий, но это уже другая история.

См. также:
http://www.webkreator.com/php/configuration/php-session-security.html
Пример атаки:
http://www.securereality.com.au/studyinscarlet.txt 7. Session Files
 

tony2001

TeaM PHPClub
Если немного подумать головой, то становится ясно, что:
- open_basedir
- session.save_path
- upload_tmp_dir
на НОРМАЛЬНОМ хостинге должны быть личными для каждого виртуального хоста.
причем решается это 3-мя строками в httpd.conf.
 

Net.Ru

Новичок
Не буду спорить, что должно или не должно быть прописано. Практически у всех прописано /tmp.

Посмотрите свой phpinfo(). Сделайте поиск на google по phpinfo session.save_path.
 

tony2001

TeaM PHPClub
мне в детстве родители вопрос задавали, когда я делал(или хотел делать) что-то как все:
"- если все с 16-го этажа прыгнут - ты тоже за ними прыгнешь?"
мне кажется, что здесь он уместен.

если большинству админов лениво маны читать и нормально софт настраивать - это не значит, что проблема в софте.
это проблема в голове у админов.
 

SeazoN

Guest
PHP:
Практически у всех прописано /tmp.
Ну я к примеру не хостер.
И о сэйфмоде и речи не идёт - всё своё, радное ;)
 

Net.Ru

Новичок
Нет предложения обсуждать, что должен делать хостер.

Есть конкретные факты:
1. публично доступный session.save_path уязвим
2. более 99% shared-хостеров оставляют session.save_path по умолчанию /tmp.

Просто знайте это, если вы этого еще не знали.

К тем, кто имеет все свое, родное, конечно же топик отношения не имеет, так как проблема только для shared-хостинга.
 

[VS]

Guest
к проблемам PHP это не относится, это проблема кривой конфигирации сервера.
 

clevel

Новичок
Не буду спорить, что должно или не должно быть прописано. Практически у всех прописано /tmp.
глупости, у трех хостился, у всех хостеров были на папки пользователя сконфигурированы!
 

leosha

Старожил PHPCLub
clevel - ну можешь себя поздравить. Ты хостишься в хороших местах.

Вы все зря наехали на Net.ru
Он сильно прав. И топик этот поднял явно не для того чтобы рассказать о проблемах PHP... а о тех проблемах, которые реально существуют.
 

si

Administrator
Не думаю что это чисто проблема хостера и настроек httpd. Писать в httpd.conf конечно можно, если у вас несколько десятков сайтов, а если их тысячи ? это будет поедать память, т.к на каждый VH будет своя конфигурация, и при большом кол-ве VH это будет ощутимо. Проблемы тут нет ни какой т.к вы всегда можете это изменить для себя из скрипта, .htaccess. Если тут все такие пребовательные, то наверно надо иметь свою машину и делать там так как вам нравиться, а требовать от хостинга стоимость 5$ в месяц чеголи вообще смешно по моему... То что предлагает Net.RU за те деньги и там много :)
 

[VS]

Guest
Ну все относительно. Если говорить о хостинге за 5$ в месяц то требовать чего-то от хостера действительно сложно.
Но кто-же в здравом уме будет на хостинге за 5$ держать сайты где нужна security?
 

leosha

Старожил PHPCLub
Самая ценная мысль: "Но кто-же в здравом уме будет на хостинге за 5$ держать сайты где нужна security?" =)
 

leosha

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

По крайней мере, мне попадались 4 штуки. Везде все "по пацански", есть "панель управления сайтом"... Полный доступ получаешь минут за 7-10, соответственно.

Скоро выборы, однако ж.. =)
 

Net.Ru

Новичок
Автор оригинала: [VS]
Ну все относительно. Если говорить о хостинге за 5$ в месяц то требовать чего-то от хостера действительно сложно.
Но кто-же в здравом уме будет на хостинге за 5$ держать сайты где нужна security?
Вы получите отличную надежность и безопасность хостинга и за $1, и за $15, если это наш хостинг.

Основная угроза безопасности - сам пользователь. Не использовать дырявые скрипты, не делать ошибки при настройке.

Наша базовая модель безопасности уже избавляет пользователя от большинства рисков. /tmp закрыт от листинга и увидеть чужую сессию там не получится. Пользовательские каталоги по умолчанию закрыты от соседей. Назначены соответствующие права доступа для apache, mod_php, cgi и resin.

Относительно к PHP, настройки, связанные с безопасностью:
display_errors on
include_path .:/usr/local/lib/php
magic_quotes_gpc on
magic_quotes_runtime off
register_globals on
upload_tmp_dir /tmp
session.save_path /tmp

Не самая безопасная конфигурация. Но это соответствует требованиям больинства скриптов. Например, 90% скриптов считают, что register_globals on.


P.S. Мы держим свои сайты вместе с клиентскими на тех же серверах.
 

Net.Ru

Новичок
Автор оригинала: [VS]
к проблемам PHP это не относится, это проблема кривой конфигирации сервера.
Ладно, если все так упорно хотят обсуждать хостеров, мы будем отвечать.

При конфигурировании софта мы стараемся не отходить без нужды от параметров по умолчанию. Мы считали, что человек, пишущий программы, сам в состоянии настроить свое окружения. Указать sesison.save_path ничуть не труднее, чем
тот же register_globals. В мануале по php sessions большими буквами написан Warning про sesison.save_path.

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

P.P.S. Вероятно, имеет смысл поднять и другие проблемы, которые, как кажется, ясны далеко не всем - с register_globals on, с установкой прав доступа к файлам и т.д.
 

tony2001

TeaM PHPClub
session.save_path никак не может повлиять на работу скриптов, разве что, если несуществующий указать.
следовательно - это надо делать все принудительно и юзерам об этом можно и не говорить, ибо не их это забота, а хостинга.

>При таком положении дел нам придется о них дополнительно
> позаботиться и принудительно разделять пользовательские сессии в
> отдельные каталоги.
ну если эта "дополнительная забота" для вас лишняя или накладная, то я не пойму причем здесь РНР.
вы рутовый пароль не забываете устанавливать ?
это такая же обычная процедура обеспечения безопасности.

>Сейчас, прочитав обсуждения на этом форуме, мы пришли к выводу, что
> большое число php-кодеров о таких вещах даже не подозревает.
не понял - это о чем речь ?

>В мануале по php sessions большими буквами написан Warning про sesison.save_path.
вот-вот.
так что, я не вижу необходимости обсуждать темы из мана.
 

Arthur

Good Member
Re: Безопасность сессий в PHP-скриптах.

Автор оригинала: Net.Ru

Рекомендации по настройке

2. Если скрипт выполняется с правами веб-сервера или nobody, safe_mode включен.
А как сделать, что бы он выполнялся с правами сервера ?
 

Mammoth

Guest
ИМХО, для того чтобы скрипт выполнялся с правами веб-сервера как раз ничего делать не надо...
 

si

Administrator
Да, точно :) suexec для того что бы он выполнялся с правани пользователя :)
 
Сверху