Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: защита от SQL инъекций
Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2013
Помог: 0 раз(а)
доброго всем!
подскажите :
1. как надежно защититься от SQL-инъекций при получении данных методами GET и POST?
2. Насколько надежна ф-ия "mysql_real_escape_string" ?
3. Стоит ли её применять к каждой полученной переменной отдельно или к уже сформированному тексту запроса ?
4. у кого может есть какие-нибудь варианты собственных функций защит?
всем заранее спасибо
DelphinPRO
Отправлено: 16 Мая, 2013 - 18:05:44
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
1. Использовать современные библиотеки доступа к данными (mysqli, pdo) и плейсхолдеры в запросах
2. устарела, как г.. мамонта
3. к переменной, конечно
4. нафига?
----- Чем больше узнаю, тем больше я не знаю.
esterio
Отправлено: 16 Мая, 2013 - 18:06:23
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
Почему столько вопросов вместо просто почитать документацию
[url]php.net/manual/en/function.mysql-real-escape-string.php[/url]
Цитата:
Экранирует специальные символы в unescaped_string, принимая во внимание кодировку соединения, таким образом, что результат можно безопасно использовать в SQL-запросе в функции mysql_query(). Если вставляются бинарные данные, то к ним так же необходимо применять эту функцию.
mysql_real_escape_string() вызывает библиотечную функцмю MySQL mysql_real_escape_string, которая добавляет обратную косую черту к следующим символам: \x00, \n, \r, \, ', " и \x1a.
Эта функция должна всегда (за несколькими исключениями) использоваться для того, чтобы обезопасить данные, вставляемые в запрос перед отправкой его в MySQL.
newspaper
Отправлено: 16 Мая, 2013 - 18:20:38
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2013
Помог: 0 раз(а)
DelphinPRO, устарела, как г.. мамонта esterio, результат можно безопасно использовать в SQL-запросе
2 ответа абсолютно противоположные... потому и начал этот топик - сколько людей столько мнений
esterio
Отправлено: 16 Мая, 2013 - 18:28:46
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Это расширение не рекомендуется использовать при написании нового кода. Вместо него используйте mysqli или PDO_MySQL. Ознакомьтесь также с обзором MySQL API для более детальной информации по выбору MySQL API.
Вот почему устарело, но сам escape_string есть в том же mysqli и PDO и его также стоит испоьзовать
DelphinPRO
Отправлено: 16 Мая, 2013 - 19:01:52
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
esterio пишет:
Вот почему устарело, но сам escape_string есть в том же mysqli и PDO и его также стоит испоьзовать
верно. я, наверно, слишком кратко выразился
Но всё же предпочтительнее плейсхолдеры в запросах, нежели эскейп
mysql_query("INSERT INTO tbl (id) VALUES ($number)");
}
1) Не учла концевые пробелы.
2) Не учла ведущий ноль.
Итог: "падение" запроса с некорректным синтаксисом, почти инъекция.
Все будет зависеть от контекста, в котором такой запрос выполняется.
Например далее идет второй инсерт, использующий ласт-инсерт-ид от этого запроса.
Вобщем нагадить однозначно можно.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Лучшая защита от SQL-инъекций - это чёткое представление типа данных, которые должны попадать в БД. Тип данных - это не только множество значений, но и множество операций, допустимых над типом. Поэтому, при обработке данных нужно следить, чтобы либо выполнялось явное преобразование типа для операции, либо недопустимая операция не применялась к данным.
И - да, в PHP есть возможность организации псевдо-статической типизации - в особенно критичных частях это может найти своё применение.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DeepVarvar
Отправлено: 17 Мая, 2013 - 12:18:49
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
К сожалению:
Цитата:
This extension is EXPERIMENTAL. The behaviour of this extension including the names of its functions and any other documentation surrounding this extension may change without notice in a future release of PHP. This extension should be used at your own risk.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.