про ^untaint[uri]
Александр Петросян (PAF) 09.01.2003 14:48
зачем нужен язык uri? затем, чтобы грязная строка попала в URI одним куском, а не рассыпалась на части.
скажем, конструкция:
$data[Rock&Roll]
#никогда так не делайте:
<a href="page.html?data=$data">ссылка</a>
работать не будет. в page.html $form:data будет равно «Rock», а не тому, что вы думали.
как правильно, написано в документации по taint.
так что если вам известен весь URI целиком в том виде, в котором его надо вписать в адресную строку, чтобы увидеть необходимый ресурс, то его надо подставлять ^untaint[as-is]{его}, или, что то же самое: ^untaint{его}.
непонятки, очевидно, от плохого архитектурного решения:
решите для себя, что же вы храните в базе:
«адрес», или
«строку, которой сами не доверяете, и в ней надо что-то выборочно чинить».
если просто «адрес», то вы его просто (as-is) и выведите.
если частично неправильную строку, то откуда parser разберёт, какая часть в ней правильная, а какая нет?
вариант: из базы достанется
http://domain.ru/page.html?data=rock&roll¶m2=value2
как тут понять, где кончается первый параметр и начинается второй?{риторический}
дальше вы можете захотеть что-то сложное типа «я когда в базу буду писать объясню, что и как. а потом уже выведу as-is».
я решил такое
не делать, поскольку и сейчас простейшую конструкцию «этот фрагмент строки на этом языке, а этот на этом» понимают не все. а так будет на порядок сложнее.
диагноз:
* или храните конечный адрес, выводя его as-is
* или храните куски адреса, собирая конечный адрес перед выводом. пример про town в документации про taint.