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
Форумы портала PHP.SU :: Версия для печати :: SQL иньекции и способы защиты
Форумы портала PHP.SU » » Работа с СУБД » SQL иньекции и способы защиты

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

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

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

mysql_real_escape_string дополнительно экранирует всё, что требуется с учетом локалей. Да и вообще лучше знает, что для своей базы надо экранировать.
3. Bio man - 29 Сентября, 2011 - 16:50:56 - перейти к сообщению
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...
4. Мелкий - 29 Сентября, 2011 - 16:57:50 - перейти к сообщению
Тип инъекции изобретён один - вклиниться в инструкцию. Не имеет значения, что в этой инъекции, важно только, будет ли прервана строка или нет.
Естественно, если вы напишите

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

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

Ни одна инъекция ничего не сделает, т.к. останется простой строкой.
5. Bio man - 29 Сентября, 2011 - 17:04:44 - перейти к сообщению
ясно. а вот есть ли смысл в этом?
PHP:
скопировать код в буфер обмена
  1. protected function escapeString($sql) { // Экранирует специальные символы в строке
  2.                 $sql = addslashes($sql);
  3.                 return mysql_real_escape_string($sql, $this->connection);
  4.         }

то есть есть ли смысл в addslashes?
6. Мелкий - 29 Сентября, 2011 - 17:05:21 - перейти к сообщению
Нет. А зачем он здесь?
7. Bio man - 29 Сентября, 2011 - 17:08:24 - перейти к сообщению
Мелкий пишет:
Нет. А зачем он здесь?
думал раньше что дополнительная какая нибудь защита будет. вот мне кажется в htmlentities есть смысл или я ошибаюсь?
8. Мелкий - 29 Сентября, 2011 - 17:15:36 - перейти к сообщению
Bio man пишет:
вот мне кажется в htmlentities есть смысл или я ошибаюсь?

Защита от XSS, обязателен при выводе данных, которым не доверяете.
9. LIME - 29 Сентября, 2011 - 18:26:43 - перейти к сообщению
Bio man пишет:
и в переменную пасс передать что то типо qwerty' or 1=1 и обработать этот запрос с mysql_real_escape_string то эта ф-ция предотвратит вход в систему?
вам ничего не мешает вывести полученную после обработки строку и увидеть что пойдет в запрос базе
наглядность помогает понять

 

Powered by ExBB FM 1.0 RC1