sql иньекция как исправить?

357
22 марта 2017, 19:12
if($user['cat'] == 0){      
  // Проверяем наличие категории
  $mesto_cat = DB::$the->query("SELECT mesto FROM `sel_category` WHERE `mesto` = '".$message."' ");
  $mesto_cat = $mesto_cat->fetchAll();
  if (count($mesto_cat) != 0) 
    {
      $chat = escapeshellarg($chat);    
      $message = escapeshellarg($message);  
      exec('bash -c "exec nohup setsid php ./select_cat.php '.$chat.' '.$message.' > /dev/null 2>&1 &"');
      exit;
    }
}

Скажите пожалуйста как иправить sql иньекцию, если $message будет "qwe'; DROP TABLE sel_category; --"

Answer 1

Ни в коем случае нельзя создавать запрос из переменной, введенной пользователем. Можно использовать плейсхолдеры, можно подготовленные выражения.

НО! Не надо давать широкие возможности ввода. Если позволено вводить число - парсите ввод на число. Если имя - проверяйте на "лишние" символы. Не подставляйте ввод без обработки!!!

Answer 2

Судя по query/fetchAll - DB::$the у вас PDO либо прокси к нему.

Используйте его prepared statements

$mesto_cat = DB::$the->prepare("SELECT mesto FROM `sel_category` WHERE `mesto` = ?");
$mesto_cat->execute([$message]);
$mesto_cat = $mesto_cat->fetchAll();
READ ALSO
Запись данных в цикле

Запись данных в цикле

ЗдравствуйтеСуть проблемы: есть 4 поля в БД id, category_id,brands_id, models

298
Структура массива под SOAP запрос

Структура массива под SOAP запрос

У меня есть вот такой XML, который прекрасно работает в SOAPIU:

407
отправка запроса json через php+curl

отправка запроса json через php+curl

Есть необходимость отправить следующий хук:

353