Насколько опасно фактически вот так: $response:location[^taint[as-is][$url]]
andylars 05.07.2015 11:11
/ 05.07.2015 11:23
Есть моменты, когда надо сделать редирект оттолкнувшись от текущего url (т.е. данные пришли из $request:uri),
Если ничего не трогать, то url будет "жестко" заэксейплен,
причем (несмотря на документацию, символ (") будет тоже преобразован в %22, а не оставлен, как там сказано)
Причина 1: иногда хочется оставить "красивый" урл после редиректа
Причина 2: редирект на внешний, абсолютный урл, в принципе не работает без такого
И ничего умнее я не придумал, потому, что если не сделать так:
$url[http://${env:HTTP_HOST}]
$response:location[^taint[as-is][$url]]
То мы получим вместо 30X-ого редиректа на внешний абсолютный урл,
внутренний редирект на что-то типа:
http://domain/http%3A//domainт.к. $url испачкается об $env:HTTP_HOST (если я хоть немного понял taint-измы и механику его работы у Parser'a)
Ну и с сохранением введенного пользователь "красивого" урла,
Например: при
http://domain/Page_A/Tag1+Tag2тоже будет проблема, символ + заэкспейпится
С одной стороны кажется, что манипуляции с as-is небезопасны,
но с практической, я пока не вижу потенциальной инъекции,
если я никуда кроме location не вставляю такой код.
А значит, я передаю небезопасные символы, только заголовку ответа
для браузера, что тоже самое, что вбить любую абракадабру в адресной строке (или я ошибаюсь)?
Чем не устроил refresh - тем, что он отдает тело всей страницы, прежде чем сделает перенаправление.
30X-редирект, значительно быстрее, что видно не вооруженным глазом, даже на localhost
- Насколько опасно фактически вот так: $response:location[^taint[as-is][$url]], andylars 05.07.2015 11:11 / 05.07.2015 11:23