Wanneer je een webapplicatie ontwikkelt waarin de gebruiker in staat moet zijn om tekst met opmaak te maken, zal je waarschijnlijk gebruik maken van een Html-editor. Er zijn heel veel goede Html-editors in de markt te verkrijgen, zowel open-source als betaalde componenten. Alle editors hebben één ding gemeen. Standaard zijn ze kwetsbaar voor XSS (cross site scripting) aanvallen.

Wat is een XSS aanval
Een XSS aanval, is een poging van een hacker om via de Html-editor een script in de tekst in te voegen. Voor standaard formulieren is de beste oplossing om het posten van Html volledig te verbieden. Voor een Asp.NET of MVC-applicatie is dit het standaard gedrag. In het geval van een Html-editor is het doel van de editor dat de gebruiker Html kan opsturen naar de server en wordt het beveiligen een stuk lastiger.

Stel bijvoorbeeld dat een website een invoer vak heeft:

Een hacker ziet dat er een Html editor op de pagina staat. Een goede editor zal in de editor zelf over het algemeen het intypen van scripts onmogelijk maken. Een hacker is echter niet voor één gat te vangen en omdat hij weet dat de server de content van de editor als Html zal verwerken, zal hij buiten de editor om de value van het tekstvak instellen:

De hacker kan deze waarde zelfs last minute in de postback proberen aan te passen.
Als de server nu geen aanvullende controle heeft, zal het script worden opgeslagen bij het bericht en zal het script dus ook worden uitgevoerd wanneer deze Html op de pagina getoond wordt.

Xss bescherming
De editor zelf kan weinig doen om xss aanvallen te voorkomen omdat de hacker de client-side logica eenvoudig kan omzeilen, via de developer opties van de browser, en op die manier zijn script naar de server kan sturen. Het encoden van de Html op de server biedt ook geen oplossing omdat het bij dit soort content juist de bedoeling is dat er uiteindelijk Html wordt getoond. Alternatief is werken met een black-list of white-list van toegestane Html-tags. Een black-list staat alle tags toe, behalve tags van de black-list. Een white-list blokkeert standaard alle tags behalve tags in de white-list. Over het algemeen is een black-list heel lastig goed sluitend te krijgen. Voor de beste beveiliging is het aan te raden om een white-list te implementeren op de server.

White list libraries
Er zijn verschillende white-list libraries beschikbaar die je kunnen helpen om xss beveiliging snel en gedegen te implementeren:
• ASP.NET – Html Agility Pack
• PHP – Html Purifier
• Java – jsoup
• Node.js – sanitize-html

Slotwoord
Html-editors worden in behoorlijk wat toepassingen gebruikt. Val niet in de valkuil te denken dat de kans op xss aanvallen op jouw applicatie niet groot is. Zonder aanvullende beveiliging kan iedere tiener met enige technische affiniteit dit soort aanvallen uitvoeren.
Zie voor meer info de cheat list van de OWASP: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

Auteur: Menno Jongerius