Вход • Регистрация

Уязвим ли такой код для иньекций?

  • 25 октября 2018 г.
  • При сборке запроса не вижу возможности применить плейсхолдеры.
    Как думаете такой код для mysql инъекций уязвим?

    Код


    $query = "SELECT count(id) as count FROM {table} WHERE ";

    if (!empty($_POST['geo_ids'])) $where[] = "base_index_geo_id IN($_POST[geo_ids])";
    if (!empty($_POST['okved_leads'])) $where[] = "okved_leads IN($_POST[okved_leads])";
    if (!empty($_POST['register_from'])) $where[] = "date_register > '$_POST[register_from]'";
    if (!empty($_POST['register_to'])) $where[] = "date_register < '$_POST[register_to]'";
    if (!empty($_POST['closed_from'])) $where[] = "date_close > '$_POST[register_from]'";
    if (!empty($_POST['closed_to'])) $where[] = "date_close < '$_POST[register_to]'";

    $where[] = !empty($_POST['email']) ? "email = '1'" : "email = '0'";

    $query .= implode(" AND ",$where);

    • 25 октября 2018 г.
    • что значит плейсхолдеры? Маски чтоле?
      Конечно уязвим, ставьте в конце в функции DB::query.....($query.$where...., тут ваши $_POST..)
      • 25 октября 2018 г.
      • Ну маски да, плейсхолдеры по-английски :)

        Как их поставишь то если у меня кол-во аргументов не известно?
        • 25 октября 2018 г.
        • Да и под массив int который в IN подается какой плейсхолдер может быть?
        • 25 октября 2018 г. , редакция: 25 октября 2018 г.
        • ну у тебя ведь по условиям все раскидано, собери в массив значения, потом примени implode().
          Ерунду сморозил, это не подойдет, нужно чуть подольше подумать)

          Применяй условия, если есть такая переменная то вставляй, нет - игнорь, типо того. короче пробовать надо.
          Но маски обязательно используй
    • 25 октября 2018 г. , редакция: 25 октября 2018 г.
    • попробуйте что-то вроде того (не проверялось)
      Код


      $inp_array_names = array(
      "geo_ids" => array('base_index_geo_id', 'IN', '%s'),
      "okved_leads"=> array('okved_leads', 'IN', '%s'),
      "register_from"=> array('register_from', '>', '%s'),
      "register_to"=> array('register_to', '<', '%s'),
      "closed_from"=> array('closed_from', '>', '%s'),
      "closed_to"=> array('closed_to', '<', '%s'),
      "email"=> array('email', '=', '1'),
      );

      $where_arr = array();

      foreach ($inp_array_names as $key => $value) {
      if (!empty($_POST[$key])){
      $where_arr[] = $value[0]." ".$value[1]." '".$value[2]."'";
      }
      }
      $result_where = implode(" AND ", $where_arr);

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум