ColdFusion 2016 (преемник ColdFusion 11), выпущенный ранее в этом месяце, имеет несколько улучшений безопасности.

Вот два связанных усовершенствования, которые могут помочь вам защитить код CFML от уязвимостей XSS.

Тег cfoutput теперь имеет атрибут encodeFor.

Это может быть очень удобно для предотвращения межсайтового скриптинга в устаревших кодовых базах. Предположим, у вас есть такой код:

<cfoutput>
    Hello #firstName# #lastName#
</cfoutput>

Теперь вы можете сделать это:

<cfoutput encodeFor="html">
    Hello #firstName# #lastName#
</cfoutput>

Что эквивалентно обертыванию каждой переменной функцией encodeForHTML. Нравится:

<cfoutput>
    Hello #encodeForHTML(firstName)# #encodeForHTML(lastName)#
</cfoutput>

Также кажется, что если у вас уже есть функция encodeFor для переменной, она не будет дважды кодировать ее, и это здорово. Итак, вы можете сделать это:

<cfoutput encodeFor="html">
    <div title="Hi #encodeForHTMLAttribute(firstName)#">
      Hello Mr #lastName#
    </div>
</cfoutput>

В приведенном выше примере переменная firstName выводится внутри атрибута HTML, поэтому encodeForHTMLAttribute — правильный кодировщик для использования.

Функция writeOutput имеет новый аргумент encodeFor.

В ColdFusion 2016 функция writeOutput имеет второй аргумент для указания формата кодировщика. Вы можете использовать его следующим образом:

writeOutput("Hello " & firstName & " " & lastName, "html");

Это в значительной степени идентично атрибуту cfoutput encodeFor, но, на мой взгляд, менее полезно. Я не вижу причин, почему бы вам просто не сделать это:

writeOutput(encodeForHTML("Hello " & firstName & " " & lastName))