Quali sono i difetti di sicurezza comuni che devo cercare? [chiuso]


16

Come aspirante sviluppatore di plugin WP, quali sono i principali difetti / buchi di sicurezza che dovrei cercare?

Sto per creare un nuovo plugin con un pannello di configurazione (ad es. Campi di input e altro). Di cosa dovrei preoccuparmi?

Ad esempio, la sanificazione dei dati è un grosso problema poiché si trova nell'area / wp-admin /? Qualcuno malizioso potrebbe colpire direttamente la mia pagina del plug-in e inviare richieste POST o qualcosa del genere?

Grazie!

Risposte:


16

Ecco un elenco di controllo modificato, basato sulle mie impostazioni (work-in-progress) correnti / elenco di controllo sulla sicurezza dei dati utilizzato per la revisione dei temi (i principi non dovrebbero essere diversi per i plugin rispetto a quelli dei temi):

  1. I plugin dovrebbero precedere tutte le opzioni, funzioni personalizzate, variabili personalizzate e costanti personalizzate con plugin-slug.

  2. I plug-in dovrebbero implementare deliberatamente le pagine Opzioni plug-in e Impostazioni plug-in, anziché fare affidamento su script copia e incolla da esercitazioni su siti Web, come quelli di seguito, che sono obsoleti e non includono un'adeguata sicurezza dei dati:

  3. I plug-in dovrebbero usare la add_options_page()funzione per aggiungere la pagina delle impostazioni del plug-in al Settingsmenu, anziché utilizzare add_menu_page()per aggiungere un menu di livello superiore.

  4. I plugin dovrebbero usare una capacità appropriata (ad es. manage_options) Per la possibilità di aggiungere la pagina delle impostazioni.

  5. I plugin dovrebbero salvare le opzioni in un singolo array, piuttosto che creare più opzioni per la pagina delle impostazioni. L'uso dell'API delle impostazioni (vedi sotto) lo gestirà.

  6. I plug-in dovrebbero utilizzare l'API delle impostazioni (vedi sotto) per ottenere e salvare i dati di input del modulo anziché fare affidamento $_POSTe $_REQUESTdati direttamente.

  7. Per le caselle di controllo e selezionare le opzioni, i plugin dovrebbero usare le funzioni checked()e selected()per l'output checked="checked"e selected="selected", rispettivamente.

  8. I plug-in dovrebbero convalidare e disinfettare tutti i dati non attendibili prima di immettere i dati nel database e dovrebbero evitare tutti i dati non attendibili prima di essere emessi nei campi del modulo Impostazioni e prima di essere emessi nei file del modello del tema:

  9. I plugin dovrebbero usare esc_attr()per input di testo e esc_html()(o esc_textarea()in WP 3.1) per textareas.

  10. I plug-in dovrebbero fornire esplicitamente il controllo nonce della pagina Impostazioni, se non utilizzano l'API Impostazioni:

  11. Si consiglia inoltre ai plug-in di utilizzare l'API delle impostazioni, che è più facile da usare, più sicura e si occupa di gran parte del duro lavoro delle pagine delle impostazioni:

Per una buona esercitazione sull'uso dell'API delle impostazioni, vedere:

Se vuoi dare un'occhiata a un tema con una pagina di impostazioni del tema sicura e ben codificata, dai un'occhiata a questo tema:
http://wordpress.org/extend/themes/coraline


E dovrei aggiungere: se qualcuno vede qualcosa che manca dall'elenco, si prega di commentare , in modo da poterlo aggiungere all'elenco di controllo, per aiutare a migliorare la revisione della sicurezza per i temi!
Chip Bennett,

Caspita, ottima lista, grazie. Mi chiedo se valga la pena trasformare questa domanda in un wiki della comunità e rendere ciascuno di questi punti la propria risposta per consentire una migliore discussione ed elaborazione?
goldenapples,

Starei bene, ma non voglio dirottare la domanda del poster originale (a meno che non sia così che si fanno le cose su StackExchange? Sono ancora nuovo qui ...).
Chip Bennett,

Neanch'io ... lo lascio alla discrezione dei moderatori, immagino. Sembra che farebbe una grande domanda sulla wiki, dato che le sue pratiche così importanti e importanti stanno ancora lavorando. @Rarst?
goldenapples,

Potrei creare una nuova domanda, se necessario?
Chip Bennett,

11

Ci sono due aspetti di questo:

  1. Principi di base.

    • Qualunque cosa sia scritta nel database dovrebbe essere controllata per gli iniezioni SQL.
    • Qualunque cosa sia stampata sullo schermo dovrebbe essere controllata che non stampa JavaScript dannoso.
    • Ogni volta che qualcuno fa qualcosa, dovrebbe essere verificato che era sua intenzione farlo e che ha le capacità appropriate.
    • Ci sono molte altre cose che tu o io non penserai mai di controllare.
  2. Specifiche.

    • Il moderno WordPress prende sul serio la sicurezza e mira a renderlo facile per gli sviluppatori.
    • Quindi per la maggior parte delle cose che vuoi fare c'è molto probabilmente un modo per farlo con le API WP.
    • Quindi, qualunque cosa tu stia facendo, il primo passo sarebbe quello di mettere a punto e studiare l'API appropriata.
    • Quanto più ci si avvicina alla funzionalità comune e semplice, tanto più le cose complesse saranno necessarie per studiare e implementare.

1
  1. Aggiungi defined('ABSPATH') or die('Access denied');allo script di ogni plugin utilizzato direttamente da wordpress
  2. Aggiungi un file index.php vuoto in ogni directory
  3. Aggiungi .htaccess nella directory dei plugin con le istruzioni necessarie per impedire l'accesso diretto a determinati file dei plugin.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.