encodeForHtml()
(nowy w CF10) kontra htmlEditFormat()
, jak się różnią?encodeForHtml() vs htmlEditFormat()
Odpowiedz
Myślę, że jest to to samo, co funkcja encodeForHTML w OWASP ESAPI języka Java. Bardziej bezpieczne, aby uniknąć ataku XSS, aby używać treści w 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>
Kodowanie * Funkcje są oparte na bibliotekach OWASP ESAPI. Główną różnicą jest to, że HTMLEditFormat() po prostu zastępuje „zły” struny, jak &
, <
i >
z dobrymi strunami, jak &
, <
i >
natomiast EncodeForHTML() jest mądrzejszy, z jedną zaletą jest to może rozpoznać treści, które są już zakodowane i nie podwójnie go kodować.
Na przykład, jeśli użytkownik przedstawiła następującą treść do swojej strony:
<div>
Here is <i>test</i> html content includes<br/>
<script>alert('hello')</script>
Notice how & rendered with both functions.
</div>
Zarówno HTMLEditFormat() i() EncodeForHTML byłoby właściwie uciec znaki '<' i '>'. Ale HTMLEditFormat() będzie ślepo zakodowania &
znowu taki, że wyjście wygląda następująco:
... how &amp; rendered ...
Jeżeli byłoby inaczej wyglądać z encodeForHTML():
... how & rendered ...
HTMLEditFormat() mogłem powiedzieć, że znak ampersand został już zakodowany, więc ponownie go zakodował. Jest to banalny przykład, ale pokazuje, w jaki sposób biblioteki ESAPI są inteligentniejsze, a przez to bezpieczniejsze.
Podsumowując, nie ma powodu, aby używać HTMLEditFormat() w CF10 +. Aby uzyskać maksymalną ochronę, należy zastąpić funkcje formatowania funkcjami kodowania.
Kompletny przykład powyżej i więcej tła są na isummation: http://www.isummation.com/blog/day-2-avoid-cross-site-scripting-xss-using-coldfusion-10-part-1/
- 1. jest XmlFormat() zawsze lepiej niż htmlEditFormat()?
- 2. metoda vs funkcja vs procedura vs klasa?
- 3. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 4. Opa vs Dart vs Haxe vs coffeescript
- 5. VS 2008 vs VS 2008 Express
- 6. Strona vs Extent vs. Segment vs. Tabele
- 7. Crystalspace vs. Irrlicht vs. .....?
- 8. NetSqlAzMan vs AzMan vs (?????)
- 9. SpiderMonkey vs JavaScriptCore vs?
- 10. Klasa vs pakiet vs moduł vs komponent vs kontener kontra serwis vs platforma w świecie Java
- 11. Zmierz czas w Linuksie - czas vs zegar vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?
- 12. IDataErrorInfo vs ValidationRule vs Exception
- 13. Boo vs C# vs Python?
- 14. DbConnection vs OleDbConnection vs OdbcConnection
- 15. Matlab vs Aforge vs OpenCV
- 16. DDS vs AMQP vs ZeroMQ
- 17. ScheduledExecutorService vs Timer vs Handler
- 18. flume vs kafka vs inni
- 19. ActiveMQ vs Apollo vs Kafka
- 20. getBBox() vs getBoundingClientRect() vs getClientRects()
- 21. Object vs Class vs Function
- 22. Wskaźniki vs auto_ptr vs shared_ptr
- 23. fadeIn fadeOut vs vs fadeTo
- 24. DMD vs. GDC vs. LDC
- 25. select vs poll vs epoll
- 26. Xamarin vs. Mono vs. Monodevelop
- 27. rmi vs servlets vs gniazda
- 28. filter_var vs htmlentities vs htmlspecialchars
- 29. managedQuery() vs context.getContentResolver.query() vs android.provider.something.query()
- 30. getchar_unlocked() VS scanf() VS cin
Wydaje się dziwne, że oni nie tylko poprawić już istniejącą etykietę za pośrednictwem innego atrybutu aby uczynić go bardziej bezpieczne lub po prostu zwiększyć jej wyjęciu z pudełka. – Snipe656
Cóż, encodeForHtml() jest częścią zestawu: encodeForCss(), encodeForJavascript(), encodeForHtmlAttribute(), itp. Ma również uciec więcej niż oryginalny htmlEditFormat(). – ale
Ponieważ używają różnych wyników, dodali nowy znacznik jako część wyżej wymienionego zestawu, zamiast modyfikować istniejący znacznik. Pomaga to zachować zgodność wsteczną z istniejącym kodem. –