Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: SQL инъекция
 
 автор: kis-kis   (21.11.2007 в 18:40)   письмо автору
 
 

Достаточно ли проверять целые значения с помощью функции intval(), а все остальные с помощью mysql_escape_string(), чтобы избежать SQL инъекции?

Спасибо.

   
 
 автор: kis-kis   (22.11.2007 в 07:21)   письмо автору
 
   для: kis-kis   (21.11.2007 в 18:40)
 

Никто не подскажет?

   
 
 автор: Alexneo   (22.11.2007 в 08:19)   письмо автору
 
   для: kis-kis   (22.11.2007 в 07:21)
 

хорошо бы еще теги заменять. htmlspecialchars()
а так все ок)

   
 
 автор: Trianon   (22.11.2007 в 08:57)   письмо автору
 
   для: kis-kis   (22.11.2007 в 07:21)
 

Не проверять, а прогонять через.
Если при этом результат mysql_escape_string Вы сразу же окружаете кавычками,
числовые аргументы преобразуете через intval или floatval, и никакие другие переменные/выражения у Вас не участвуют в формировании тела запроса, то можете считать , что от атаки SQL-injection Вы защищены.
Как минимум при работе с однобайтовыми кодировками.
Если работаете с UTF-8 - следует применять mysql_real_escape_string()

Alexneo: не нужно отвечать на вопрос, если Вы не ориентируетесь в нем.
htmlspecialchars не имеет никакого отношения к SQL-injection, и на данном этапе её применение только внесет ошибки в процесс обработки данных.

   
 
 автор: Unkind   (22.11.2007 в 16:12)   письмо автору
 
   для: Trianon   (22.11.2007 в 08:57)
 

> Если работаете с UTF-8 - следует применять mysql_real_escape_string()
Это зачем?

   
 
 автор: Trianon   (22.11.2007 в 19:53)   письмо автору
 
   для: Unkind   (22.11.2007 в 16:12)
 

Затем, что экранировать в строке запроса следует целые многобайтовые символы, а не отдельные их байты.
И хотя в проекции русского алфавита на карту utf-8 , критичных символов нет, насколько я помню, но писать всё ж следует аккуратно. Код, работающий с utf-8, неявно предполагает от его автора, что он останется работоспособным при переходе на [возможно более] любой язык, а не только тот, на котором шло тестирование.

   
 
 автор: Unkind   (22.11.2007 в 22:45)   письмо автору
 
   для: Trianon   (22.11.2007 в 19:53)
 

А я не зря это спросил. Вы что-то путаете.

UTF-8 это текст, в котором каждый из символов представлен последовательностью байтов, подходящих под один из шаблонов совокупности:

http://unhost.ru/trash/utf8.txt (прямо в сообщении, к моему большому удивлению, написать не смог)

Так вот байты до 0x7F включительно выражаются одним байтом. А ведь все байты, которые эскейпирует mysql_escape_string() как раз до 0x7F, а именно: 0x00, 0x0A, 0x0D, 0x1A, 0x22, 0x27, 0x5C.

Говорю байты, потому что в данном случае это получается одно и то же.

   
 
 автор: Trianon   (23.11.2007 в 00:57)   письмо автору
 
   для: Unkind   (22.11.2007 в 22:45)
 

Если Вы убеждены, что символ экранирования всегда останется байтом 0x5C - можете эту функцию не применять.

   
 
 автор: Unkind   (23.11.2007 в 07:53)   письмо автору
 
   для: Trianon   (23.11.2007 в 00:57)
 

А может быть другим байтом? Или так: Вы не убеждены, что только 0x5C?

   
 
 автор: Trianon   (24.11.2007 в 00:01)   письмо автору
 
   для: Unkind   (23.11.2007 в 07:53)
 

Ок . Уговорили.
Не в utf-8
В ucs-2

   
 
 автор: Unkind   (24.11.2007 в 00:04)   письмо автору
 
   для: Trianon   (24.11.2007 в 00:01)
 

:) А Вы с какого момента поняли, что нужно было сказать UCS-2/UCS-4?

   
 
 автор: Thrasher   (22.11.2007 в 09:50)   письмо автору
 
   для: kis-kis   (21.11.2007 в 18:40)
 

Вполне достаточно. Я только так и делаю.

   
 
 автор: kis-kis   (22.11.2007 в 11:16)   письмо автору
 
   для: Thrasher   (22.11.2007 в 09:50)
 

Спасибо.

   
 
 автор: cheops   (22.11.2007 в 12:13)   письмо автору
 
   для: kis-kis   (21.11.2007 в 18:40)
 

Да, для защиты от SQL-инъекции, этого достаточно.

   
 
 автор: kis-kis   (22.11.2007 в 19:00)   письмо автору
 
   для: cheops   (22.11.2007 в 12:13)
 

А IP-адрес пропускать через какую функцию intval() или mysql_escape_string()?

Спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования