Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с массивом в URL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Выборка данных из массива
Nizz
Отправлено: 07 Декабря, 2016 - 17:58:00
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Доброго времени суток. Столкнулся с задачей, над которой бьюсь уже долго и решить никак не удается. Надеюсь, сможете помочь.
Анализируя свой сайт, пришел к выводу о изменении части кода с целью повышения защиты. Вкратце как работает: есть страница /mysite/$Page/$Module/id/$Param['id'], где $Param['id'] массив.
PHP:
скопировать код в буфер обмена
  1. if (!empty($Module)) {
  2. $Param = array();
  3. for ($i = 0; $i < count($URL_Parts); $i++) {
  4. $Param[$URL_Parts[$i]] = $URL_Parts[++$i];
  5. }
  6. }
  7. }

Хочу сделать так, что бы страницы подгружались только те, которые есть в массиве с точным совпадением значений, сейчас можно в URL дописать любые символы, фильтрация их вырежет, оставив только целые числа и страница откроется.
PHP:
скопировать код в буфер обмена
  1.  mysute/home/art/id/1
  2.          mysute/home/art/id/1'fdwf /// все-равно откроет 1ую запись.
  3.  


Дописался до такого
PHP:
скопировать код в буфер обмена
  1. if (in_array($Param['id'], $Param, FALSE))  {
  2.         header("HTTP/1.0 404 Not Found");
  3.         exit(include('page/404.php'));
  4.  

Естественно это работает не корректно и не могу додумать, как сделать выборку значений.
 
 Top
Мелкий Супермодератор
Отправлено: 07 Декабря, 2016 - 21:20:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




var_dump(1 == '1'fdwf');
Да, это true. Да, так работает приведение типов.

Проверьте предварительно на filter_var или is_numeric


-----
PostgreSQL DBA
 
 Top
Nizz
Отправлено: 08 Декабря, 2016 - 10:23:10
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Мелкий огромное спасибо за совет. Получилось с помощью первого фильтра
PHP:
скопировать код в буфер обмена
  1.  
  2. if (!filter_var($Param['id'], FILTER_VALIDATE_INT) === false) {
  3.   $Row = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT `id`, `name`, `articl`, `text`, `price`, `dimg` FROM `pencilcase` WHERE `id` = '.$Param['id']));
  4.    } else {
  5.        header("HTTP/1.0 404 Not Found");
  6.   exit(include('page/404.php'));
  7.    }
  8.  

Все работает, но хотелось бы узнать: достаточно ли такого фильтра для защиты URL запросов ?
 
 Top
Krava
Отправлено: 08 Декабря, 2016 - 15:08:19
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2013  


Помог: 1 раз(а)




А можно и так в url написать
PHP:
скопировать код в буфер обмена
  1.  mysute/home/art/id/1'fdwf?query=test
 
 Top
Мелкий Супермодератор
Отправлено: 08 Декабря, 2016 - 15:36:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Используйте всегда prepared statements, никогда не подставляйте внешние данные в запрос и SQL-инъекции беспокоить не будут.


-----
PostgreSQL DBA
 
 Top
Nizz
Отправлено: 08 Декабря, 2016 - 16:54:08
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Мелкий Большое спасибо за совет. Вы очень помогли !
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB