PHP: безопасное хранение данных
3875
21
Я уже долго мучился с безопасным программированием на PHP, но тем не менее хотелось бы узнать что-нидь новое.
Безопасность - не дать юзеру доступа к данным (на чтение или запись), если такого нет.
Решение было найдено такое -
http://ля-ля-ля/php.cgi/program.php
Как известно, cgi-ки исполняются с вашими правами.
Однако проблема другая - при этом создаются ваши процессы, на которые есть ограничение по количеству. А отсеивание лишних подключений с одного адреса с учётом запуска php тоже времени жрёт немало, поэтому DOS атака даже при нескольких десятков запросов в секунду проводится элементарно.
Кто-нибудь ещё сталкивался с этой проблемой и как её решал?
Lost__Shadow
Безопасное программирование на пхп и способность противостоять атакам, приводящим к отказу от обслуживания - две вещи из разных степей. Первое - задача программиста, вторая - сервера.
Это понятно. А что-то конкретное предложить можешь?
Lost__Shadow
Что бы получить доступ к серверу, надо либо ломать сам сервер, т.е. софт который там стоит, либо искать уязвимости скриптах. Насколько я уже ознакоминлся с PHP , получить доступ можно лишь загрузив используя кривонаписанный скрипт, свой скрипт. Но и это не даст полных прав.
Lost__Shadow
Это понятно. А что-то конкретное предложить можешь?
:ухмылка: По безопасности скриптов или дуракоупорства сервера? Вот про сервер пжалста: ставь *nix, apache, php, etc.. и не забывай следить за обновлениями. Просматривая логи будешь умилятьсяб глядя как эти самые DoS атаки аккуратно записаны и как они выглядят.
1. на сервере админ не я.
2. что мешает другому юзверю сделать, например, так: cd ~programer/public_html; cat password.txt ?
Lost__Shadow
1. на сервере админ не я.
2. что мешает другому юзверю сделать, например, так: cd ~programer/public_html; cat password.txt ?
команда
chmod 660 ~programer/public_html/password.txt
chmod 660? тогда до него php-скрипт не доберётся, или ты считаешь, что у меня группа apache-вская есть?
Lost__Shadow
chmod 660? тогда до него php-скрипт не доберётся, или ты считаешь, что у меня группа apache-вская есть?
.htaccess правь, если права есть
:ухмылка: Или проси админа (не забыв про пиво) наложить на этот файл заклинание № 403. (Насколько я понял этот файл был сгенерен твоим скриптом из-под апача?)
Хотя, неразумно хранить пароли в той-же папке, где и остальное да еще и некриптованное (txt) - для чего-ж люди трудились, создавая базы данных?
.htaccess ставит права доступа по http, тут всё просто и понятно. Вопрос был не в том.

Насчёт паролей в тексте - это я для примера. Их храню в md5.

Насчёт базы данных - вот тебе пример из реальной жизни (сам делал):
------------
[04:28pm /]# cat ~/public_html/config.php|grep '$dbpass'
$dbpass = "";
[04:28pm /]# mysql -u -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4419 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> desc .nuke_users;

...

mysql> select * from .nuke_users;

...

mysql> drop table .nuke_users; (это уже шутка)
------------
Собственно, насчёт базы данных - та же проблема - где безопасно хранить пароль к этой базе?
Или более общий вопрос - как вообще безопасно хранить данные на PHP?
Lost__Shadow
------------
[04:28pm /]# cat ~/public_html/config.php|grep '$dbpass'
$dbpass = "";
[04:28pm /]# mysql -u -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4419 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> desc .nuke_users;

...

mysql> select * from .nuke_users;

...

mysql> drop table .nuke_users; (это уже шутка)
------------
Собственно, насчёт базы данных - та же проблема - где безопасно хранить пароль к этой базе?
Или более общий вопрос - как вообще безопасно хранить данные на PHP?
Я че-т совсем потерялся: в каком месте здесь пхп. Ты показываешь пример из-под рута (это раз), каким образом можно cat выполнить из-под апача удаленно (?), все-таки ведь надо сидеть локально или удаленно ссх\телнет, чтобы такие финты проделать (это 2)? И при чем тогда тут пхп?

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

