it-swarm.it

Come sviluppare l'estensione Joomla sicura?

Prima di scrivere la mia prima estensione, vorrei capire come progettarla il più invulnerabile possibile.

Esiste una serie di regole per scrivere l'estensione sicura di Joomla?

Posso solo immaginare SQL injection come possibile minaccia, quindi so che l'input del modulo non può mai essere inserito direttamente nel comando SQL "così com'è".

Quali sono gli altri vettori di attacco di cui dovrei essere a conoscenza quando scrivo un modulo o plugin personalizzato?

7
miroxlav

Una cosa principale che hai sottolineato è SQL Injection. Questa è una cosa a cui alcune persone che ho visto sembrano mancare completamente e iniziano a sviluppare utilizzando non standard di codifica Joomla e iniziano a scrivere code SQL usando mysql_* comandi.

La seconda cosa che ho menzionato nel primo punto, che è sempre fedele agli standard di codifica Joomla. L'unica volta che non dovresti farlo è quando Joomla non fornisce un'alternativa.

In terzo luogo, se la tua estensione crea una cartella o un file, assicurati di dare loro le autorizzazioni corrette e non iniziare a creare la cartella chmod 777. Questo è il motivo esatto per cui K2, che è una delle estensioni più popolari là fuori, è stata considerata vulnerabile e rimosso temporaneamente da JED.

Usa sempre i token con i moduli. Ciò garantirà che non possano essere eseguiti attacchi non autorizzati da altri siti. Per ulteriori informazioni al riguardo, dai un'occhiata a quanto segue:

http://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms

Se non sei sicuro che qualcosa abbia già eseguito alcuni test, prova a passare a Code Review Stackexchange poiché potrebbe esserci qualcuno disposto a controllare il tuo codice per te.

Una cosa che puoi fare è dare un'occhiata a Elenco delle estensioni vulnerabili per vedere le estensioni che sono state temporaneamente (fino a quando risolte) rimosse dalla Directory delle estensioni di Joomla perché non sono sicure.

Spero che questo ti dia un po 'di intuizione e buona fortuna con la tua prima estensione

8
Lodder

Seguendo la documentazione ufficiale, ecco alcuni passaggi sull'argomento Linee guida per la codifica sicura :

  • Convalida tutti i dati che ricevi dalla richiesta (POST, GET, COOKIES, ecc.). Non fidarti dell'utente ed essere il più rigoroso possibile. Se ti aspetti un integer, non consentire l'accettazione di un string.

  • Caricamenti di file - evita, quando possibile, di accettare file su pagine Web pubbliche. Se è necessario convalidare le meta informazioni sul file ed eseguire tutti i possibili controlli.

  • Creazione di query SQL : consente di capire come funzionano le iniezioni SQL, ma anche come gestire gli errori del database. Più errori vengono visualizzati, maggiori sono le informazioni fornite sulla struttura del database. Idealmente si registrano errori ma non li si visualizza.

  • Proteggi i moduli usando un token

7
Valentin Despa

È per lo più sicuro per la maggior parte delle estensioni, tuttavia sii molto cauto su tutto ciò che potrebbe essere necessario per salvare/modificare i file, un filtro o una convalida impropri possono creare un punto di ingresso.

Fintanto che usi correttamente l'API di JDatabase, dovresti essere sicuro anche dall'iniezione sql. Puoi vedere com_content o plg_system_loadpositon in un'installazione Joomla per aiutare a capire alcuni dei punti più fini delle varie API Joomla (poiché la documentazione è un po 'difficile da seguire).

Usando anche le API se falliscono e viene usata una sorta di vulnerabilità, la correzione probabilmente finirà per essere un aggiornamento di base (se il suo JDatabase, posso immaginare una versione di Joomla entro un'ora se la sua scoperta: D), piuttosto che un aggiornamento alla tua estensione.

Questo è un grosso difetto dell'open source è che chiunque abbia intenzione di fare del male ha tutte le informazioni necessarie per farlo. Se si tratta di un'estensione chiusa (non disponibile pubblicamente) è probabile che non ci sarà mai un problema.

Infine, più semplice è l'estensione (meno codice), più è probabile che sia "invulnerabile". Man mano che un'estensione cresce, ci sono molti più posti in cui può accadere un leggero errore nel creare un punto di ingresso.

4
Jordan Ramstad