array() как средство защиты

Sirius

PHP+MySQL=LOVE
array() как средство защиты

сабж, защиты для программной структуры типа:
$i[0]='A';
$i[1]='B';
$i[2]='C';
//$k - из пост формы

mysql_query("SELECT * FROM TABLE WHERE char='".$i[$k]."'");
Если перед объявлением $i[] не поставить $i=array(); то могут быть проблемы так как злоумышленник может послать что-то вроде ?i[3]=';DROP TABLE;

ну это к примеру я написал!

Вопрос 1 - как от этого защититься?

Вроде $i=array(); помогает - тогда объясните
Вопрос 2 - в чём смысл этого выражения - почему оно помогает?
 

[VS]

Guest
1 - выключить register_globals
2 - хороший стиль программирования обязывает определять масивы перед добавлением елементов.
 

IamSysAdm

Guest
Re: array() как средство защиты

Автор оригинала: Sirius
так как злоумышленник может послать что-то вроде ?i[3]=';DROP TABLE;
Откуда беруться такие примеры?
На каждом шагу стращают подобной подменой....
Нет, то что надо проверять, что тебе пользователь прислал... да и ваще ПРАВИЛЬНО писать проги - тут вопросов нет. Все правильно.
Вопрос в другом. Откуда берут такие примеры. Специально пробовал разные конструкции. Ну не проходит никак запихнуть два запроса к базе.
Sirius, ты сам то попробовал, то что написал?
 

tony2001

TeaM PHPClub
два запроса не пройдут.
но в запрос на удаление типа DELETE FROM table WHERE id = $id (ид не заключено в кавычки тут) можно добавить DELETE FROM table WHERE id = 3 OR 1=1; и он сработает по всей таблице.
результат малоприятный.
поэтому надо изначально все приходящее проверять.
 

Barlone

Guest
Re: Re: array() как средство защиты

Автор оригинала: IamSysAdm
Ну не проходит никак запихнуть два запроса к базе.
Это с MySQL не проходит, а с другими - очень даже. Особенно большая жопа с MSSQL - там иногда можно запихать ';exec master..xp_cmdshell 'и тут любая команда DOS
 

Crazy

Developer
В случае с MS SQL также требуется, чтобы это был не просто query, а batch. Иначе после ";" все идет лесом.
 
Сверху