Все-таки определись, что ты хочешь. :ухмылка:

И последнее: безопаснее всего хранить пароли на выключенном компе, запертом в засыпном сейфе.
Чей-то я совсем ничего не понимаю, что вы тут пытаетесь сделать :ха-ха!:
:ха-ха!: :ха-ха!:
Lost__Shadow
1. на сервере админ не я.
2. что мешает другому юзверю сделать, например, так: cd ~programer/public_html; cat password.txt ?
Хммм...про cd ~programmer . хммм.... А поподробней можно узнать как это ты собрался делать из под апача ????
2MkZ: для начала - показываю не из-под рута. cat удалённо выполняется не из-под апача, а из ssh/telnet-сессии.

А php тут притом, что его скрипты выполняются от имени апача, и, соответственно, на данные, с которыми он (скрипт) работает, должны быть установлены соответствующие разрешения для юзера апач, что есть группы other, в данном случае кроме апача есть ещё до..рена юзеров, которые, получается, имеют те же права на эти файлы, что и апач. Но не только юзеры, но и их скрипты тоже.

Так вот - вопрос был в том, как в таком случае можно хранить данные безопасно от других юзеров?
Lost__Shadow
не из-под рута. cat удалённо выполняется не из-под апача, а из ssh/telnet-сессии.
# это рут $ это юзер. и нафига там телнет? зарыть и забыть
А php тут притом, что его скрипты выполняются от имени апача, и, соответственно, на данные, с которыми он (скрипт) работает, должны быть установлены соответствующие разрешения для юзера апач, что есть группы other, в данном случае кроме апача есть ещё до..рена юзеров, которые, получается, имеют те же права на эти файлы, что и апач. Но не только юзеры, но и их скрипты тоже.
ставишь права 600 или 700 и никто кроме пользователя и рута даже не понюхает
Так вот - вопрос был в том, как в таком случае можно хранить данные безопасно от других юзеров?
см. предыдущее. -rw- --- ---
Lost__Shadow
Закрываем SSH/Telnet доступ и радуемся жизни.
-==Но не только юзеры, но и их скрипты тоже. =-
А вот тут пример в студия, каким макаром я буду писать скрипт в командной строке осла или другого браузера ?
# это рут $ это юзер. и нафига там телнет?
Приглашение баша можно менять.
зарыть и забыть
1. прав рута нету.
2. это ничего не даст (cgi)

ставишь права 600 или 700 и никто кроме пользователя и рута даже не понюхает
Верно. Но я спрашивал другое. Обозначу ещё раз проблему, как должно быть. Требуется хранить:
1. твой php-скрипт имеет доступ к данным
2. чужой php-скрипт не имеет доступа к данным
3. другой юзер не имеет доступа к данным
Lost__Shadow
Насчет чужого скрипта, что ты имеешь виду, возможность загрузки на твой сервер ????? Если да, то это дыра в общем-то...Но доступ ты все одно не получишь, при грамотном написание собственных скриптов.
Чтобы получить ответ, обрисуй конкретно свою проблему, а то все вокруг до около ходишь.
CooL/2
Дыра есть, но как её закрывать? пока додумался только до cgi-ки.
Обрисовываю проблему: пишу на php, соответствено есть хост, где хранятся и работают скрипты. Скрипты работают с некоторыми данными. Как сделать так, чтобы другие юзеры этого сервера не имели доступа к этим данным (а то задолбали уже - каких только пакостей не делали).
Lost__Shadow
У тебя есть возможность загрузки файлов на твой сервер ? Если да , то коппай в сторону анализа что за файлик грузят, и все проблемы отпадут, бо что бы что-то узнать надо загрузить скрипт который выполняется на сервере...
CooL/2
Я не понял, что ты имеешь ввиду. Если не сложно, можешь поподробнее? Хотя я думаю, что ты не совсем правильно меня понял...
Lost__Shadow
Элементарно, ты мне можешь объяснить как твой сервер будут ломать если у тебя нет возможности загрузить файл,тот же скрипт к примеру??? Либо ты хочешь сказать что у тебя вся важная информация в txt или еще хуже в inc или html файлах хранится ????
сей вопрос лучше в аське обсудить,сливай приватом.