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]   

> Описание: как защитится от инъекций?
Bio man
Отправлено: 29 Сентября, 2011 - 16:39:03
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




всем привет. как защитится от SQL инъекций?
я полагаю, что одних лишь addslashes и mysql_real_escape_string будет маловато, хотелось бы узнать еще способы защиты от такого рода атак. и к слову в чем разница между addslashes и mysql_real_escape_string? ведь обе ф-ции добавляют слэши перед спец. символами...
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2011 - 16:43:33
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




От sql-инъекций - mysql_real_escape_string более чем достаточно всегда. Не забывайте только применять её.

Bio man пишет:
и к слову в чем разница между addslashes и mysql_real_escape_string?

mysql_real_escape_string дополнительно экранирует всё, что требуется с учетом локалей. Да и вообще лучше знает, что для своей базы надо экранировать.


-----
PostgreSQL DBA
 
 Top
Bio man
Отправлено: 29 Сентября, 2011 - 16:50:56
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




mysql_real_escape_string спасает от всех типов инъекций? даже от UNION? допустим есть запрос "SELECT * FROM users WHERE login=$login AND pass=$pass" и в переменную пасс передать что то типо qwerty' or 1=1 и обработать этот запрос с mysql_real_escape_string то эта ф-ция предотвратит вход в систему? аналогичный вопрос с инъекцией типа DELETE, UPDATE, INSERT...
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2011 - 16:57:50
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Тип инъекции изобретён один - вклиниться в инструкцию. Не имеет значения, что в этой инъекции, важно только, будет ли прервана строка или нет.
Естественно, если вы напишите

То никакой escape здесь не поможет.

А от типичных:
PHP:
скопировать код в буфер обмена
  1. mysql_query('select * from `tbl` where `field`="'.mysql_real_escape_string($_POST['table']).'"');

Ни одна инъекция ничего не сделает, т.к. останется простой строкой.


-----
PostgreSQL DBA
 
 Top
Bio man
Отправлено: 29 Сентября, 2011 - 17:04:44
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




ясно. а вот есть ли смысл в этом?
PHP:
скопировать код в буфер обмена
  1. protected function escapeString($sql) { // Экранирует специальные символы в строке
  2.                 $sql = addslashes($sql);
  3.                 return mysql_real_escape_string($sql, $this->connection);
  4.         }

то есть есть ли смысл в addslashes?
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2011 - 17:05:21
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Нет. А зачем он здесь?


-----
PostgreSQL DBA
 
 Top
Bio man
Отправлено: 29 Сентября, 2011 - 17:08:24
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Мелкий пишет:
Нет. А зачем он здесь?
думал раньше что дополнительная какая нибудь защита будет. вот мне кажется в htmlentities есть смысл или я ошибаюсь?
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2011 - 17:15:36
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Bio man пишет:
вот мне кажется в htmlentities есть смысл или я ошибаюсь?

Защита от XSS, обязателен при выводе данных, которым не доверяете.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 29 Сентября, 2011 - 18:26:43
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




Bio man пишет:
и в переменную пасс передать что то типо qwerty' or 1=1 и обработать этот запрос с mysql_real_escape_string то эта ф-ция предотвратит вход в систему?
вам ничего не мешает вывести полученную после обработки строку и увидеть что пойдет в запрос базе
наглядность помогает понять
 
 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