Если на сайте в урлах нет ?id=.. и т.д. могут что то передать в БД?

12
P
На сайте с 06.01.2009
Offline
601
1105

Здравствуйте.

Прочитал

Однако, взломщик может попытаться взломать систему, присоединив к URL дополнительную строку,

прошу подсказать если в урле нет данных которые код считывает с помощью POST или GET, все равно могут к урлу что то дописать?

Возможно вопрос нубский, но не могу никак понять. Просто исходя из урла страницы к бд выполняется запрос с поиском определенных данных.

или есть страница, в ней код


$prod = 22;
$query = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);

просто тут пишут http://php.ru/manual/security.database.sql-injection.html что

Если взломщик введет значениме a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- для переменной $prod, тогда запрос

я параноик?

ДП
На сайте с 23.11.2009
Offline
203
#1

Если у вас совсем ничего из введенных пользователем данных не используется - то беспокоиться нечего.

Другое дело, что это маловероятно в современных сайтах. Каким образом на основе урла у вас определяет что $prod=22;?

Mad_Man
На сайте с 10.11.2008
Offline
162
#2
postavkin:
$prod = 22;
$query = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);

Если id задаёт не юзверь, то SQL условно безопасен. Вообще говоря любые входные параметры, вне зависимости от их появления, необходимо экранировать.

Для интов рекомендуется принудительное кастование к типу:

$query  = "SELECT * FROM products WHERE id LIKE '%" . (int) $prod . "%'";
VoV@
На сайте с 22.09.2007
Offline
196
#3
postavkin:
если в урле нет данных которые код считывает с помощью POST или GET, все равно могут к урлу что то дописать?

Дописать-то могут. Кто же им запретит-то?

Но только ничего не произойдёт.

⭐ Разработка Андроид-приложений (Xamarin C#). ⭐ Разработка ASP.NET (WebForms, MVC, WebAPI, Core). ⭐ Цой жив!
P
На сайте с 06.01.2009
Offline
601
#4
Дикий пионер:
Если у вас совсем ничего из введенных пользователем данных не используется - то беспокоиться нечего.
Другое дело, что это маловероятно в современных сайтах. Каким образом на основе урла у вас определяет что $prod=22;?

Реализовано так - берем нужную часть урла, ищем в таблице БД соответствующую строку..таким образом получаем значение $prod из другого столбца. Всё условно, но реализовано так.

domen4you
На сайте с 08.03.2013
Offline
53
#5

если вы точно знаете, что там должно быть число, то сделать перед назначением $prod соотв. проверку

siv1987
На сайте с 02.04.2009
Offline
427
#6

Строковые типы экранировать.

Числовые идентификаторы принудительно приводить к числовому типу (intval).

postavkin:
Реализовано так - берем нужную часть урла, ищем в таблице БД соответствующую строку.

Все данные поступающие от пользователя - URL, GET, POST, COOKIE и пр нужно фильтровать. В данном случае вы берете "нужную часть урла" которая поступает от пользователя, тот в свою очередь имеет возможность модифицировать его и передать вам неожиданные данные.

P
На сайте с 06.01.2009
Offline
601
#7
siv1987:
Строковые типы экранировать.
Числовые идентификаторы принудительно приводить к числовому типу (intval).


Все данные поступающие от пользователя - URL, GET, POST, COOKIE и пр нужно фильтровать. В данном случае вы берете "нужную часть урла" которая поступает от пользователя, тот в свою очередь имеет возможность модифицировать его и передать вам неожиданные данные.

Да, спасибо.

С числами делаем так

$id=(int)$_id;

а с урлом так


$url= strip_tags($_url);
$url= stripslashes($url); // удаляет экранирование символов
// соединяемся с БД
$url= mysql_real_escape_string($url); //Экранирует специальные символы в строке
$result = mysql_query("SELECT nomertovara FROM `materiali` WHERE urlstranizi='$url' ");

так правильно?

Mad_Man
На сайте с 10.11.2008
Offline
162
#8
postavkin:
так правильно?

mysql_* устарел и к использованию не рекомендуется.

P
На сайте с 06.01.2009
Offline
601
#9
Mad_Man:
mysql_* устарел и к использованию не рекомендуется.

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

domen4you
На сайте с 08.03.2013
Offline
53
#10
postavkin:
когда придется в обязательном порядке с него перейти на что то другое?

начиная с PHP 5.5.x

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий