Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   intval или quotes (https://forum.antichat.xyz/showthread.php?t=183772)

Seravin 04.03.2010 01:43

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, но не в этом смысл)

LStr1ke 04.03.2010 02:20

А если значение отрицательное?

Seravin 04.03.2010 02:34

а разница? всё равно число, только отрицательное(только что тестил)

nerezus 04.03.2010 04:28

Для чисел достаточно приведения к численному.

Seravin 04.03.2010 05:04

ну я понимаю, но если у меня в скрипте, например, используется как текстовые, так и числовые колонки, так какой смысл мне использовать intval(), если я могу просто отправлять всё строкой, что, по моему, безопастней(хотя может я не очень хорошо знаю нюансы intval'а)

ChieFSS 04.03.2010 22:52

to Seravin,
intval() получает целочисленное значение переменной.
То есть в запросе нужно 100% иметь число, а не строку что-нибудь ещё.
А какое там поле (если вы про html) это не важно. Пользователь всегда может подсунуть левые данные.

addslashes() экранирует спецсимволы в строке.
Это из другой серии функция. К числам никакого отношения не имеет и не спасет от подсовывания в запрос строки, там где должна быть цифра.

warlok 04.03.2010 22:58

Seravin тогда уж mysql_real_escape_string() потому что addslashes() обходиться при мультибайтовых кодировках в бд, кроме UTF-8

Seravin 04.03.2010 23:05

Цитата:

Сообщение от ChieFSS
to Seravin,
intval() получает целочисленное значение переменной.
То есть в запросе нужно 100% иметь число, а не строку что-нибудь ещё.
А какое там поле (если вы про html) это не важно. Пользователь всегда может подсунуть левые данные.

addslashes() экранирует спецсимволы в строке.
Это из другой серии функция. К числам никакого отношения не имеет и не спасет от подсовывания в запрос строки, там где должна быть цифра.

Ты мне мануал по функциям написал??? я это знаю, но если ты читал бы внимательно, то не писал бы этого

Seravin 04.03.2010 23:07

Цитата:

Сообщение от warlok
Seravin тогда уж mysql_real_escape_string() потому что addslashes() обходиться при мультибайтовых кодировках в бд, кроме UTF-8

Ну да, е это и хотел сказать) просто ошибся чуть)


Время: 18:56