ORDER BY $ order - Возможная дыра в безопасности - PullRequest
1 голос
/ 12 января 2011

У меня есть такой код:

ORDER BY $order

Где '$ order' берется из URL, например:

http://mywebsite.com/page.php?order=Bananas DESC

Может ли кто-то с неправильными намерениями добавить свой собственный код в конец URL-адреса и таким образом делать все, что ему нравится?

Ответы [ 3 ]

2 голосов
/ 12 января 2011

Наверное, да.В зависимости от вашей конфигурации, злоумышленник может вставить что-то вроде этого:

"Бананы; студенты отбрасывают таблицу"

Также могут быть возможны подзапросы вместо нескольких операторов

Я бы либосоздайте пункт заказа самостоятельно или сравните его с белым списком.

2 голосов
/ 12 января 2011

Если вы не проверяете, что находится в переменной $order, то ваш код определенно подвержен потенциальным атакам SQL-инъекций.

Итак, вам нужно санировать входные переменные, убедившись, что то, что вы получаете из команды GET, действительно является допустимым предложением order by (вы можете использовать для этого регулярное выражение).

Или вы можете сделать какое-то кодирование для вашего приложения, чтобы сформировать заказ по пунктам. Что-то вроде создания:

http://mywebsite.com/page.php?orderField=1&orderType=DESC

И затем отображение в вашем коде 1 на Bananas для параметра orderField и ASC или DESC для параметра orderType.

0 голосов
/ 26 ноября 2014

Пример:

SELECT * FROM bugs ORDER BY $column $direction

Вы должны определить возможные опции:

 $column =array('id','name',....);
$direction = array('ASC','DESC'); 

затем:

if(array_key_exists ($_REQUEST['column'],$column){
    $column = $column[  $_REQUEST['column']  ];
}else{
...defaults....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...