Gibt es einen integrierten Magento-Helfer, der ausgegebene Vorlagendaten umgeht, um XSS zu verhindern?
Oder soll ich einfach das PHP htmlspecialchars
oder die htmlentities
Funktionen nutzen?
Gibt es einen integrierten Magento-Helfer, der ausgegebene Vorlagendaten umgeht, um XSS zu verhindern?
Oder soll ich einfach das PHP htmlspecialchars
oder die htmlentities
Funktionen nutzen?
Antworten:
Je nach Kontext gibt es mehrere Hilfsmethoden. Alle sind in,
Mage_Core_Helper_Abstract
aber auch in definiertMage_Core_Block_Abstract
, sodass Sie sie$this->...()
in jeder Vorlage verwenden können:escapeHtml()
: Es nutzt tatsächlichhtmlspecialchars
die empfohlenen Parameter, um HTML zu umgehen:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
- Zusätzlich können Sie eine Whitelist zulässiger Tags angeben und die Methode für ein Array aufrufen, um alle Elemente auf einmal zu umgehen. Verwenden Sie dies für jeden Inline-Text.quoteEscape()
: Eine einfachere Version ohne Whitelist- und Array-Verarbeitung, bei der jedoch sowohl einfache als auch doppelte Anführungszeichen vermieden werden. Dies ist nützlich für Text innerhalb eines HTML-Attributs .jsQuoteEscape()
: dieser entgeht einfachen Anführungszeichen mit einem Backslash. Es wird verwendet, um String-Literale in JavaScript zu maskieren. Dies ist jedoch nicht sicher . (Beispiel von @Xorax:)'test\\\'+alert("powned");//'
. Ein zusätzliches Entgehen von Backslashes ist erforderlich. Verwenden SiequoteEscape()
stattdessen!escapeUrl()
: Ich weiß nicht, warum diese Methode existiert, es ist keine URL-Codierung, es ist einfach althtmlspecialchars()
ohne Parameter. Benutze es nicht. Je.In einem verwandten Hinweis gibt es,
urlEncode()
das auch keine URL-Codierung anwendet, sondern base64 ... Verwenden Sie es nicht, wenn Sie nicht genau wissen, was Sie benötigen.Ja, die Benennung ist inkonsistent. Nachdem alle diese Methodennamen dem Schema
somethingEscape()
gefolgt waren, entschied sich jemand, die neuen Methoden zu missbrauchenhtmlEscape()
undurlEscape()
zu bevorzugen, und vergaßquoteEscape()
undjsQuoteEscape()
.quelle
Übersetze es einfach
Sie sollten immer die Standardübersetzungsfunktion verwenden
In einer Blockinstanz
Irgendwo anders
Und verwenden Sie es genauso, wie Sie es
sprintf
mit PHP verwenden würdenZ.B.
Oder entkomme ihm
In einer Blockinstanz
Irgendwo anders
Verwenden
Mage/Core/Helper/Abstract.php
Z.B.
quelle
Mage_Core_Block_Abstract::htmlEscape()
Wird ab Magento 1.4.0.0-rc1 nicht mehr unterstützt undMage_Core_Block_Abstract::escapeHtml()
sollte stattdessen verwendet werden.$this->__('Hello %s', '<script>alert("XSS!")</script>')
.Klassen
Mage_Core_Block_Abstract
undMage_Core_Helper_Abstract
beide verwenden dieselbe Funktion,Mage_Core_Helper_Abstract::escapeHtml
und die Implementierung verwendet intern die Funktion PHP htmlspecialchars, zusätzlich zur Implementierung zusätzlicher Logik für Arrays mit HTML-Inhalten.Auf die Funktion kann in allen Block- und Hilfsklassen über $ this zugegriffen werden. Da die Funktion öffentlich ist, können Sie sie über Mage :: helper ('core') oder eine andere Hilfsklasse überall verwenden.
quelle
Für spanisch konvertieren:
quelle