encodeForHtml()vs htmlEditFormat ()
encodeForHtml()
(novo em CF10) vs htmlEditFormat()
, Como é que são diferentes?
2 answers
Eu acho que é o mesmo que a função encodeForHTML em Java OWASP ESAPI. Mais seguro para evitar o XSS attack para usar o conteúdo em HTML.
<cfsavecontent variable="htmlcontent">
<html>
<head>
<script>function hello() {alert('hello')}</script>
</head>
<body>
<a href="#bookmark">Book Mark & Anchor</a><br/>
<div class="xyz">Div contains & here.</div>
<IMG SRC=javascript:alert(&# x27XSS')>
<IMG SRC=javascript:alert('XSS')>
</body>
</html></cfsavecontent>
<cfoutput>#htmleditformat(htmlcontent)#</cfoutput>
<br />
<cfoutput>#encodeforhtml(htmlcontent)#</cfoutput>
&
, <
e >
, com boas seqüências, como &
, <
e >
considerando que EncodeForHTML() é mais inteligente, com uma vantagem de ser que possa reconhecer o conteúdo que já está codificado e não duplo-codificá-lo.
Por exemplo, se um utilizador submeteu o seguinte conteúdo ao seu site:
<div>
Here is <i>test</i> html content includes<br/>
<script>alert('hello')</script>
Notice how & rendered with both functions.
</div>
Ambos HTMLEditFormat () e EncodeForHTML() escaparia apropriadamente dos caracteres ' '. Mas o HTMLEditFormat () iria codificar cegamente o {[[1]} de novo para que a sua saída se pareça com:
... how &amp; rendered ...
Onde de outra forma pareceria com encodeForHTML ():
... how & rendered ...
HTMLEditFormat () não conseguia dizer que o ampersand já estava codificado, por isso re-codificou-o novamente. Este é um exemplo trivial, mas demonstra como as bibliotecas ESAPI são mais inteligentes e, portanto, mais seguras.
Resumindo, não há razão para usar HTMLEditFormat() em CF10+. Para proteção máxima, você deve substituir as funções de formato com as funções de codificar.
O exemplo completo acima e mais fundo estão na isummation: http://www.isummation.com/blog/day-2-avoid-cross-site-scripting-xss-using-coldfusion-10-part-1/