it-swarm.com.de

Was ist der Unterschied zwischen esc_html, esc_attr, esc_html_e und so weiter?

Ich erhielt eine Rückmeldung vom Sicherheitsbeamten und er wies darauf hin, dass ich die Benutzereingaben in meinem Code ordnungsgemäß ausschließen sollte. Also habe ich ein paar Nachforschungen angestellt und Fluchtfunktionen gefunden.

Was ist der Unterschied zwischen ihnen? Wann sollte ich esc_html() und wann esc_attr() verwenden? Und wann soll ich diese Funktionen mit _e() am Ende nutzen?

7
baldrick

esc_html()maskiert eine Zeichenfolge, sodass sie nicht als HTML analysiert wird. Zeichen wie < werden beispielsweise in &lt; konvertiert. Dies sieht für den Leser genauso aus, bedeutet jedoch, dass der ausgegebene Wert <script> ist und vom Browser nicht als tatsächliches Skript-Tag interpretiert wird.

Verwenden Sie diese Funktion, wenn der ausgegebene Wert kein HTML enthalten soll.

esc_attr()maskiert einen String, so dass die Verwendung in einem HTML-Attribut, wie zum Beispiel class="", sicher ist. Dies verhindert, dass ein Wert aus dem HTML-Attribut ausbricht. Wenn der Wert beispielsweise "><script>alert();</script> lautet und Sie versucht haben, ihn in einem HTML-Attribut auszugeben, wird das aktuelle HTML-Tag geschlossen und ein Skript-Tag geöffnet. Das ist unsicher. Wenn Sie den Wert maskieren, können Sie das HTML-Attribut nicht schließen und unsicheres HTML kennzeichnen und ausgeben.

Verwenden Sie diese Funktion, wenn Sie einen Wert innerhalb eines HTML-Attributs ausgeben.

esc_url()maskiert eine Zeichenfolge, um sicherzustellen, dass es sich um eine gültige URL handelt.

Verwenden Sie diese Funktion, wenn Sie einen Wert innerhalb eines href=""- oder src=""-Attributs ausgeben.

esc_textarea()maskiert einen Wert, sodass die Verwendung in einem <textarea>-Element sicher ist. Indem ein Wert mit dieser Funktion maskiert wird, wird verhindert, dass ein Wert, der in einem <textarea< ausgegeben wird, das <textarea> -Element schließt und seinen eigenen HTML-Code ausgibt.

Verwenden Sie diese Funktion, wenn Sie einen Wert innerhalb eines <textarea>-Elements ausgeben.

esc_html() und esc_attr() haben auch Versionen, die auf __(), _e() und _x() enden. Diese dienen zur Ausgabe übersetzbarer Zeichenketten.

WordPress verfügt über die Funktionen __(), _e() und _x() zur Ausgabe von übersetzbarem Text. __() gibt eine übersetzbare Zeichenfolge zurück, _e() gibt eine übersetzbare Zeichenfolge zurück, und _x() gibt eine übersetzbare Zeichenfolge mit einem bestimmten Kontext zurück. Sie haben sie wahrscheinlich schon einmal gesehen.

Da Sie einer Übersetzungsdatei nicht unbedingt vertrauen können, dass sie sichere Werte enthält, können Sie mit diesen Funktionen bei der Ausgabe einer übersetzbaren Zeichenfolge sicherstellen, dass die ausgegebenen Zeichenfolgen nicht dasselbe Problem wie oben beschrieben verursachen.

Verwenden Sie diese Funktionen, wenn Sie übersetzbare Zeichenfolgen ausgeben.

13
Jacob Peattie

esc_html wird in HTML beispielsweise zwischen einem <p> -Tag verwendet

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr wird verwendet, um Attributwerte in HTML-Tags wie folgt zu maskieren:

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

das Anwenden von _e bis zum Ende ist für die Verwendung mit Textdomänen vorgesehen und gibt diesen automatisch für Sie aus, z. B .:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

zusätzlich zu _e gibt es auch __, der das Gleiche tut wie _e, es aber nicht wiedergibt, sodass Sie es in einer Variablen speichern können.

4
jrmd