Для защиты от межсайтового скриптинга (XSS) я использую то, что рекомендует OWASP, ESAPI ( API корпоративной безопасности). Файл esapi.jar был включен в предыдущую версию ColdFusion, но в CF10 теперь вы можете легко вызывать некоторые из этих полезных функций: encodeForJavascript()
, encodeForHTML()
, encodeForURL()
, encodeForCSS()
и encodeForHTMLAttribute()
.
У меня проблемы с encodeForJavascript()
, я теряю обратную косую черту...
<cfoutput>
<cfif isDefined("url.name")>
<!--- Here is the problem, this is identical to the original ascii32to126 string except for one char is missing, the backslash between the brackets ...Z[]... --->
#url.name#
<cfabort>
</cfif>
<!---
ASCII 32 thru 126
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
In the line below I double up on the double-quotes and pounds in order to get the cfset to work
--->
<cfset ascii32to126 = "!""##$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~">
<script>
function locateTo(value)
{
window.location='thisPage.cfm?name='+encodeURIComponent(value);
//alert('thisPage.cfm?name='+encodeURIComponent(value));
}
locateTo('#encodeForJavaScript(ascii32to126)#');
</script>
</cfoutput>
Сначала я вызываю encodeForJavaScript()
, потому что мы находимся в контексте JavaScript.
Затем я вызываю encodeURIComponent()
, чтобы убедиться, что URL построен правильно.
Все работает нормально, но на результирующей странице я потерял обратную косую черту \
. Что мне здесь не хватает?
(Да, я знаю, что мне также нужно защитить место, где я вывожу #url.name#
. В этом эксперименте я этого не делал, потому что мне нужно было просмотреть исходный текст, чтобы увидеть, соответствует ли строка исходной строке.)
** ОБНОВЛЕНИЕ ** — Я использую ColdFusion 10 со всеми последними исправлениями. Проблема, похоже, в encodeForJavaScript()
.
Также не работает с JSStringFormat()
. Это показывает, что обратная косая черта отсутствует для обоих...
<cfset ascii32to126 = "!""##$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~">
<cfoutput>
#encodeForHTML(encodeForJavaScript(ascii32to126))#
<br><br>
#encodeForHTML(JSStringFormat(ascii32to126))#
</cfoutput>
<cfcontent reset type="text/plain">#url.name#<cfabort/>
- person Peter Boughton   schedule 01.05.2014encodeForJavaScript()
, просто это показывает, что обратная косая черта отсутствует...<cfoutput>#encodeForJavaScript(ascii32to126)#</cfoutput>
- person gfrobenius   schedule 01.05.2014%5C
) - person Peter Boughton   schedule 01.05.2014jsStringFormat()
я вижу скрытую обратную косую черту \\, но сencodeForJavaScript()
\x5C
отсутствует. Вместо этого я вижу...\x5B\x5D...
К чему бы это? Из того, что я прочитал, OWASP и другие настоятельно рекомендуют ESAPI. .... Только что увидел ваш последний комментарий, спасибо! - person gfrobenius   schedule 01.05.2014