Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql_real_escape_string и interbase, ошибка при совместном использование 
:(
    Опции темы
andrewr
Дата 8.1.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.2.2006

Репутация: нет
Всего: нет



Использую базу на Interbase, и хочу сделать защиту от injection с помощью mysql_real_escape_string но получаю ошибку.Помогите, если кто то раньше с таким сталкивался smile 
PM MAIL   Вверх
Simpliest
Дата 8.1.2010, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



andrewr
для FB/IB используй prepared statement

ibase_prepare
ibase_execute

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


--------------------
user posted image
PM   Вверх
andrewr
Дата 8.1.2010, 23:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.2.2006

Репутация: нет
Всего: нет



ibase_prepare не то, он проверит нету ли там рнр, но скюл запрос не проверит. 
PM MAIL   Вверх
skyboy
Дата 9.1.2010, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(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?
PM MAIL   Вверх
Simpliest
Дата 9.1.2010, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



В дополнение ко всему вышесказаному skyboy.

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

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


--------------------
user posted image
PM   Вверх
andrewr
Дата 9.1.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.2.2006

Репутация: нет
Всего: нет



Спасибо за информацию и разъяснения smile Тогда вопрос: как защитить чтобы не взломали ?
PM MAIL   Вверх
skyboy
Дата 9.1.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



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

PM MAIL   Вверх
nerezus
Дата 10.1.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

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


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ипатьев
Дата 10.1.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 3
Всего: 37



я думаю - нет.
Ведь почти каждый пхп-программист знает, что mysql_real_escape_string - это волшебная функция защиты от инъекций. сказал это слово - и можешь быть спокоен, ты защитился.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.