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


Автор: andrewr 8.1.2010, 22:44
Использую базу на Interbase, и хочу сделать защиту от injection с помощью mysql_real_escape_string но получаю ошибку.Помогите, если кто то раньше с таким сталкивался smile 

Автор: Simpliest 8.1.2010, 22:57
andrewr
для FB/IB используй prepared statement

ibase_prepare
ibase_execute

это более безопасный вариант. 
Аналог есть в MySQLi stmt->bind(), stmt->exec()

Автор: andrewr 8.1.2010, 23:49
ibase_prepare не то, он проверит нету ли там рнр, но скюл запрос не проверит. 

Автор: skyboy 9.1.2010, 01:35
Цитата(andrewr @  8.1.2010,  22:49 Найти цитируемый пост)
он проверит нету ли там рнр, но скюл запрос не проверит.

ничего он не "проверит".
ты знаешь, что такое sql injection? это когда ты вставляешь нечто, что должно быть строковой константой в запросе, но за счет кавычек в этом значении то, что должно было быть просто константой наравне с числами и датами, становится частью запроса наравне с тем, что ты вбил как программист. все, что надо сделать - экранировать кавычки-разделителя внутри значения, чтоб вместо
Код

select * from some_table where field="1" OR 1="1"

получалось
Код

select * from some_table where field="1\" OR 1=\"1"

т.е. field сравнивалось со строкой 
Цитата

1" OR 1="1

на самом деле, "опасность представляют" не только кавычки. в зависимости от СУБД проблемы могут быть и с управляющими символами. Но они тоже экранируются. Как, например, 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 9.1.2010, 06:22
В дополнение ко всему вышесказаному skyboy.

Цитата(andrewr @  8.1.2010,  21:44 Найти цитируемый пост)
mysql_real_escape_string 

Работает только при ОТКРЫТОМ соединении с БД MySQL это раз. 
И защищает исключительно БД MySQL это два.

Автор: andrewr 9.1.2010, 13:45
Спасибо за информацию и разъяснения smile Тогда вопрос: как защитить чтобы не взломали ?

Автор: skyboy 9.1.2010, 14:35
чем же тебе не угодил предложенный Simpliest
Цитата(Simpliest @  8.1.2010,  21:57 Найти цитируемый пост)
ibase_prepare
ibase_execute
?

Автор: nerezus 10.1.2010, 14:12
Цитата

базу на Interbase, и хочу сделать защиту от injection с помощью mysql_real_escape_string но получаю ошибку
 Тебя не насторожила комбинация букв mysql в названии функции mysql_real_escape_string?

Автор: Ипатьев 10.1.2010, 14:48
я думаю - нет.
Ведь почти каждый пхп-программист знает, что mysql_real_escape_string - это волшебная функция защиты от инъекций. сказал это слово - и можешь быть спокоен, ты защитился.

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