encodeForHtml()
(nuevo en CF10) frente a htmlEditFormat()
, ¿cómo son diferentes?encodeForHtml() vs htmlEditFormat()
Respuesta
Creo que es lo mismo que la función encodeForHTML en OWASP ESAPI de java. Más seguro para evitar el ataque XSS para usar contenido en 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>
Las funciones EncodeFor * se basan en las bibliotecas ESAPI de OWASP. La diferencia principal es que HTMLEditFormat() simplemente reemplaza "malos" cadenas, como &
, <
y >
con buenas cuerdas, como &
, <
y >
mientras que EncodeForHTML() es más inteligente, con una ventaja de ser que puede reconocer el contenido que ya está codificada y no doble codificación.
Por ejemplo, si un usuario envió el siguiente contenido a su sitio:
<div>
Here is <i>test</i> html content includes<br/>
<script>alert('hello')</script>
Notice how & rendered with both functions.
</div>
Tanto HTMLEditFormat() y EncodeForHTML() escaparía correctamente los caracteres '<' y '>'. Pero HTMLEditFormat() sería ciegamente codificar el &
nuevo de tal manera que su salida se ve como:
... how &amp; rendered ...
los casos en que, de otro modo parecerse con encodeForHTML():
... how & rendered ...
HTMLEditFormat() couldn No diga que el ampersand ya estaba codificado, por lo que volvió a codificarlo. Este es un ejemplo trivial, pero demuestra cómo las bibliotecas ESAPI son más inteligentes y, por lo tanto, más seguras.
En pocas palabras, no hay razón para usar HTMLEditFormat() en CF10 +. Para una protección máxima, debe reemplazar las funciones de Formato con las funciones Encode.
El ejemplo completo arriba y más antecedentes se encuentran en isummation: http://www.isummation.com/blog/day-2-avoid-cross-site-scripting-xss-using-coldfusion-10-part-1/
- 1. es XmlFormat() siempre mejor que htmlEditFormat()?
- 2. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 3. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
- 4. 'método' vs. 'mensaje' vs. 'función' vs. '???'
- 5. ACE vs Boost vs Poco vs wxWidgets
- 6. VS 2008 vs VS 2008 Express
- 7. Atomikos vs JOTM vs Bitronix vs?
- 8. Acumular vs fold vs reducir vs compress
- 9. .NET vs ASP.NET vs CLR vs ASP
- 10. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - FIABILIDAD
- 11. método vs función vs procedimiento vs clase?
- 12. Rhino simulacro vs Typemock vs JustMock vs
- 13. inline vs __inline vs __inline__ vs __forceinline?
- 14. Exec vs vs ExecWait ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs vs ExecDos ExeCmd
- 15. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, ¿qué tienen en común?
- 16. Crystalspace vs. Irrlicht vs. .....?
- 17. NetSqlAzMan vs AzMan vs (?????)
- 18. SpiderMonkey vs JavaScriptCore vs.
- 19. Django -vs- Grails -vs-?
- 20. Stackpanel: Altura vs ActualHeight vs ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 21. Mathematica: sin evaluar vs vs Defer Hold vs vs HoldForm HoldAllComplete vs etc, etc
- 22. NSImage vs. CIImage vs. CGImage?
- 23. Bitmap vs ImageView vs Drawable
- 24. DIP vs. DI vs. IoC
- 25. Boo vs C# vs Python?
- 26. DbConnection vs OleDbConnection vs OdbcConnection
- 27. MySQL vs Firebird vs SQLite
- 28. JSF Facelets vs vs JSP
- 29. migrator.net vs fluentmigrator vs migsharp
- 30. Matlab vs Aforge vs OpenCV
parece extraño que no se acaba de mejorar la etiqueta pre-existente a través de otro atributo para que sea más segura o simplemente mejorar fuera de la caja. – Snipe656
Bueno, encodeForHtml() es parte de un conjunto: encodeForCss(), encodeForJavascript(), encodeForHtmlAttribute(), etc. También se supone que escapa más que el original htmlEditFormat(). – ale
Dado que utilizan una salida diferente, agregaron una nueva etiqueta como parte del conjunto mencionado anteriormente en lugar de modificar la etiqueta existente. Esto ayuda a mantener la compatibilidad con el código existente. –