PHP - параметры защиты, переданные в URL

У меня есть приложение, которое принимает решения на основе части URL-адреса:

    if ( isset($this->params['url']['url']) ) {
    $url = $this->params['url']['url'];
    $url = explode('/',$url);
    $id = $this->Provider->getProviderID($url[0]);

    $this->providerName = $url[0]; //set the provider name

    return $id;

    }

Это происходит в приложении для тортов, поэтому $ this-> params ['url'] содержит элемент URL. Затем я использую элемент URL-адреса, поэтому решаю, какие данные использовать в остальной части моего приложения. У меня вопрос ...

как лучше всего обезопасить этот ввод, чтобы люди не могли передать ничего неприятного?

Благодарность,

Определите, пожалуйста, «что-нибудь неприятное». Что-нибудь, чего не получит Regex?

Karsten 07.01.2009 12:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
1 462
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Каковы действительные имена провайдеров? Проверьте, равен ли параметр URL единице, в противном случае отклоните его.

Надеюсь, вы знаете, что нет абсолютно никакого способа предотвратить отправку пользователем чего-либо, включая имена поставщиков, которые они не должны использовать.

Я бы повторил комментарий Карстена: определите «что-нибудь неприятное».

Какого вы ожидаете от параметра? Если вы ожидаете, что это будет URL-адрес, используйте регулярное выражение для проверки URL-адресов. Если вы ожидаете целое число, приведите его к целому числу. То же самое и с плавающей точкой, логическим значением и т. д.

Однако эти функции PHP могут быть полезны: www.php.net/strip_tags www.php.net/ctype_alpha

параметром будет имя провайдера - буквенно-цифровая строка. Я думаю, что ответ заключается в том, чтобы использовать ctype_alpha () в сочетании с проверкой правильности имени поставщика на основе другой логики приложения.

спасибо за ответы

Не забудьте также выполнить mysql_real_escape_string.

Click Upvote 07.01.2009 20:04

Или используйте объекты PDO для более новых версий

Joe Phillips 07.01.2009 23:37

Кроме того, если у вас есть известный набор допустимых URL-адресов, рекомендуется занести эти разрешенные URL-адреса в белый список. Вы даже можете сделать это динамически, имея таблицу БД, содержащую разрешенные URL-адреса - вытащите это из базы данных, сделайте сравнение с переданным параметром URL-адреса. В качестве альтернативы вы можете внести шаблоны в белый список (скажем, у вас есть разрешенные домены, которые можно передавать, но остальная часть URL-адреса изменяется ... Вы можете внести домен в белый список и / или использовать регулярные выражения для определения действительности).

По крайней мере, убедитесь, что вы используете strip_tags или встроенные escape-последовательности mysql (при использовании PHP5 параметризация ваших SQL-запросов решает эти проблемы).

Ответ принят как подходящий

Другие комментарии здесь верны, в AppController beforeFilter проверяет поставщика на соответствие поставщикам в вашем db.

Однако, если все URL-адреса должны иметь префикс строки поставщика, вы собираетесь извлечь ее из URL-адреса неверным способом, просмотрев $ this-> params ['url'].

Проблема такого рода - это как раз то, для чего предназначен класс маршрутизатора и его способность передавать параметры действию. Посмотрите справочную страницу в кулинарной книге http://book.cakephp.org/view/46/Routes-Configuration. Вы можете попробовать что-то вроде:

Router::connect('/:provider/:controller/:action');

В руководстве вы также увидите возможность проверки параметра провайдера в самом маршруте с помощью регулярного выражения - если у вас есть небольшой определенный список известных провайдеров, вы можете жестко закодировать их в регулярном выражении маршрута.

Настроив маршрут, который захватывает эту часть URL-адреса, он становится мгновенно доступным в $ this-> params ['provider'], но даже лучше, чем то, что метод html helper link () автоматически создает правильно отформатированные URL-адреса, например

$html->link('label', array(
  'controller' => 'xxx',
  'action' => 'yyy',
  'provider' => 'zzz'
));

Это возвращает ссылку типа / zzz / xxx / yyy

Было бы проще использовать класс Дезинфицировать. В этом случае подходят Очистить :: escape () или Очистить :: параноик ().

Другие вопросы по теме