wake-up-neo.com

Was sind bewährte Sicherheitsmethoden für WordPress-Plugins und -Themen?

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

21
Chip Bennett

Nonces verwenden (wenn Sie die Einstellungs-API nicht verwenden)

Plugins und Designs sollten explizit die Nonce-Prüfung auf der Einstellungsseite bereitstellen, wenn die Einstellungs-API nicht verwendet wird:

13
Chip Bennett

Daten bereinigen, validieren und entziehen

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:

  1. Validieren und Bereinigen alle nicht vertrauenswürdigen Daten, bevor Daten in die Datenbank eingegeben werden
  2. Escape Alle nicht vertrauenswürdigen Daten, bevor sie in den Formularfeldern Einstellungen ausgegeben werden
  3. 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:

12
Chip Bennett

Verwende $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.

9
Matteo Riva

Verwenden Sie $ _GET/$ _POST/$ _REQUEST nur dann, wenn keine besseren APIs verfügbar sind

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.

9
Chip Bennett

Seien Sie vorsichtig mit PHP -Funktionen, mit denen möglicherweise schädlicher Code ausgeführt wird

Eine nette Lektüre für alle, die PHP schreiben: Exploitable PHP functions on StackOverflow.

Verwenden Sie Theme Modification API

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.

Vermeiden Sie aktivierte 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 unnötigen Zugriffsrechten

Erstellen Sie keine Dateien mit zu hohen Zugriffsberechtigungen.

Verwenden Sie SSL, sofern verfügbar

Zeigen Sie mit Ihrem Share on Twitter/Facebook/Anything -Link auf die HTTPS-URI, falls verfügbar. Die Sicherheit Ihres Lesers ist ebenfalls wichtig.

8
fuxia

Speichern Sie die Daten in einem einzigen Array

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.

7
Chip Bennett

Prüfen Sie beim Hinzufügen und Ausgeben von Einstellungsseiten, ob die entsprechenden Funktionen vorhanden sind

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.

6
Chip Bennett

Verwenden Sie aktuelle Tutorials und Informationen

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 :

5
Chip Bennett

Verwenden Sie die Einstellungs-API

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:

4
Chip Bennett

Verwenden Sie wp_safe_redirect () , anstatt die Funktion header () von php direkt aufzurufen, wenn Sie auf eine Seite in derselben Domain verweisen.

1
mfields

Präfixfunktion und Variablennamen

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.

1
Chip Bennett

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.

1
Chip Bennett

Fügen Sie den entsprechenden Abschnitten des Admin-Menüs Einstellungsseiten hinzu

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.

0
Chip Bennett