parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Мощный трактат. :)

moko 25.10.2019 03:19

И весьма неплохой для достаточно запутанной темы. Документация тут да, не идеальна, впору открывать конкурс на лучший вариант. :)

Что мне кажется:

1. ^untaint просто лишний (очень редко бывает реально нужен). Если его спрятать на задворки документации, путаницы будет меньше.
^untaint не обратная операция по отношению к ^taint
С параметрами по-умолчанию - все-таки обратная.
$s[^taint[']] - пометили небезопасным, и $s[^untaint{$s}] - сделали как было до.

Правда так можно сказать, что и taint сам себе обратен. :)
$s[^taint[']] - пометили небезопасным $s[^taint[as-is;$s]] - сделали как было до.

А вот почему у ^untaint код, а не строка - этого уже и сам PAF не помнит. :)


2. С точки зрения документирования и прозрачности все было бы сильно проще, если бы были только "грязные" или "чистые" данные.

Но есть возможность явно задать язык преобразования, и это бывает полезным, например если в результирующем HTML есть ссылка,
<a href="^taint[uri;$form:url]", или если задается значение переменной в Javascript <script>var Name = "^taint[js;$form:name]";</script>.
И отсюда возникают всякие "помечает как нуждающийся в преобразовании заданного вида" и "неопределенно «грязный»". :(

Поэтому возможно стоит как-то разделить простые случаи, когда вообще не нужно использовать taint или apply-taint - все работает "из коробки",
то есть отдельно описать, как экранирование работает по умолчанию.