|
|
|
| Достаточно ли проверять целые значения с помощью функции intval(), а все остальные с помощью mysql_escape_string(), чтобы избежать SQL инъекции?
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(21.11.2007 в 18:40)
| | Никто не подскажет? | |
|
|
|
|
|
|
|
для: kis-kis
(22.11.2007 в 07:21)
| | хорошо бы еще теги заменять. htmlspecialchars()
а так все ок) | |
|
|
|
|
|
|
|
для: kis-kis
(22.11.2007 в 07:21)
| | Не проверять, а прогонять через.
Если при этом результат mysql_escape_string Вы сразу же окружаете кавычками,
числовые аргументы преобразуете через intval или floatval, и никакие другие переменные/выражения у Вас не участвуют в формировании тела запроса, то можете считать , что от атаки SQL-injection Вы защищены.
Как минимум при работе с однобайтовыми кодировками.
Если работаете с UTF-8 - следует применять mysql_real_escape_string()
Alexneo: не нужно отвечать на вопрос, если Вы не ориентируетесь в нем.
htmlspecialchars не имеет никакого отношения к SQL-injection, и на данном этапе её применение только внесет ошибки в процесс обработки данных. | |
|
|
|
|
|
|
|
для: Trianon
(22.11.2007 в 08:57)
| | > Если работаете с UTF-8 - следует применять mysql_real_escape_string()
Это зачем? | |
|
|
|
|
|
|
|
для: Unkind
(22.11.2007 в 16:12)
| | Затем, что экранировать в строке запроса следует целые многобайтовые символы, а не отдельные их байты.
И хотя в проекции русского алфавита на карту utf-8 , критичных символов нет, насколько я помню, но писать всё ж следует аккуратно. Код, работающий с utf-8, неявно предполагает от его автора, что он останется работоспособным при переходе на [возможно более] любой язык, а не только тот, на котором шло тестирование. | |
|
|
|
|
|
|
|
для: 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.
Говорю байты, потому что в данном случае это получается одно и то же. | |
|
|
|
|
|
|
|
для: Unkind
(22.11.2007 в 22:45)
| | Если Вы убеждены, что символ экранирования всегда останется байтом 0x5C - можете эту функцию не применять. | |
|
|
|
|
|
|
|
для: Trianon
(23.11.2007 в 00:57)
| | А может быть другим байтом? Или так: Вы не убеждены, что только 0x5C? | |
|
|
|
|
|
|
|
для: Unkind
(23.11.2007 в 07:53)
| | Ок . Уговорили.
Не в utf-8
В ucs-2 | |
|
|
|
|
|
|
|
для: Trianon
(24.11.2007 в 00:01)
| | :) А Вы с какого момента поняли, что нужно было сказать UCS-2/UCS-4? | |
|
|
|
|
|
|
|
для: kis-kis
(21.11.2007 в 18:40)
| | Вполне достаточно. Я только так и делаю. | |
|
|
|
|
|
|
|
для: Thrasher
(22.11.2007 в 09:50)
| | Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(21.11.2007 в 18:40)
| | Да, для защиты от SQL-инъекции, этого достаточно. | |
|
|
|
|
|
|
|
для: cheops
(22.11.2007 в 12:13)
| | А IP-адрес пропускать через какую функцию intval() или mysql_escape_string()?
Спасибо. | |
|
|
|