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 инъекций

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: защита от SQL инъекций
newspaper
Отправлено: 16 Мая, 2013 - 17:59:25
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




доброго всем!
подскажите :
1. как надежно защититься от SQL-инъекций при получении данных методами GET и POST?
2. Насколько надежна ф-ия "mysql_real_escape_string" ?
3. Стоит ли её применять к каждой полученной переменной отдельно или к уже сформированному тексту запроса ?
4. у кого может есть какие-нибудь варианты собственных функций защит?

всем заранее спасибо
 
 Top
DelphinPRO
Отправлено: 16 Мая, 2013 - 18:05:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




1. Использовать современные библиотеки доступа к данными (mysqli, pdo) и плейсхолдеры в запросах
2. устарела, как г.. мамонта
3. к переменной, конечно
4. нафига?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
esterio
Отправлено: 16 Мая, 2013 - 18:06:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 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.
 
 Top
newspaper
Отправлено: 16 Мая, 2013 - 18:20:38
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




DelphinPRO, устарела, как г.. мамонта
esterio, результат можно безопасно использовать в SQL-запросе

2 ответа абсолютно противоположные... потому и начал этот топик - сколько людей столько мнений
 
 Top
esterio
Отправлено: 16 Мая, 2013 - 18:28:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Дополню
http://www.php.net/manual/ru/intro.mysql.php
Цитата:
Это расширение не рекомендуется использовать при написании нового кода. Вместо него используйте mysqli или PDO_MySQL. Ознакомьтесь также с обзором MySQL API для более детальной информации по выбору MySQL API.


Вот почему устарело, но сам escape_string есть в том же mysqli и PDO и его также стоит испоьзовать
 
 Top
DelphinPRO
Отправлено: 16 Мая, 2013 - 19:01:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




esterio пишет:
Вот почему устарело, но сам escape_string есть в том же mysqli и PDO и его также стоит испоьзовать

верно. я, наверно, слишком кратко выразился Улыбка

Но всё же предпочтительнее плейсхолдеры в запросах, нежели эскейп

(Отредактировано автором: 16 Мая, 2013 - 19:03:05)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 16 Мая, 2013 - 19:04:48
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




по моему прстая проверка параметров на is_numeric закрывает большинство инекций


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Мая, 2013 - 11:19:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




caballero пишет:
прстая проверка параметров на is_numeric закрывает большинство инекций

Пример, где id AUTOINCREMENT:
PHP:
скопировать код в буфер обмена
  1. $number = " 000000543 ";
  2. if (is_numeric($number)) {
  3.   mysql_query("INSERT INTO tbl (id) VALUES ($number)");
  4. }

1) Не учла концевые пробелы.
2) Не учла ведущий ноль.

Итог: "падение" запроса с некорректным синтаксисом, почти инъекция.
Все будет зависеть от контекста, в котором такой запрос выполняется.
Например далее идет второй инсерт, использующий ласт-инсерт-ид от этого запроса.
Вобщем нагадить однозначно можно.
 
 Top
EuGen Администратор
Отправлено: 17 Мая, 2013 - 11:46:44
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Лучшая защита от SQL-инъекций - это чёткое представление типа данных, которые должны попадать в БД. Тип данных - это не только множество значений, но и множество операций, допустимых над типом. Поэтому, при обработке данных нужно следить, чтобы либо выполнялось явное преобразование типа для операции, либо недопустимая операция не применялась к данным.
И - да, в PHP есть возможность организации псевдо-статической типизации - в особенно критичных частях это может найти своё применение.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Мая, 2013 - 12:18:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 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.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB