Как проверить правильность имен переменных, динамически генерируемых URI - PullRequest
0 голосов
/ 01 октября 2011

Я создаю маршрутизатор для своего собственного проекта MVC.

В моем роутере из-за красивых URL-адресов я столкнулся с проблемой. Как лучше всего обращаться с динамически генерируемыми именами переменных через URI?

Пример:

http://knjiskicrv.comoj.com/book/id/2/

Сгенерирует:

$page = 'book';
$id = '2';

Теперь, проблема может возникнуть, когда кто-то намеренно начинает портить URI. Как:

http://knjiskicrv.comoj.com/book/id+one/2/

Я получу:

$page = 'book';
$id one = '2';

Надеюсь, кто-нибудь может дать мне какой-нибудь совет, как это предотвратить и решить? Спасибо.

Ответы [ 3 ]

2 голосов
/ 01 октября 2011

Я думаю, что вы спрашиваете о смягчении уязвимостей "межсайтового скриптинга" (XSS).

Это большая тема. И помните: существует множество способов для (потенциально злонамеренного) пользователя «преднамеренно начинать связываться ... с URI».

Предложение: начать читать:)

Вот несколько ссылок:

http://seancoates.com/blogs/xss-woes

http://www.cgisecurity.com/xss-faq.html

http://www.uri.edu/webservices/phpGuideline.html

1 голос
/ 01 октября 2011

Прежде всего, введите sanitize этого URL. Не создавайте динамические переменные из ложного источника ввода. Ну, вы должны знать, чего ожидать на данной странице. Какие переменные и какой тип переменных они содержат.

Что делать, если вам нужно отобразить набор категорий, а одна из категорий называется "id"

/ продукты / обезьяны / белые / id / - вы правильно ... d

Выберите другое соглашение для обработки вашего URI.

Как разделить URI на элементы area, section и page.

http://www.oink.com/products/pigs/spottyones/angry/the_big_spotty_pig.html

area = 'products'
section = array ('spottyones', 'angry')
page = the_big_spotty_pig (уникально идентифицирует статью, продукт и т. д.)

Когда мне приходится использовать переменные, они в основном касаются порядка, номера страницы и т. Д. Поэтому их можно добавлять в качестве параметров строки запроса.

UPDATE Санитарная обработка:

Вы должны установить правила для себя. Допустим, URI может содержать только определенные символы.

//Sanitization 
$uri = $_SERVER['REQUEST_URI']; // /products/monkey/angry/page.html

//allow only characters, numbers, underline and dash 
if (!preg_match('~^[a-z0-9-_]$~isD',$uri)) 
$uri = '/'; //URI has been tampered with

$uriparts = explode('/',$uri); 
/* array('products','monkey','angry','page.html') */

//Do whatever you want with the uri parts ...
1 голос
/ 01 октября 2011

Вы можете хранить эти переменные в массиве, поэтому вы получите

$var['id one'] = '2';

Только мое предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...