it-swarm.com.de

WordPress schränkt den direkten Zugriff auf Plugin-Dateien ein

Ich entwickle ein WordPress-Plugin, habe aber vorher den Code der wenigen bereits entwickelten Plugins überprüft. Ich habe einen allgemeinen Ansatz gesehen, um die direkte Position, an der der Plugin-Entwickler den Plugin-Code startet, durch die folgende Zeile einzuschränken

//  If accessed directly, abort
if ( ! defined( 'WPINC' ) ) {
    die;
}

Dies ist in der Plugin-Indexdatei. Meine Frage ist, wenn wir das Plugin installieren, ist dies die erste Datei, die ausgeführt wird, wo es zuvor definiert wurde und es wird nicht die Ausführung für die Datei abgebrochen.

1
Mehar

Frage 1. also wo es vorher definiert ist
Antwort:

Es ist in WordPress Core definiert.

Hier eine kurze Online Referenz oder für eine lokale Referenz werfen Sie einen Blick auf die folgende Datei im Stammverzeichnis von WordPress: wp-settings.php. In dieser Datei ( um Zeile 18 ) wird folgender Code angezeigt:

define( 'WPINC', 'wp-includes' );


Frage 2. und die Ausführung der Datei wird nicht abgebrochen
Antwort:

Die Verwendung ( sozusagen das Ziel ) besteht darin, Plugins vor direktem Zugriff zu schützen
( von außen,Verhindern von unbefugtem Zugriffauf Ihren Code )
Um diesen Schutz zu erreichen, verwenden einige EntwicklerWPINCund andereABSPATHwie in:

  • if (!defined('ABSPATH')) exit; (oder exit durch die("No cheating!") oder andere txt ersetzen)
  • if ( ! defined( 'WPINC' ) ) die; (oder benutze exit auf die gleiche Weise wie oben)

Beide sind wie folgt definiert:

  • define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
  • define( 'WPINC', 'wp-includes' );

dirname ( generic PHP ) gibt einfach das Verzeichnis von einem vollständigen Pfad zurück.
wp-includes ist ziemlich selbsterklärend.


Sie können frei entscheiden, welche Sie verwenden möchten. Ich persönlich denke, es gibt keinen wirklichen richtigen Weg , beide haben den gleichen Zweck. Ich verwende nur ABSPATH, aber es hängt alles von Ihren persönlichen Vorlieben ab.
Denken Sie daran, es direkt unter dem Kopfbereich oder zumindest in der Nähe des oberen Randes Ihres Plugins einzufügen.

3
Charles

WPINC wird durch WP definiert, bevor Plugins geladen werden. Die Tatsache, dass es bereits definiert ist, zeigt an, dass das Plugin von WP und nicht von einer direkten Anfrage geladen wird.

1
BillK

Sie können auch dieses verwenden. Es ist im Akismet Anti-Spam Plugin definiert.

// Make sure we don't expose any info if called directly
if ( !function_exists( 'add_action' ) ) {
    echo 'Hi there!  I\'m just a plugin, not much I can do when called directly.';
    exit;
}
0
Razon K.