|
автор: Timmy (04.11.2004 в 22:44) |
|
| Проблема такая: у меня есть приложение, которое получает некоторые пользовательские данные через GET-запрос(в УРЛ), и должно положить их в базу данных. Как обезопасить себя от экплойтов типа ввода sql-кода, при условии, что полученные данные занести в базу обязательно.
Сейчас они напрямую пихаются в SQL-запрос. При этом самому мне не удалось её уронить путём ввода урл типа ...&text=%22%3Bdrop+table+xxx, но может я что-то не так делаю?
И вообще, как именно передаются запросы из PHP в MySQL? | |
|
|
|
|
|
|
|
для: 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'
|
Лечить это следует заменой прямых кавычек на обратные, как на этом форуме, если при выводе обратные кавычки непримелемы - их можно заменить обратно на прямые, зато инъекционные запросы с применением кавычек выполнить не удастся. | |
|
|
|
|
|
|
|
для: cheops
(04.11.2004 в 23:20)
| | Хммм... Вообще-то я использую двойные кавычки:
$query="SELECT * FROM xxx WHERE name=\"".$name."\""
|
И кто такие обратные кавычки? Я знаю одинарные, двойные и апостроф (который на клавиатуре вместе с тильдой).
Что же это получается, что строку, содержащую кавычку, нельзя запихнуть в базу? | |
|
|
|
|
|
|
|
для: Timmy
(05.11.2004 в 00:16)
| | У меня обратные кавычки это апостроф. Если кавычки не экранируются и не преобразуются в обратные - будет ошибка - вы сами можете попробовать. | |
|
|
|
|
|
|
|
для: Timmy
(04.11.2004 в 22:44)
| | По-моему в этом случае следует использовать post запрос , а не get, и по моему не не получеться через INSERT выполнить DROP. Ведь Вы используете вставку (INSERT) для добавления пользовательских данных? | |
|
|
|
|
|
|
|
для: Akira
(04.11.2004 в 23:22)
| | POST использовать не получится, отправляю запрос не я, а другое приложение (уже существующее). DROP будет выполняться не через INSERT, а после, разделённый точкой с запятой. | |
|
|
|
|
|
|
|
для: 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 индитификатор соединения
И в конце концов надо закрыть соединение с базой
| |
|
|
|
|
|
|
|
для: Sin
(04.11.2004 в 23:28)
| | Я имел в виду не то, как им пользоваться, а что конкретно происходит при выполнении mysql_request(). Какой механизм при этом используется; обрабатывается ли как-то строка запроса и т.д. | |
|
|
|
|
автор: chip (05.11.2004 в 02:08) |
|
|
для: Timmy
(05.11.2004 в 00:06)
| | А меня интерует такой вопрос:
Злоумышленник получил доступ к дериктории с документами(скриптами), но пароль от базы он не знает (он храниться в подключаемом файле который вынесен в другую директория).
Но он может изменять код моих скриптов с энными целями
ВОПРОС
как мне сделать так что даже получив возможность изменять скрипты он не смог изменить данные БД (личные данные) т.е. как сделать так чтоб обращение к полям таблицы осуществлялось авторизованно? | |
|
|
|
|
|
|
|
для: chip
(05.11.2004 в 02:08)
| | Перенес Ваш вопрос в новый топик - в новой теме будет удобнее отвечать.
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=673&page=1 | |
|
|
|