PHP Plugin Security

0

Ho lavorato su un sistema di automazione domestica ora per poco più di un anno e ho aggiunto un sistema di plugin ad esso. Ho anche aggiunto così altri utenti possono inviare i loro plugin e se li accetto, vengono automaticamente aggiunti a tutti i miei sistemi collegati a Internet. Ora non c'è niente di sbagliato con il sistema di plugin stesso, ma sono molto preoccupato per quanto riguarda la sicurezza.

Voglio comunque che il sistema di plugin sia in grado di eseguire il normale codice PHP e fare ciò che il plugin doveva fare, ma non voglio codice come ad esempio:

echo file_get_contents("../inc/db.php");

per funzionare. Voglio che il plug-in sandbox sia in grado di funzionare come un normale plug-in e sia comunque limitato a non toccare o leggere nessuno dei file su cui è in esecuzione il sistema.

Il motivo per cui mi chiedo è perché voglio che l'utente collauda il suo plugin prima di sottoporlo ovviamente ma ho paura che se lascio che l'utente esegua il codice PHP da solo, potrebbe compromettere il sistema.

È possibile risolvere questo in qualche modo? Se aiuta il plugin è in esecuzione in una cartella diversa rispetto al resto dei file.

Anche

È possibile limitare in modo che il plugin non possa eseguire determinate funzioni come shell_exec, exec, passthru, system senza disabilitarlo completamente in php.ini?

    
posta user3885139 14.02.2015 - 00:43
fonte

2 risposte

2

La risposta breve è che non sarai in grado di raggiungere le tue esigenze.

Una risposta più lunga è che forse potresti scrivere il tuo pre-processore per scansionare un file inviato per cose che non ti piacciono, ma questo è davvero complesso. Un approccio alternativo sarebbe implementare il plug-in su un gestore php secondario con un'impostazione di disable_functions ini molto ampia in esecuzione in un contenitore (idealmente un server separato) e accedere al plugin come una chiamata al servizio web. Ma sto saltando una quantità enorme di dettagli qui che devi veramente capire prima che questo sia comunque sicuro - e dal modo in cui hai posto la domanda, penso che tu abbia molto da imparare prima Saresti in grado di fare una buona pugnalata (c'è molto di più delle funzioni che hai elencato che devono essere disabilitate).

    
risposta data 14.02.2015 - 02:21
fonte
1

Per davvero "sandbox" i tuoi plugin dall'applicazione / sistema, penso che tu abbia bisogno di implementare un'API che consente solo l'accesso a determinati dati delle applicazioni e limitare le funzioni php che non vuoi che i plugin utilizzino.

Poiché utilizzi PHP, c'è il pacchetto php-fpm che consente a di eseguire più istanze di php (anche se diversi utenti) . Queste istanze possono avere impostazioni ini separate che consentono di eseguire plug-in come utente con privilegi ridotti con impostazioni php_admin strongmente limitate e connettersi internamente all'API dell'applicazione.

Questo naturalmente aggiungerà inizialmente molto lavoro, ma ne varrebbe la pena dato che la sicurezza è importante per te.

    
risposta data 14.02.2015 - 10:33
fonte

Leggi altre domande sui tag