encodeForHtml()vs htmlEditFormat ()

encodeForHtml() (novo em CF10) vs htmlEditFormat(), Como é que são diferentes?

Author: James A Mohler, 2012-05-15

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 &amp; Anchor</a><br/>
        <div class="xyz">Div contains & here.</div>
        <IMG     SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#    x27&#x58&#x53&#x53&#x27&#x29>
    <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>
</body>
</html></cfsavecontent>

<cfoutput>#htmleditformat(htmlcontent)#</cfoutput>
<br />
<cfoutput>#encodeforhtml(htmlcontent)#</cfoutput>
 9
Author: Pritesh Patel, 2012-05-15 09:47:18
As funções EncodeFor* são baseadas nas bibliotecas OWASP ESAPI. A principal diferença é que HTMLEditFormat() apenas substitui "bad" de cadeias de caracteres, como &, < e >, com boas seqüências, como &amp;, &lt; e &gt; 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 &amp; 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;amp; rendered ...

Onde de outra forma pareceria com encodeForHTML ():

... how &amp; 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/

 5
Author: Brian Ghidinelli, 2016-04-06 00:21:50