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
Форумы портала PHP.SU :: Версия для печати :: Работа с массивом в URL
Форумы портала PHP.SU » » Вопросы новичков » Работа с массивом в URL

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

1. Nizz - 07 Декабря, 2016 - 17:58:00 - перейти к сообщению
Доброго времени суток. Столкнулся с задачей, над которой бьюсь уже долго и решить никак не удается. Надеюсь, сможете помочь.
Анализируя свой сайт, пришел к выводу о изменении части кода с целью повышения защиты. Вкратце как работает: есть страница /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.  

Естественно это работает не корректно и не могу додумать, как сделать выборку значений.
2. Мелкий - 07 Декабря, 2016 - 21:20:49 - перейти к сообщению
var_dump(1 == '1'fdwf');
Да, это true. Да, так работает приведение типов.

Проверьте предварительно на filter_var или is_numeric
3. Nizz - 08 Декабря, 2016 - 10:23:10 - перейти к сообщению
Мелкий огромное спасибо за совет. Получилось с помощью первого фильтра
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 запросов ?
4. Krava - 08 Декабря, 2016 - 15:08:19 - перейти к сообщению
А можно и так в url написать
PHP:
скопировать код в буфер обмена
  1.  mysute/home/art/id/1'fdwf?query=test
5. Мелкий - 08 Декабря, 2016 - 15:36:32 - перейти к сообщению
Используйте всегда prepared statements, никогда не подставляйте внешние данные в запрос и SQL-инъекции беспокоить не будут.
6. Nizz - 08 Декабря, 2016 - 16:54:08 - перейти к сообщению
Мелкий Большое спасибо за совет. Вы очень помогли !

 

Powered by ExBB FM 1.0 RC1