![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
andrewr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
Использую базу на Interbase, и хочу сделать защиту от injection с помощью mysql_real_escape_string но получаю ошибку.Помогите, если кто то раньше с таким сталкивался
![]() |
|||
|
||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
andrewr,
для FB/IB используй prepared statement ibase_prepare ibase_execute это более безопасный вариант. Аналог есть в MySQLi stmt->bind(), stmt->exec() |
|||
|
||||
andrewr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
ibase_prepare не то, он проверит нету ли там рнр, но скюл запрос не проверит.
|
|||
|
||||
skyboy |
|
||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
ничего он не "проверит". ты знаешь, что такое sql injection? это когда ты вставляешь нечто, что должно быть строковой константой в запросе, но за счет кавычек в этом значении то, что должно было быть просто константой наравне с числами и датами, становится частью запроса наравне с тем, что ты вбил как программист. все, что надо сделать - экранировать кавычки-разделителя внутри значения, чтоб вместо
получалось
т.е. field сравнивалось со строкой
на самом деле, "опасность представляют" не только кавычки. в зависимости от СУБД проблемы могут быть и с управляющими символами. Но они тоже экранируются. Как, например, mysql_real_escape_string экранирует символ с кодом 0. но если ты используешь prepared statesment(mysqli->prepare/mysqli->bind или аналог в interbase), то экранирование берет на себя функция /метод bind или что там используется для присоединения значения. а mysql_real_escape_string плюс составление запроса "вручную" заново для каждого нового значения константы - это даже не вчерашний день, а позавчерашний. а на наличие "sql кода" или, тем более, "РНР кода внутри переданной строки" ни mysql_real_escape_string, ни bind не "проверяет". даже если там не будет корректного sql-кода(что приводит к тому, что называется SQL-injection), то если не экранировать кавычки-разделители будет ошибка выполнения запроса. хотя ожидается нормальная работа. думаешь, это лучше, чем sql-injection? |
||||||
|
|||||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
В дополнение ко всему вышесказаному skyboy.
Работает только при ОТКРЫТОМ соединении с БД MySQL это раз. И защищает исключительно БД MySQL это два. |
|||
|
||||
andrewr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
Спасибо за информацию и разъяснения
![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
||||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
я думаю - нет.
Ведь почти каждый пхп-программист знает, что mysql_real_escape_string - это волшебная функция защиты от инъекций. сказал это слово - и можешь быть спокоен, ты защитился. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |