| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Сортировка БД и защита от SQL Injections |
| Автор: Aliance 25.5.2006, 01:35 | ||
Необходимо реализовать сортировку БД, через get данные. Так же нужно учитывать безопастность, тем самым обрубив возможность для SQL Injections. Вот мой код:
URL domen.com/index.php?m=staff&sort=asc&field=nick - все работает. URL domen.com/index.php?m=staff&sort=asc&field=nick' - выводит Ошибка подключения к БД. Но, если я не ошибаюсь, функция mysql_real_escape_string должна обрубать все недозволенные символы?! |
| Автор: vasac 25.5.2006, 09:42 |
| Aliance, mysql_real_escape_string() не обрубает символы - она их экранирует. Т.е. здесь сортировка пойдет все равно nick'. Будет тоже самое, что написать: domen.com/index.php?m=staff&sort=XXX&field=kakayato_laga т.е. ничего не будет. |
| Автор: Vaulter 25.5.2006, 10:44 | ||
Aliance,
и тайное станет явным |
| Автор: Aliance 25.5.2006, 14:19 |
вот этого как раз делать нельзя, иначе злоумышленник получит информацию. так в целом мой код правильный, injection не пройдет? |
| Автор: vasac 25.5.2006, 14:24 | ||||
Так не на нормальном же сайте делать, а у себя при разработке. А что делает mysql_real_escape_string() с различными символами можно узнать достаточно просто:
|
| Автор: -=Ustas=- 25.5.2006, 18:04 |
Я бы не стал передавать открыто поля таблицы. |
| Автор: Opik 25.5.2006, 21:20 | ||
| Aliance, mysql_escape_string предназначена не для того. У тебя неправильный подход. сделай лучше что то типо того:
и уже ссылки типа: script.php?orderby=1 |
| Автор: Aliance 25.5.2006, 22:58 | ||
| ИМХО это извращение Вот что получилось:
Добавлено @ 23:00 а чего тут такого? поле id есть в 90% таблиц, либо его вариации |
| Автор: -=Ustas=- 26.5.2006, 08:58 | ||
Да в общем-то ничего, это конечно дело твое, можешь и кода чуть-чуть выложить на страничку ;) ИМХО, это по-моему слишком громаздко, я бы на твоем месте сделал бы следующим образом:
|
| Автор: vasac 26.5.2006, 10:00 | ||
Конкретно в данном примере м.б. и ничего особенного. Только SQL-инъекции, с которыми вы так усиленно боретесь, происходят именно от того, что в запрос вставляются данные непосредственно полученные от пользователя. |
| Автор: jsse 26.5.2006, 11:13 | ||
| Правильный подход к решению у -=Ustas=- с помощью массива, тогда не возникнет проблемы с неправильным названием поля, но если требуется удалить ненужные символы можно поступить так:
т.е. оставить только те символы, которые будут присутствовать в названии поля таблицы. |
| Автор: Aliance 26.5.2006, 14:26 |
| jsse, не вижу в этом необходимости - данные, передаваемые в адресе строки - числа. Функции intval() должно хватить vasac, я решал задачу не в целом, а под данный конкретный пример -=Ustas=-, мне нужно делать и desc и asc сортировку. Тогда уж нужно твой вариант переписать так, чтобы была матрица?! |
| Автор: -=Ustas=- 26.5.2006, 14:51 | ||
Хм... зачем еще матрица, по аналогии с полями:
|
| Автор: Aliance 26.5.2006, 20:38 |
а если $_GET['order'] будет установлено в ghdghdt какую-нибудь? |
| Автор: -=Ustas=- 26.5.2006, 20:49 |
intval() преобразует строку в нолик и по этому в результате окажется ASC ;) |
| Автор: Aliance 27.5.2006, 00:07 |
| Ясно, тогда просто отлично. Спасибо за неоднократную помощь ;) |
| Автор: -=Ustas=- 27.5.2006, 08:25 | ||
Это я к примеру привел, незабудь еще проверку на существование сделать, чтобы в случае их отсутствия был дефолт и не вылизили NOTICE:
|
| Автор: Aliance 27.5.2006, 13:05 | ||
Вот такой код не работает:
И еще, нужно чтобыработало при всех данный Url: www.domen.com/index.php?m=staff www.domen.com/index.php?m=staff&sort=0&order=0 www.domen.com/index.php?m=staff&sort=0 www.domen.com/index.php?m=staff&order=0 |
| Автор: -=Ustas=- 27.5.2006, 13:18 | ||||||
Ну как это не работает, щас проверял: при sort=0&order=0 получается:
при sort=2&order=1
Что собсна и требовалось доказать. Вообще без параметров, идет по дефолту:
|
| Автор: Aliance 27.5.2006, 13:36 |
| Ошибка была в 12ой строчке |
| Автор: -=Ustas=- 27.5.2006, 13:42 |
| |