Wie in dieser Frage vorgeschlagen , füge ich dieses Thema als neue Frage zur Diskussion / Abstimmung in Bezug auf Best Practices für die Plugin- / Themensicherheit 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, lesen Sie das folgende Thema:
http://wordpress.org/extend/themes/coraline
Antworten:
Nonces verwenden (wenn Sie die Einstellungs-API nicht verwenden)
Plugins und Themes sollten explizit die Nonce-Prüfung auf der Einstellungsseite bereitstellen, wenn die Einstellungs-API nicht verwendet wird:
quelle
Daten bereinigen, validieren und entziehen
Bereinigen Sie alles, 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 vor der Ausgabe in den Theme-Vorlagendateien
Plugins und Themes sollten
esc_attr()
für Texteingaben und /esc_html()
oderesc_textarea()
für Textbereiche verwendet werden.Ebenfalls erhältlich von dem Wordpress - API ist
esc_url()
,esc_url_raw()
,esc_js()
undwp_filter_kses()
.Schlechtes Beispiel:
Gutes Beispiel:
Hier ist ein großartiges Video von Mark Jaquith, das die Verwendung der Escape-Funktionen erklärt:
quelle
Verwenden Sie $ _GET / $ _POST / $ _REQUEST nur dann, wenn keine besseren APIs verfügbar sind
Plugins und Themes sollten die Einstellungen API verwenden , zu erhalten und speichern Formulareingabedaten anstatt auf
$_POST
und$_REQUEST
Daten direkt.quelle
Verwenden
$wpdb->prepare
Wenn Sie benutzerdefinierte Abfragen über das
$wpdb
Objekt$wpdb->prepare
erstellen, füllen Sie Platzhalter immer mit Werten, anstatt die Abfragen mit Daten zu schreiben, die mit SQL-Code gemischt sind, da diemysql_*
Familienfunktionen alle falsch gelehrt haben.quelle
$wpdb->prepare
ist nicht dasselbe wie vorbereitete Aussagen.Seien Sie vorsichtig mit PHP-Funktionen, mit denen möglicherweise schädlicher Code ausgeführt wird
Eine gute Lektüre für alle, die PHP schreiben: Ausnutzbare PHP-Funktionen auf StackOverflow.
Verwenden Sie die Theme Modification API
Themen sollten
set_theme_mod()
und verwandte Funktionen nicht 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 ein Array und ist nach meiner Erfahrung viel einfacher zu handhaben. Darüber hinaus bietet es standardisierte Filter für Plugins - was sich positiv auf die Interoperabilität auswirkt.
Vermeiden Sie aktiviert
register_globals
Verlasse dich nicht auf
register_globals = on
. Ein Pro Theme, das mein letzter Kunde gekauft hat, macht genau das. Ich könnte jede Site mit diesem Thema in 5 Minutenhacken ... ThimbThumb hat dies auch getan (und tut es immer noch?).
Erstellen Sie keine Dateien mit unnötigen Zugriffsrechten
Erstellen Sie keine Dateien mit zu freien Zugriffsberechtigungen.
Verwenden Sie SSL, sofern verfügbar
Zeigen Sie mit Ihrem Link auf Twitter / Facebook / Anything auf die HTTPS-URI, falls verfügbar. Die Sicherheit Ihres Lesers ist ebenfalls wichtig.
quelle
set_theme_mod()
, wie Sie es richtig mit der Verwendung der Einstellungs-API kombinieren können?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.
quelle
Prüfen Sie beim Hinzufügen und Ausgeben von Einstellungsseiten, ob die entsprechenden Funktionen vorhanden sind
Plugins sollten eine geeignete Funktion (z. B.
manage_options
) zum Hinzufügen der Einstellungsseite verwenden.Themen sollten
edit_theme_options
als geeignete Funktion zum Hinzufügen der Einstellungsseite verwendet werden.quelle
edit_theme_options
die Einstellungs-API jedoch nicht verwenden. Die Übermittlung von Optionen ist fest codiertmanage_options
, um Aktualisierungen übermitteln zu können. Zugehöriges Trac-Ticket finden Sie hier .edit_theme_options
zuzuweisen. Ich dachte, es wäre praktisch, darauf hinzuweisen, dass die Einstellungs-API in ihrem aktuellen Status nur von Rollen mit dermanage_options
Fähigkeit verwendet werden kann.Verwenden Sie aktuelle Tutorials und Informationen
Plugins und Designs sollten die Seiten Optionen und Einstellungen bewusst implementieren und sich nicht 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, was nicht zu tun ist :
So erstellen Sie eine Optionsseite für Ihr WordPress-Theme (1stwebdesigner.com)
Erstellen Sie eine fantastische Seite mit WordPress- Designoptionen, Teil 1 (wpshout.com)
quelle
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:
quelle
Für Kontrollkästchen und wählen Sie die Optionen, Plugins und Themes sollten die Verwendung
checked()
undselected()
Funktionen zur Ausgabechecked="checked"
undselected="selected"
jeweils.quelle
checked( $theme_options['whatever_option'] )
oderchecked( 'some_value' == $theme_options['whatever_option'] )
. Ich weiß nicht, wie es prägnanter wird?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.
quelle
Verwenden Sie wp_safe_redirect (), anstatt die Funktion header () von php direkt aufzurufen, wenn Sie auf eine Seite in derselben Domain verweisen.
quelle
Fügen Sie den entsprechenden Abschnitten des Admin-Menüs Einstellungsseiten hinzu
Plugins sollten die
add_options_page()
Funktion verwenden, um die Plugin-Einstellungsseite zumSettings
Menüadd_menu_page()
hinzuzufügen , anstatt ein Menü der obersten Ebene hinzuzufügen.Themen sollten die
add_theme_page()
Funktion verwenden, um die Seite mit den Themaeinstellungen zumAppearance
Menüadd_menu_page()
hinzuzufügen , anstatt ein Menü der obersten Ebene hinzuzufügen.quelle