SharePoint Alfresco PHP MySQL
О сайте Контакты
среда, 7 сентября 2011 г.

Правильная обработка параметров GET в PHP

Если для доступа к нужной странице используется какой-либо цифровой идентификатор, очевидно, что его необходимо фильтровать. Но просто отфильтровать мало, нужно еще убедиться, что передан точно такой параметр, какой хотела система. Если банально привести передаваемый идентификатор к целому типу, то PHP воспользуется своими правилами приведения типов и из строки 4-pieces-of-shit в итоге получится целое число 4. Таким образом, имеем 2 URL: site.com/index.php?msg=4 и site.com/index.php?msg=4-pieces-of-shit, которые при простом приведении msg к целому типу будут эквивалентны. Решение проблемы приведено далее:

  $msg = abs(intval($_GET['msg']));

   // Значение msg должно быть точно равно тому, что передали. 
   // Иначе получим «некрасивый» URL
   if ((string)$msg !== $_GET['msg']) {
     header("HTTP/1.1 301 Moved Permanently");
     header("Location: /index.php?msg=" . $msg);
     exit;
   }

Таким образом, мы перенаправляем браузер посетителя на верный URL с целочисленным параметром, не давая ему увидеть страницу под неверным URL. Думаю, и так понятно, что такие неправильные URL будут замусоривать поисковик, ведь появится множество страниц с одинаковым содержимым и разным URL.

Sergey Lysenko, среда, 7 сентября 2011 г.

Комментарии: