Warum sollte ich die esc_url verwenden?

12

Dieses Ding macht meine Codierung schwierig. Der Wordpress-Codex begründet die Verwendung von esc_url, indem er vage über Sicherheit spricht. Aber ist es die Mühe wirklich wert?

Was ist zum Beispiel der wichtige praktische Sicherheitsvorteil bei der Verwendung?

<?php echo esc_url( home_url( '/' ) ); ?>

Anstatt von

<?php echo home_url() ?>

PS: Ich spreche nicht von der Themenentwicklung, sondern von einer bestimmten Site.

IXN
quelle

Antworten:

12

Wenn Sie die Dokumentation zur Datenvalidierung überprüfen, haben Sie Folgendes über die Funktion zu sagen:

Verwenden Sie immer esc_url, wenn Sie URLs bereinigen (in Textknoten, Attributknoten oder anderswo). Lehnt URLs ab, die nicht über eines der bereitgestellten [...] Whitelist-Protokolle verfügen, beseitigt ungültige Zeichen und entfernt gefährliche Zeichen.

Da haben Sie es - praktischer Sicherheitsvorteil. Gültiges Protokoll, keine trüben Zeichen.

Die Antwort auf die Notwendigkeit lautet fest Ja . Das Entgehen der Ausgabe ist die grundlegendste Sicherheitspraxis.

Selten
quelle
2
Bei allem Respekt kann ich nicht sehen, wie der Home Link zum Beispiel ein Sicherheitsrisiko darstellen kann. Vielleicht gelten diese Richtlinien für die Erstellung von Themen und gelten nicht für "privaten" Code? Schließlich ist es möglicherweise am besten, die Privatadresse und andere Links in HTML fest zu codieren und PHP überhaupt nicht zu verwenden, wenn Sicherheitsrisiken bestehen.
IXN
9
Es ist weitaus produktiver, Sicherheitspraktiken konsequent und universell anzuwenden, als zu diskutieren, ob sich jeder Fall lohnt. :)
Erster
7
Andererseits legt eine von Codex vorgeschlagene Ressource Regel Nr. 3 fest: Vertrauen Sie WordPress . Dies scheint zu empfehlen, wp-Kernfunktionen nicht zu stark zu sanieren , wenn sie in ihrem richtigen Kontext verwendet werden. Nach dieser Empfehlung hätte ich erwartet , eine eigene Desinfektion durchzuführen. home_url()home_url
Franco
3

Nun, alle Benutzereingaben sollten bereinigt werden ... Wenn die URL, die Sie einfügen, keine Benutzereingaben sind (z. B. Site-Einstellungen von jemandem, dem Sie voll vertrauen, fest codierte Werte), können Sie sich von der Esc-URL befreien.

Aber wenn ich diese URL in Ihre Site einfügen könnte, könnte ich leicht js-Code oder Umleitungscode einfügen ... oder in einigen Situationen sogar serverseitigen Code.

Dies kann dazu führen, dass Sitzungen entführt werden und Ihre Benutzerkonten gestohlen werden und andere schlechte Optionen verfügbar sind.

Bearbeiten:

In Ihrem Beispiel wurde esc_url( home_url( '/' ) );
ein halbhart codierter Wert verwendet! daher esc_urlbeseitigt werden.
Das heißt, ich verstehe immer noch nicht, warum ich die Unterscheidung zwischen einer Bedrohung und einer Nichtbedrohung stören sollte, und würde im Allgemeinen vorschlagen, esc_url () für jeden Wert beizubehalten.

Tomer W.
quelle
3
"Site-Einstellung von jemandem, dem Sie vertrauen" ist immer noch buchstäblich Benutzereingabe. :)
Erster
@Rarst ja, ich bin bei dir, aber er war so "angewidert" von esc_url, dass ich etwas verzeihender war.
Tomer W
2

Eine andere Sache, die Sie im Kopf behalten müssen, esc_url()ist für etwas wie <a href="SANITIZE_THIS_URL">your_text</a>.wenn Sie die URL in Ihrer HTML-Ausgabe verwenden möchten, wie ein href-Attribut für einen Link oder ein src-Attribut für ein Bildelement, das Sie verwenden sollten esc_url().

esc_url_raw()ist für andere Fälle, in denen Sie eine saubere URL möchten, aber nicht möchten, dass HTML-Entitäten codiert werden. Jede Nicht-HTML-Verwendung (DB, Redirect) würde dies verwenden.

Die esc_url_raw()Funktion funktioniert fast genauso wie esc_url(), entschlüsselt jedoch keine Entitäten, was bedeutet, dass & nicht durch & # 038 usw. ersetzt wird. Wie Mark betonte, ist die Verwendung esc_url_raw()in Datenbankabfragen, Weiterleitungen und HTTP-Funktionen wie "wp_remote_get ()" für weitere Informationen zu esc_url_raw () sicher.

MD MUSA
quelle
1

esc_url wird verwendet, um einen gültigen HTML- Code zu erstellen (um Eingaben nicht zu bereinigen). Sie sollten dies immer dann verwenden, wenn Sie nicht 100% sicher sind, dass das, was Sie ausgeben möchten, ein gültiger HTML-Code für diesen Kontext ist.

Matthew
quelle
Alle Familien von Fluchtfunktionen dienen ausdrücklich der Desinfektion.
Erster