Как предотвратить SQL-инъекцию через параметр массива? (CVE-2017-14069)

  • Автор темы Евгений7771
  • 50
  • Обновлено
  • 16, May 2024
  • #1
Привет, эта страница

предположим, что sql_query

 POST nowarned=nowarned&usernw[]=(select*from(select sleep(10))x)
Код (SQL): уязвим для SQL-инъекции «через параметр массива usernw в nowarn.php». и предлагается эксплойт:
 $r = sql_query("SELECT modcomment FROM users WHERE id IN (" . implode(", ", $_POST[usernw]) . ")")or sqlerr(__FILE__, __LINE__);
Код (разметка): Подскажите, пожалуйста, как должен выглядеть этот sql_query, чтобы предотвратить злоупотребления?

Евгений7771


Рег
04 Mar, 2016

Тем
1

Постов
3

Баллов
13
  • 21, May 2024
  • #2
Я думаю, что поле «id» будет числовым.

Поэтому вместо того, чтобы выполнять взрыв внутри самого запроса, выполните проверку перед отправкой данных в запрос, например:

$d= $_POST['usernw'];

если( is_array($d) ){

foreach($d as $k=> $kk){

if( !is_numeric($kk)){ unset($d[$k]); }

}

если( sizeof($d)>0 ){

$r = sql_query("ВЫБРАТЬ модкомментарий ОТ пользователей WHERE id IN (" . implode(", ", $d) . ")") или sqlerr(FILE, LINE); }//$d пуст после проверок }//POST не является массивом
 

vakhidov


Рег
01 Jan, 2011

Тем
0

Постов
2

Баллов
2
  • 05, Jun 2024
  • #3
Спасибо, я нашел, что один человек сделал бы это вот так, поверните: $r = sql_query("ВЫБРАТЬ модкомментарий ОТ пользователей WHERE id IN (" . implode(", ", $POST) . ")") или sqlerr(__FILE_, LINE); в: $r = sql_query("ВЫБРАТЬ модкомментарий ОТ пользователей WHERE id IN (" . sqlesc(implode(", ", $POST) ). ")") или sqlerr(__FILE_, LINE); это кажется более простым, чем способ @JEET. обратная связь приветствуется
 

DimaPups


Рег
05 May, 2014

Тем
0

Постов
3

Баллов
3
Тем
49554
Комментарии
57426
Опыт
552966

Интересно