LINUX.ORG.RU

perl + html


0

0

Подскажите пожалуйста новичку, нужно ли проверять данные вводимые
в поля формы если это данные потом служат основой для SQL запросов.
Т.е. вроде я не вижу проблем, скорее потому, что нет опыта, подскажите
возможные проблемы и пути их решения. Данные из базы потом отображаются
то же в браузере.

anonymous

Перед подстановкой их в запрос удваивай кавычки (') для строк и соответствие типов проверяй

phoenix ★★★★
()

Желательно проверять запросы в которых вставка может быть опасной, например новички часто делают поля для в вода integer в виде input type=text...
и не проверяют их на число. и если SQL выглядит так "SELECT * FROM asdf WHERE id=$id" где в $id не проверянная строка, то я могу в $id поместить и 1;DROP ..... :) Думаю эффект понятен... так можно еще вытягивать много данных скидывая их в дамп файл итп итд...
Короче проверяй все что можно :)

godexsoft
()
Ответ на: комментарий от godexsoft

my $data = $q -> param ('data');
......................
my $request = "insert into tmp (data) values('$data')";
Так что насчет базы данных вроде как можно не беспокоиться.
Но, если в $data, окажется что-то вроде <font size=1 color="#FF000">
то при отображении этой переменной... :) HTML наверное знаешь, догадался. Ну и как написали - защита от дурака, проверяй входные данные, что бы вместо числа не было чего-нибудь другого.

stalcker
()
Ответ на: комментарий от theserg

Это mysql ;)
Если нарватся на серьезную базу которая умеет делать запросы разделенные ';' ?? тогда писец :) Постгрес оч хороший тому пример.
сосите соску :)

godexsoft
()
Ответ на: комментарий от phoenix

Кавычки удваивать - это не наш метод. Есть же нормальный способ:

$sth = $dbh->prepare("SELECT * FROM tbl WHERE clmn=?"); $sth->execute(param('clmn'));

Teak ★★★★★
()
Ответ на: комментарий от anonymous

Фигня, bind_values идеологически правильнее.

Teak ★★★★★
()
Ответ на: комментарий от theserg

сразу видно, не опытный человек, профессия явно не связана с сетью и сетевым кодингом :)) Короче mysql это популярная база, но то что ВЕСЬ инет на ней - бред... у нас и то в конторе половина серьезных проектов на постгресе. Если бы всюду был мускуль - я бы ни разу не смог сделать скуль иньекцию через кривые пхп скрипты ;) Сосите соску особо большого размера :))

godexsoft
()
Ответ на: комментарий от godexsoft

godexsoft, ты что тут из себя кулхацкера строишь?
это ведь даже недетский способ.


2автор: обязательно используй placeholders.
perldoc DBI



как пример:
допустим кто-то делает проверку логина и пароля следующим образоб
$dbh->prepare("select user_id from user_table where user_name = '$username' and user_pass = '$userpass'");

а теперь представь, что в форму ввели следующие данные
login: root
pass: ' or user_name = 'root'

если эти данные вставить в запрос "как есть" то получим
$dbh->prepare("select user_id from user_table where user_name = 'root' and user_pass = '' or user_name = 'root'");

в результате запрос успешно авторизует пользователя как root.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.