1
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; --"

Mike
  • 33
  • 3
    использовать PDO/mysqli и подготовленные выражения...... всё...... ну и ознакомиться с парой исключений в теме http://ru.stackoverflow.com/q/637185/191482 – Алексей Шиманский Mar 20 '17 at 20:20

2 Answers2

1

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

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

DNS
  • 855
1

Судя по 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();
vp_arth
  • 27,179