Nach welchen allgemeinen Sicherheitslücken muss ich suchen? [geschlossen]

16

Nach welchen Sicherheitslücken sollte ich als Entwickler eines Möchtegern-WP-Plugins Ausschau halten?

Ich erstelle gerade ein neues Plugin mit einem Konfigurationsfenster (zB Eingabefelder und so). Worüber sollte ich mir Sorgen machen?

Ist beispielsweise die Datenbereinigung eine große Sache, da sie sich im Bereich / wp-admin / befindet? Könnte jemand meine Plugin-Seite direkt angreifen und POST-Anfragen oder ähnliches senden?

Vielen Dank!

MrBatman
quelle

Antworten:

16

Hier ist eine geänderte Checkliste, die auf meinen aktuellen (in Arbeit befindlichen) Einstellungen / meiner Datensicherheits-Checkliste basiert, die zum Überprüfen von Themen verwendet wird (die Prinzipien sollten für Plugins nicht anders sein als für Themen):

  1. Plugins sollten allen Optionen, benutzerdefinierten Funktionen, benutzerdefinierten Variablen und benutzerdefinierten Konstanten plugin-slug voranstellen.

  2. Plug-ins sollten die Seiten Plug-in-Optionen und Plug-in-Einstellungen bewusst implementieren, anstatt sich auf Skripts zum Kopieren und Einfügen aus Website-Tutorials wie den folgenden zu verlassen, die veraltet sind und keine ordnungsgemäße Datensicherheit bieten:

  3. Plugins sollten die add_options_page()Funktion verwenden, um die Plugin-Einstellungsseite zum SettingsMenü add_menu_page()hinzuzufügen , anstatt ein Menü der obersten Ebene hinzuzufügen.

  4. Plugins sollten eine geeignete Funktion (z. B. manage_options) zum Hinzufügen der Einstellungsseite verwenden.

  5. Plugins sollten Optionen in einem einzigen Array speichern, anstatt mehrere Optionen für die Einstellungsseite zu erstellen. Die Verwendung der Einstellungs-API (siehe unten) würde dies handhaben.

  6. Plugins sollten die Einstellungen API verwenden (siehe unten) zu erhalten und speichern Formulareingabedaten anstatt auf $_POSTund $_REQUESTDaten direkt.

  7. Für Kontrollkästchen und wählen Sie die Optionen, Plugins sollte die Verwendung checked()und selected()Funktionen zur Ausgabe checked="checked"und selected="selected"jeweils.

  8. Plugins sollten alle nicht vertrauenswürdigen Daten validieren und bereinigen, bevor sie Daten in die Datenbank eingeben, und sollten alle nicht vertrauenswürdigen Daten entziehen, bevor sie in die Formularfelder "Einstellungen" und in die Vorlagendateien "Designs" ausgegeben werden:

  9. Plugins sollten esc_attr()für Texteingaben und esc_html()(oder esc_textarea()in WP 3.1) für Textbereiche verwendet werden.

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

  11. Es wird außerdem dringend empfohlen, dass Plugins die Einstellungs-API verwenden. Diese ist einfacher zu verwenden, sicherer und erledigt einen Großteil der harten Arbeit der Einstellungsseiten:

Ein gutes Tutorial zur Verwendung der Einstellungs-API finden Sie unter:

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

Chip Bennett
quelle
Und ich sollte hinzufügen: Wenn jemand etwas in der Liste vermisst, kommentieren Sie es bitte , damit ich es der Checkliste hinzufügen kann, um die Sicherheitsüberprüfung für Themen zu verbessern!
Chip Bennett
Wow, tolle Liste, danke. Ich frage mich, ob es sich lohnt, diese Frage zu einem Community-Wiki zu machen und jeden dieser Punkte zu einer eigenen Antwort zu machen, um eine bessere Diskussion und Ausarbeitung zu ermöglichen.
Goldenapples
Damit wäre ich einverstanden, aber ich möchte die Frage des ursprünglichen Posters nicht entführen (es sei denn, auf StackExchange wird so vorgegangen? Ich bin hier noch neu ...).
Chip Bennett
Ich weiß auch nicht ... überlasse es wohl dem Ermessen der Moderatoren. Dies scheint eine großartige Wiki-Frage zu sein, da die so wichtigen und bewährten Methoden immer noch erarbeitet werden. @Rarst?
Goldenapples
Ich könnte ggf. eine neue Frage erstellen?
Chip Bennett
11

Das hat zwei Aspekte:

  1. Grundprinzipien.

    • Was auch immer in die Datenbank geschrieben wird, sollte auf SQL-Injects überprüft werden.
    • Was auch immer auf dem Bildschirm gedruckt wird, sollte überprüft werden, dass es kein schädliches JavaScript druckt.
    • Wann immer jemand etwas tut, sollte überprüft werden, ob es seine Absicht war und er über entsprechende Fähigkeiten verfügt.
    • Es gibt viele, viele weitere Dinge, auf die Sie oder ich niemals nachdenken werden.
  2. Besonderheiten.

    • Modernes WordPress nimmt die Sicherheit ernst und möchte es Entwicklern leicht machen.
    • Für die meisten Dinge, die Sie tun möchten, gibt es also wahrscheinlich eine Möglichkeit, dies mit WP-APIs zu erledigen.
    • Was auch immer Sie tun, Ihr erster Schritt wäre es, die passende API zu finden und zu studieren.
    • Je weiter Sie von der gewöhnlichen und einfachen Funktionalität entfernt sind, desto komplexer werden die Dinge, die Sie studieren und implementieren müssen.
Rarst
quelle
1
  1. Fügen Sie defined('ABSPATH') or die('Access denied');bei jedem Plugin ein Skript hinzu, das von WordPress direkt verwendet wird
  2. Fügen Sie in jedem Verzeichnis eine leere Datei index.php hinzu
  3. Fügen Sie .htaccess im Plugin-Verzeichnis mit den erforderlichen Anweisungen hinzu, um den direkten Zugriff auf bestimmte Plugin-Dateien zu verhindern.
egor
quelle