Twig: Erlaube HTML, aber escape script
ch untersuche ein möglichesXSS
Angriffsvektor für meine Anwendung.
Was ich habe
FormType mit einem einzelnentextarea
Feld. Normalerweise kann dieses Feld @ enthalthtml
StichworteTwig
Vorlage, mit der die eingefügten Daten gerendert werden.Ich benutze dieses Formular, um den folgenden Inhalt einzufügen:
<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>
Das Anzeigen dieser Daten würde ein Escape-Vorgang erfordern. Ich kenne nur wenige Strategien, um den Daten zu entkommen.
1)raw
filter: Deaktiviert das Entrinnen vollständig -> führt mögliches XSS @ e
2)e
filter:
html
Flavour Outputs:<b>Some valid HTML text</b> <script type="text/javascript">alert("XSS")</script>
js
Flavour Outputs:\x3Cb\x3ESome\x20valid\x20HTML\x20text\x3C\x2Fb\x3E\x0D\x0A\x3Cscript\x20type\x3D\x22text\x2Fjavascript\x22\x3Ealert\x28\x22XSS\x22\x29\x3C\x2Fscript\x3E
3){{ var|striptags('<br>')|raw }}
, Ausgänge:Einig gültiger HTML-Text alert ("XSS")
Dieser funktioniert, aber irgendwie gefällt es mir nicht. Ich suche eher eine Blacklist-Lösung, keine Whitelist.
Jetzt die Frage:
Gibt es eine andere Escape-Strategie, die @ erlaubhtml
Tags, aber escape<script>
tag likee("js")
Filter funktioniert?
Sollte ich das Skript während der Übermittlung des Formulars oder während des @ "töten"Twig
rendering?