(при рендеринге шаблона HTML)
<hidden name=”param${ns?htmlattr}” />
<a href=”${url?urlencode}”>${usercontent?htmlencode}</a>
${rawhtml?htmlliteral}
<script>
var a = “${str?jsstr}”; //null becomes “”
var b = ${str?quote,jsstr}; //allow null, render quotes if nonnull
var c = ${func?jsliteral}
var ${func?jsidentifier} = null;
</script>
- jsstr избегает
\t\b\f\n\r\\\'\"
и </
- Jsliteral Escape
</
- jsidentifier заменяет не-alnum на фиктивный символ
- xmlattr экранирует
<>&
и фильтрует недопустимые символы UTF-8
- htmlencode кодирует почти все крайние случаи в такие вещи, как
&
- кавычка приводит к выводу строки в кавычках (включая пустую) или
null
Некоторые из них могут не иметь отношения к безопасности - они просто помогают коду оставаться в здравом уме. Какой режим выхода мы выбираем по умолчанию, чтобы предотвратить XSS - быть «более безопасным» по умолчанию? Что, если мы по умолчанию установим наиболее ограничивающий (htmlencode) и ослабим / переключим режимы excape оттуда?
Мне не интересно обсуждать достоинства всех этих режимов выхода - к лучшему или худшему, они все существуют в нашей кодовой базе. Мне не хватает каких-либо режимов? Есть хороший материал для чтения?