Wie in dieser Frage vorgeschlagen , füge ich dieses Thema als neue Frage zur Diskussion/Abstimmung in Bezug auf Best Practices für die Sicherheit von Plugins/Themes hinzu.
Hier ist die Start-Checkliste, basierend auf meinen aktuellen (in Arbeit befindlichen) Einstellungen/der Datensicherheits-Checkliste, die zum Überprüfen von Themen verwendet wird (die Prinzipien sollten für Plugins nicht anders sein als für Themen).
Wenn Sie ein Thema mit einer sicheren und solide codierten Seite für Themaeinstellungen auschecken möchten, sehen Sie sich dieses Thema an:
http://wordpress.org/extend/themes/coraline
Plugins und Designs sollten explizit die Nonce-Prüfung auf der Einstellungsseite bereitstellen, wenn die Einstellungs-API nicht verwendet wird:
Alles bereinigen, was in (!) Die Datenbank sowohl im Front-End als auch im Back-End gelangen könnte!
Plugins und Themes sollten eine ordnungsgemäße Datenüberprüfung durchführen:
Escape Alle nicht vertrauenswürdigen Daten, bevor sie in den Theme-Vorlagendateien ausgegeben werden
Plugins und Themes sollten esc_attr()
für Texteingaben und esc_html()
oder esc_textarea()
für Textbereiche verwenden.
Ebenfalls über die WordPress-API verfügbar sind esc_url()
, esc_url_raw()
, esc_js()
und wp_filter_kses()
.
Schlechtes Beispiel:
<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>
Gutes Beispiel:
<a href="<?php echo esc_url($url); ?>">anchor</a>
Hier ist ein großartiges Video von Mark Jaquith, das die Verwendung der Escape-Funktionen erklärt:
$wpdb->prepare
Verwenden Sie beim Erstellen benutzerdefinierter Abfragen über das $wpdb
-Objekt immer $wpdb->prepare
, um Platzhalter mit Werten zu füllen, anstatt die Abfragen mit Daten zu schreiben, die mit SQL-Code gemischt sind, da die Funktionen der mysql_*
-Familie alle falsch gelehrt haben.
Plug-ins und Designs sollten die Einstellungs-API verwenden, um Formulareingabedaten abzurufen und zu speichern, anstatt sich direkt auf $_POST
- und $_REQUEST
-Daten zu verlassen.
Eine nette Lektüre für alle, die PHP schreiben: Exploitable PHP functions on StackOverflow.
Themen sollten set_theme_mod()
und verwandte Funktionen not ein selbst erfundenes Namensschema verwenden.
Die theme_mod-API ist eine spezielle Ebene für die Einstellungs-API. Es garantiert eindeutige Namen, verschiebt alle Optionen in one array und ist - meiner Erfahrung nach - viel einfacher zu handhaben. Außerdem bietet es standardisierte Filter für Plugins - was für die Interoperabilität gut ist.
register_globals
Verlassen Sie sich nicht auf register_globals = on
. Ein Pro Theme, das mein letzter Kunde gekauft hat, macht genau das. Ich könnte jede Website mit diesem Thema in 5 Minuten hacken ...
ThimbThumb hat das auch getan (und tut es immer noch?).
Erstellen Sie keine Dateien mit zu hohen Zugriffsberechtigungen.
Zeigen Sie mit Ihrem Share on Twitter/Facebook/Anything -Link auf die HTTPS-URI, falls verfügbar. Die Sicherheit Ihres Lesers ist ebenfalls wichtig.
Plugins und Designs sollten Optionen in einem einzigen Array speichern, anstatt mehrere Optionen für die Einstellungsseite zu erstellen. Die Verwendung der Einstellungs-API würde dies handhaben.
Plugins sollten ein geeignetes Capability (z. B. manage_options
) verwenden, damit die Einstellungsseite hinzugefügt werden kann.
Themen sollten edit_theme_options
als die entsprechende Funktion verwenden, um die Einstellungsseite hinzuzufügen.
Plugins & Themes sollten die Seiten "Optionen" und "Einstellungen" bewusst implementieren und nicht sich auf Lernprogramme zum Kopieren und Einfügen von Websites stützen, die veraltet sind und keine ordnungsgemäße Datensicherheit bieten, wie die unten aufgeführten.
Beispiele für das, was nicht zu tun :
So erstellen Sie eine Optionsseite für Ihr WordPress-Theme (1stwebdesigner.com)
Erstelle eine fantastische WordPress Theme Options Seite Teil 1 (wpshout.com)
Plug-ins und Designs sollten die Einstellungs-API verwenden, die benutzerfreundlicher und sicherer ist und einen Großteil der harten Arbeit der Einstellungsseiten erledigt:
Eine gute Anleitung zur Verwendung der Einstellungs-API finden Sie unter:
Verwenden Sie wp_safe_redirect () , anstatt die Funktion header () von php direkt aufzurufen, wenn Sie auf eine Seite in derselben Domain verweisen.
Plugins sollten allen Optionen, benutzerdefinierten Funktionen, benutzerdefinierten Variablen und benutzerdefinierten Konstanten plugin-slug voranstellen.
Themen sollten allen Optionen, benutzerdefinierten Funktionen, benutzerdefinierten Variablen und benutzerdefinierten Konstanten Theme-Slug voranstellen.
Für Kontrollkästchen und ausgewählte Optionen sollten Plugins und Designs die Funktionen checked()
und selected()
zur Ausgabe von checked="checked"
bzw. selected="selected"
verwenden.
Plugins sollten die Funktion add_options_page()
verwenden, um die Plugin-Einstellungsseite zum Menü Settings
hinzuzufügen, anstatt add_menu_page()
zum Hinzufügen eines Menüs der obersten Ebene zu verwenden.
Themen sollten die Funktion add_theme_page()
verwenden, um die Seite mit den Themaeinstellungen zum Menü Appearance
hinzuzufügen, anstatt add_menu_page()
zum Hinzufügen eines Menüs der obersten Ebene zu verwenden.