Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Базы Данных > mysql_real_escape_string и interbase |
Автор: andrewr 8.1.2010, 22:44 |
Использую базу на Interbase, и хочу сделать защиту от injection с помощью mysql_real_escape_string но получаю ошибку.Помогите, если кто то раньше с таким сталкивался ![]() |
Автор: 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 | ||||||
ничего он не "проверит". ты знаешь, что такое 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 9.1.2010, 06:22 |
В дополнение ко всему вышесказаному skyboy. Работает только при ОТКРЫТОМ соединении с БД MySQL это раз. И защищает исключительно БД MySQL это два. |
Автор: andrewr 9.1.2010, 13:45 |
Спасибо за информацию и разъяснения ![]() |
Автор: skyboy 9.1.2010, 14:35 |
чем же тебе не угодил предложенный Simpliest ? |
Автор: nerezus 10.1.2010, 14:12 | ||
|
Автор: Ипатьев 10.1.2010, 14:48 |
я думаю - нет. Ведь почти каждый пхп-программист знает, что mysql_real_escape_string - это волшебная функция защиты от инъекций. сказал это слово - и можешь быть спокоен, ты защитился. |