Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопросы защиты при занесении в базу пользовательских данных
 
 автор: Timmy   (04.11.2004 в 22:44)
 
 

Проблема такая: у меня есть приложение, которое получает некоторые пользовательские данные через GET-запрос(в УРЛ), и должно положить их в базу данных. Как обезопасить себя от экплойтов типа ввода sql-кода, при условии, что полученные данные занести в базу обязательно.
Сейчас они напрямую пихаются в SQL-запрос. При этом самому мне не удалось её уронить путём ввода урл типа ...&text=%22%3Bdrop+table+xxx, но может я что-то не так делаю?
И вообще, как именно передаются запросы из PHP в MySQL?

   
 
 автор: cheops   (04.11.2004 в 23:20)   письмо автору
 
   для: Timmy   (04.11.2004 в 22:44)
 

Хм... нужно чётко подбирать инъекционный запрос, если имеется запрос вида
SELECT * FROM xxx WHERE name='$name'

Т.е. если вместо $name передать
hello'; DROP TABLE ххх; SELECT * FROM xxx WHERE name='hello

то конечный запрос
SELECT * FROM xxx WHERE name='hello'; DROP TABLE ххх; SELECT * FROM xxx WHERE name='hello'

Лечить это следует заменой прямых кавычек на обратные, как на этом форуме, если при выводе обратные кавычки непримелемы - их можно заменить обратно на прямые, зато инъекционные запросы с применением кавычек выполнить не удастся.

   
 
 автор: Timmy   (05.11.2004 в 00:16)   письмо автору
 
   для: cheops   (04.11.2004 в 23:20)
 

Хммм... Вообще-то я использую двойные кавычки:
$query="SELECT * FROM xxx WHERE name=\"".$name."\"" 

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

   
 
 автор: cheops   (05.11.2004 в 01:16)   письмо автору
 
   для: Timmy   (05.11.2004 в 00:16)
 

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

   
 
 автор: Akira   (04.11.2004 в 23:22)   письмо автору
 
   для: Timmy   (04.11.2004 в 22:44)
 

По-моему в этом случае следует использовать post запрос , а не get, и по моему не не получеться через INSERT выполнить DROP. Ведь Вы используете вставку (INSERT) для добавления пользовательских данных?

   
 
 автор: Timmy   (05.11.2004 в 00:04)   письмо автору
 
   для: Akira   (04.11.2004 в 23:22)
 

POST использовать не получится, отправляю запрос не я, а другое приложение (уже существующее). DROP будет выполняться не через INSERT, а после, разделённый точкой с запятой.

   
 
 автор: Sin   (04.11.2004 в 23:28)   письмо автору
 
   для: Timmy   (04.11.2004 в 22:44)
 

Запросы из PHP в MySQl передаются очень просто.
Для начала надо установить свясь с БД.
$conn_id=mysql_connect($sql_host,sql_login,$sql_password);

где
$sql_host - имя хоста, например ldipclub.mwport.ru, на локальной машине надо писать localhost
$sql_login - имя базы
$sgl_password - пароль базы, я думаю в коментарии не нуждается.
После этого следует выбрать таблицу.
mysql_select_db($"sql_database);

где sql_database имя таблицы
Теперь самое главное. Связь установлена - делаем запрос.
$sql_quary="Тут сам запрос";
$sql_res=mysql_query($sql_query,$conn_id);

Ну тут я думаю понятно, $sql_quary сам запрос, а conn_id индитификатор соединения
И в конце концов надо закрыть соединение с базой
mysql_close($conn_id);

   
 
 автор: Timmy   (05.11.2004 в 00:06)   письмо автору
 
   для: Sin   (04.11.2004 в 23:28)
 

Я имел в виду не то, как им пользоваться, а что конкретно происходит при выполнении mysql_request(). Какой механизм при этом используется; обрабатывается ли как-то строка запроса и т.д.

   
 
 автор: chip   (05.11.2004 в 02:08)
 
   для: Timmy   (05.11.2004 в 00:06)
 

А меня интерует такой вопрос:
Злоумышленник получил доступ к дериктории с документами(скриптами), но пароль от базы он не знает (он храниться в подключаемом файле который вынесен в другую директория).
Но он может изменять код моих скриптов с энными целями
ВОПРОС
как мне сделать так что даже получив возможность изменять скрипты он не смог изменить данные БД (личные данные) т.е. как сделать так чтоб обращение к полям таблицы осуществлялось авторизованно?

   
 
 автор: glsv (Дизайнер)   (05.11.2004 в 11:53)   письмо автору
 
   для: chip   (05.11.2004 в 02:08)
 

Перенес Ваш вопрос в новый топик - в новой теме будет удобнее отвечать.

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=673&page=1

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования