|
Как защититься от 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-инъекцией, будет практически не возможно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |