Имя: Пароль:
IT
Веб-мастеринг
Как защититься от SQL-инъекции?
0 batmansoft
 
06.01.15
16:53
Добрый день.
Допустим, есть вот такой запрос:
$query="select * from  <Некая таблица> where <Какое то поле>='$email'";
$email вводит пользователь. Теоретически он может ввести все что угодно. В том числе что то вроде того:
<Всякая фигня>'; <Своя SQL-инструкция>;  select * from <Какая то таблица >where <Какое то поле>='
Тогда получиться, что выполнятся еще и инструкции юзера, например, он может впихать туда добавление юзера с админскими правами.
Как от этого защититься в данном случае?
Может, тупо провеять на наличие пробелов и выдавать сообщение, что емалов с пробелами быть не может?
Акстати, могут ли быть емалы с пробелами?
1 Волшебник
 
модератор
06.01.15
16:58
mysql_real_escape_string()
2 ILM
 
гуру
06.01.15
16:59
Напиши запрос добавления юзера с админскими правами? Будь мужиком...
3 SeraFim
 
06.01.15
17:01
кавычки экранировать
4 batmansoft
 
06.01.15
17:06
(1) спасибо
(2) кстати, я писал как то запрос добавления юзера в сайт на джумле. Правда, не с админскими правами, но все же.
5 batmansoft
 
06.01.15
17:07
В общем, по ходу дела, надо так делать:
        $l_email=mysql_real_escape_string($email);
        $query="select * from  <Некая таблица> where <Некое поле>='$l_email'";
6 SeraFim
 
06.01.15
17:11
что касаемо е-майла - его в любом случае стоило бы проверить на правильность ввода
7 iceman2112
 
06.01.15
17:12
юзать PDO
8 iceman2112
 
06.01.15
17:15
если нравится велосипедить, то можешь проверять.
А вообще есть куча простых фреймворкох, в которых все сделано и защита от инъекций, и проверка на корректность введенных данных. Причем гарантировано, но мы же не ищем легких путей.
9 oslokot
 
06.01.15
20:51
(0) гуглить
10 Волшебник
 
06.01.15
23:35
(8) в интернете никто ничего не гарантирует
11 iceman2112
 
06.01.15
23:49
(10) и поэтому надо использовать устаревшие функции, надеясь на авось?
12 Asmody
 
07.01.15
00:08
1. Проверять и чистить входные данные;
2. Использовать параметризованные запросы;
3. Проверять результат.

Или воспользоваться готовой ORM-библиотеку
13 tridog
 
07.01.15
00:20
(1) real? У них что, еще и unreal_escape_sring() есть?
14 senior
 
07.01.15
00:27
Регулярным выражением regexp проверять что введенная строка это емэйл
15 Asmody
 
07.01.15
00:56
(14) написать регулярку, соответствующую RFC, занятие не для слабых
16 senior
 
07.01.15
01:03
(15) не нужно писать, нужно найти
17 Asmody
 
07.01.15
01:24
(16) тоже занимательное занятие. Рекомендую попробовать
18 Woldemar22LR
 
07.01.15
08:39
(0) скажи для чего пишешь? для интернет магазина?
19 iceman2112
 
07.01.15
08:42
(16) Вот именно нужно найти функцию, которая проверяет валидность email, а не изобретать опять велосипед.
20 Woldemar22LR
 
07.01.15
08:44
(19) нужно найти cms под нужды ТС, а не изобретать велосипед.
21 iceman2112
 
07.01.15
08:48
(20) давно было пора
22 iceman2112
 
07.01.15
08:49
(20) Да даже если он делает не магазин, нужно было уже давно выбрать  какой нибудь инструмент и делать.
23 Повелитель
 
07.01.15
09:49
(0) Я вот как увижу у тебя сайт в профиле.
Буду в каждое поле, а не только в емайл вставлять запрос на добавление пользователя с админскими правами.
Так что ты попал )))
24 Woldemar22LR
 
07.01.15
10:02
(23) спалил тему.....
25 Лефмихалыч
 
07.01.15
12:33
(0) Ты, я знаю, легких путей не ищешь, так что вот тебе вариант: храни в БД это барахло в зашифрованном виде - хоть ксором по какой-нибудь строке. В результате угадать, что конкретно тебе подсунуть такое, что после этого шифрования станет SQL-инъекцией, будет практически не возможно.
Основная теорема систематики: Новые системы плодят новые проблемы.