Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > безопасность БД mysql


Автор: GrafF812 8.8.2010, 12:27
Здравствуйте, меня интересует вопрос безопасности БД mysql, правильно ли я понимаю, что создавая пользователя в phpmyadmin, и выключая возможность удаления таблиц, то случайно проникшая sql-инъекция (типа drop table uesers) не сможет ничего сделать?

Автор: programming 8.8.2010, 13:30
Если в скрипте используется для подключения именно этот юзер.

Автор: GrafF812 8.8.2010, 20:34
а зачем вообще пользователям на сайте давать доступ на удаления таблиц?

Автор: bars80080 8.8.2010, 20:36
это ты у нас спрашиваешь?
я вообще не знаю зачем давать им право вообще каких либо операций с таблицами, за исключением контролируемых вводов данных


Автор: overmet 8.8.2010, 20:56
Внедрение SQL-кода один из распространённых способов взлома сайтов,
Код

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] [RESTRICT | CASCADE]

Этот оператор удаляет таблицу или таблицы из текущей базы данных.

tbl_name
    - Имя удаляемой таблицы. 

IF EXISTS


RESTRICT и CASCADE
    - Не несут никакой функциональности. Оставлены для упрощения переноса программы. 



а это уже удаление таблиц, хана сайту без бэкапа

Автор: GrafF812 9.8.2010, 07:07
Подскажите тогда как обезопасить бд от удаления, если у пользователя есть право удалять строки из таблицы? 

Автор: NLspieler 9.8.2010, 14:29
Цитата(GrafF812 @  9.8.2010,  07:07 Найти цитируемый пост)
Подскажите тогда как обезопасить бд от удаления, если у пользователя есть право удалять строки из таблицы?  

Все данные, полученные от пользователя, которые нужно будет вставить в запрос,
необходимо пропустить через функцию mysql_real_escape_string
Код

$var = mysql_real_escape_string ($var) ;
$var1 = mysql_real_escape_string ($var1) ;

Пропускать нужно после подключения к базе данных, иначе скрипт сообщит об ошибке.

Кроме того, если пользователь передаёт некое целое число, то его можно принудительно превратить в число
Код

$id = (int) $id ;



Автор: bars80080 9.8.2010, 14:41
я думаю, имеет место путанница обычной работы пользователей сайта с БД и непосредственно с наделением прав пользователей mysql

Автор: GrafF812 9.8.2010, 17:32
bars80080, да, меня конкретно интересуют привилегии пользователей БД. Ну например когда пользователь находится на главной странице сайта и просматривает новости, то он просмотрев например 10 новостей, хочет просмотреть еще 20 и т.д, он нажимает на ссылку которая показывает еще 10 новостей. Естественно это сделано с использованием запроса SELECT...... Поскольку в начале скрипта указывается подключение к бд, где указывается имя пользователя, то для этого пользователя можно запретить возможность удаления таблиц. В этом случае будет ли 100% безопасность против sql-инъекции типа DROP table `users` ? 

Автор: bars80080 10.8.2010, 11:02
Цитата(GrafF812 @  9.8.2010,  17:32 Найти цитируемый пост)
да, меня конкретно интересуют привилегии пользователей БД. Ну например когда пользователь находится на главной странице сайта и просматривает новости, то он просмотрев например 10 новостей, хочет просмотреть еще 20 и т.д, он нажимает на ссылку которая показывает еще 10 новостей. Естественно это сделано с использованием запроса SELECT...... Поскольку в начале скрипта указывается подключение к бд, где указывается имя пользователя, то для этого пользователя можно запретить возможность удаления таблиц

вот-вот, я и говорю: путаете.

традиционно пользователь к БД существует всего один - администратор сайта. при коннекте к БД, в не зависимости от того сколько пользователей читает сейчас форум, соединение устанавливается именно для пользователя-администратора. то есть грубо говоря, ты сейчас читаешь форум, в котором данные из БД были извлечены из-под учётной записи администратора сайта.
при этом, никакой связи между пользователем БД и зарегестрированным аккаунтом на этом форуме - нет. мы все (80000 пользователей - аккаунтов) сидим под одним пользователем БД. а значит нет никаких различий в правах использования БД

почему же мы (рядовые участники) не имеем возможности удалять или как-то иначе корректировать БД? да потому что мы не работаем с БД напрямую. мы все общаемся с ней через вэб-интерфейс, который называется "сайт". интерфейс написан на языке php. вот именно php и решает кому какие права предоставлять. когда ты авторизуешься, то из БД извлекаются данные твоего аккаунта, где записано в какие разделы ты можешь ходить, а в какие нет. в итоге, чтобы удалить строку из таблицы в БД нужно нажать на нарисованную кнопку на сайте. но php на основании твоего аккаунта принимает решение: показать тебе кнопку или нет, совершить ли действие по удалению или нет


поэтому вопрос о пользователе БД лишён смысла.
разработчик сайта пишет сам, какие запросы может выполнить пользователь на сайте. также вводит систему распределения прав доступа. и уж точно не даёт никому шнырять в phpmyadmin.
остаётся только защитить формируемые запросы от sql-инъекции, что делается исключительно с помощью одной функции mysql_real_escape_string().
заметь, пользователь не пишет сам запрос, он всего лишь вводит данные в поля и нажимает кнопки, вот эти данные и необходимо пропускать через эту функцию.

Автор: bazzjr 10.8.2010, 13:18
bars80080, даже не озабоченно-мертвый поймет теперь как работает безопасность в MySql  smile  smile  smile 

+100!   smile 

Автор: GrafF812 10.8.2010, 20:06
bars80080, да спасибо Вам за объяснение, Вы можете порекомендовать книги по безопасности Web-сайтов ?

Автор: bars80080 10.8.2010, 20:12
нет. как-то не задавался их поиском

Автор: overmet 16.8.2010, 23:57
Цитата

да спасибо Вам за объяснение, Вы можете порекомендовать книги по безопасности Web-сайтов ? 

книга - "Безопасность Web-приложений - готовые решения - Секреты хакеров"

Цитата

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

 smile 

Автор: lexxmix 17.8.2010, 03:13
юзать маны надо http://dev.mysql.com/tech-resources/articles/mysql_intro_rus.html#SECTION0006000000

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)