
04.03.2010, 01:43
|
|
Участник форума
Регистрация: 25.11.2009
Сообщений: 201
С нами:
8663063
Репутация:
226
|
|
intval или quotes
Тут вот в чём у меня проблема: читал статью про анти sql-inj, написал там, но никто ничего не написал. Я пытаюсь понять минусы использования такого метода выборки из базы данных.
PHP код:
$myid=intval($_GET['id']);
$q="SELECT * FROM mytable WHERE id=".myid;
...
и передачи параметра id строкой(даже если поле id числовое):
PHP код:
$myid=mysql_real_escape_string($_GET['id']);
$q="SELECT * FROM mytable WHERE id=' ".myid." ' ";//без пробелов
...
Идёт всё равно конвертация в числовой тип, обрезая строку начиная с символа с которого не удалось преобразование.
Какой смысл разделять строковые и числовые параметры, если можно строкой.
(скрипт довольно простой, без проверки на magic_quotes, но не в этом смысл)
Последний раз редактировалось Seravin; 04.03.2010 в 23:07..
Причина: ошибся чуть)
|
|
|

04.03.2010, 02:20
|
|
Постоянный
Регистрация: 29.07.2009
Сообщений: 400
С нами:
8835027
Репутация:
150
|
|
А если значение отрицательное?
|
|
|

04.03.2010, 02:34
|
|
Участник форума
Регистрация: 25.11.2009
Сообщений: 201
С нами:
8663063
Репутация:
226
|
|
а разница? всё равно число, только отрицательное(только что тестил)
|
|
|

04.03.2010, 04:28
|
|
Флудер
Регистрация: 12.08.2004
Сообщений: 3,791
С нами:
11444066
Репутация:
2290
|
|
Для чисел достаточно приведения к численному.
|
|
|

04.03.2010, 05:04
|
|
Участник форума
Регистрация: 25.11.2009
Сообщений: 201
С нами:
8663063
Репутация:
226
|
|
ну я понимаю, но если у меня в скрипте, например, используется как текстовые, так и числовые колонки, так какой смысл мне использовать intval(), если я могу просто отправлять всё строкой, что, по моему, безопастней(хотя может я не очень хорошо знаю нюансы intval'а)
|
|
|

04.03.2010, 22:52
|
|
Познающий
Регистрация: 23.11.2006
Сообщений: 34
С нами:
10244494
Репутация:
7
|
|
to Seravin,
intval() получает целочисленное значение переменной.
То есть в запросе нужно 100% иметь число, а не строку что-нибудь ещё.
А какое там поле (если вы про html) это не важно. Пользователь всегда может подсунуть левые данные.
addslashes() экранирует спецсимволы в строке.
Это из другой серии функция. К числам никакого отношения не имеет и не спасет от подсовывания в запрос строки, там где должна быть цифра.
|
|
|

04.03.2010, 23:05
|
|
Участник форума
Регистрация: 25.11.2009
Сообщений: 201
С нами:
8663063
Репутация:
226
|
|
Сообщение от ChieFSS
to Seravin,
intval() получает целочисленное значение переменной.
То есть в запросе нужно 100% иметь число, а не строку что-нибудь ещё.
А какое там поле (если вы про html) это не важно. Пользователь всегда может подсунуть левые данные.
addslashes() экранирует спецсимволы в строке.
Это из другой серии функция. К числам никакого отношения не имеет и не спасет от подсовывания в запрос строки, там где должна быть цифра.
Ты мне мануал по функциям написал??? я это знаю, но если ты читал бы внимательно, то не писал бы этого
|
|
|

04.03.2010, 22:58
|
|
Постоянный
Регистрация: 18.02.2008
Сообщений: 368
С нами:
9594385
Репутация:
386
|
|
Seravin тогда уж mysql_real_escape_string() потому что addslashes() обходиться при мультибайтовых кодировках в бд, кроме UTF-8
|
|
|

04.03.2010, 23:07
|
|
Участник форума
Регистрация: 25.11.2009
Сообщений: 201
С нами:
8663063
Репутация:
226
|
|
Сообщение от warlok
Seravin тогда уж mysql_real_escape_string() потому что addslashes() обходиться при мультибайтовых кодировках в бд, кроме UTF-8
Ну да, е это и хотел сказать) просто ошибся чуть)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|