Mir ist bekannt, dass Magento 2 verschiedene Methoden zum Sichern der Vorlage bietet:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
Aber ich frage mich, wann ich diese Methoden anwenden soll?
Mir ist bekannt, dass Magento 2 verschiedene Methoden zum Sichern der Vorlage bietet:
$block->escapeHtml()
$block->escapeQuote()
$block->escapeUrl()
$block->escapeXssInUrl()
Aber ich frage mich, wann ich diese Methoden anwenden soll?
Die Escaping-Methoden in AbstractBlock
allen Delegate-Aufrufen an Magento\Framework\Escaper
, sodass Sie dort eine Übersicht finden.
Schauen wir uns die öffentlichen Methoden und ihre Dokumentation an:
/**
* Escape string for HTML context. allowedTags will not be escaped, except the following: script, img, embed,
* iframe, video, source, object, audio
*
* @param string|array $data
* @param array|null $allowedTags
* @return string|array
*/
public function escapeHtml($data, $allowedTags = null)
Dies sollte Ihre Standard-Escape-Methode für jede Ausgabe sein. Konvention ist, dass das Ergebnis aller Methoden, die nicht "Html" enthalten, maskiert werden muss.
( seit Magento 2.2 )
/**
* Escape a string for the HTML attribute context
*
* @param string $string
* @param boolean $escapeSingleQuote
* @return string
*/
public function escapeHtmlAttr($string, $escapeSingleQuote = true)
Verwenden Sie diese Option, um beispielsweise die Ausgabe in einem HTML-Attribut zu umgehen
title="<?php echo $block->escapeHtmlAttr($title) ?>"
Es wird HTML entkommen, aber auch Anführungszeichen ( "
)
Standardmäßig werden auch einfache Anführungszeichen ignoriert, sodass dies auch funktioniert:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
Setzen Sie den zweiten Parameter auf false, wenn dies nicht gewünscht ist.
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
Dies kann zur Ausgabe von URLs verwendet werden. Es wird die Standard - HTML - escaping und zusätzlich entfernt gelten javascript:
, vbscript:
und data:
. Wenn Sie URLs wie diese in von Benutzern bereitgestellten Links verhindern möchten, können Sie die Methode verwenden.
Bis zu Magento 2.1 war diese Funktion nicht enthalten und Sie mussten escapeXssInUrl()
stattdessen verwenden. Es gab keinen Grund, etwas zu benutzen escapeUrl()
.
Ansonsten einfach $block->escapeHtmlAttr()
für URLs verwenden.
( seit Magento 2.2 )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
Dies wendet die URL-Codierung auf Parameter an. Für interne URLs sollten Sie immer verwenden getUrl()
, wenn die URL-Codierung bereits für Sie durchgeführt wurde. Dies ist also nur erforderlich, wenn Sie manuell eine externe URL erstellen.
( seit Magento 2.2 )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
Codiert Unicode - Zeichen für JavaScript, beispielsweise ♥
wird \u2665
. Verwenden Sie diese Option, um die Ausgabe innerhalb eines JS-Strings zu verlassen . Für Inline-Javascript (dh onclick
Attribute) müssen Sie immer noch anrufen escapeHtmlAttr()
.
Beachten Sie json_encode()
, dass es in diesem Fall escapeJs()
nicht verwendet werden darf , wenn Sie es verwenden.
( seit Magento 2.2 )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
Codiert Unicode-Zeichen für CSS (siehe escapeJs()
), die beispielsweise im content
CSS-Attribut verwendet werden sollen.
escapeHtmlAttr()
stattdessenescapeUrl()
stattdessenescapeHtmlAttr()
stattdessen
escapeHtmlAttr
undescapeHtmlAttr
existiert nicht in 2.1.2 ... zumindest nicht in, es/vendor/magento/framework/Escaper.php
sei denn, sie haben es später hinzugefügt und Magento neu getaggt ..Dies ist für Magento 2.0. Für 2.1 siehe Fabians Antwort
escapeHtml
Verwenden Sie diese Funktion bei einer String-Ausgabe, die kein HTML enthalten soll.
Beispiel:
escapeQuote
Verwenden Sie diese Funktion bei HTML-Attributen
Beispiel:
escapeUrl
Verwenden Sie diese Funktion bei einer URL-Ausgabe (ohne XSS-Schutz - nur Zeichenkonvertierung)
Beispiel:
escapeXssInUrl
Verwenden Sie diese Funktion bei einer URL-Ausgabe (mit XSS-Schutz - einschließlich Zeichenkonversation)
Beispiel:
Was braucht man nicht zu entkommen?
count()
(Beispielecho (int)$var
)echo 'test'
)echo "test"
)Die
__
MethodeDieser wird für Übersetzungszwecke verwendet. Verwenden Sie diese Option, wenn Sie wissen, dass eine Zeichenfolge übersetzt werden kann.
Beispielsweise:
quelle
__()
? Ich bin es ein bisschen leid/* @escapeNotVerified */
überall zu__
ist nicht für Sicherheitszwecke, sondern für Übersetzungszweckeecho $this->escapeHtml(__('Text to translate'))