I client possono eseguire il mio python CGI a piacimento?

2

Ho un sito in cui il database principale è interagito con gli script python situati in public_html\cgi-bin\ . Per eseguire comandi, vari script JavaScript, situati in \public_html\scripts\ , usa jQuery per chiamare i diversi script python.

Ho alcuni script python, come quello usato per cancellare e aggiungere voci limitate agli utenti loggati tramite account .htaccess. Gli script CGI e JavaScript che interagiscono con essi, tuttavia, si trovano anche nelle stesse cartelle. È pericoloso? I client possono in qualche modo chiamare i miei script CGI Python con le proprie variabili CGI, o eseguire i miei script JavaScript per farlo per loro?

Come posso mantenere questi script al sicuro, in caso affermativo?

    
posta FreeSnow 08.05.2013 - 11:31
fonte

2 risposte

3

Se il browser di un utente è in grado di chiamare (inviare richiesta HTTP a) i tuoi script Python (con o senza AJAX), allora supponi che un utente autenticato sarà in grado di inviare richieste HTTP personalizzate, incluse le variabili (parametri) che vogliono .

Sempre presuppone che non solo i tuoi utenti siano in grado di vedere il tuo codice JavaScript, ma sono anche in grado di modificarlo, sovrascriverlo o disabilitarlo completamente.

Mettere i tuoi file HTML, JS o Python nella stessa cartella (directory) non è un problema. Ma ti consiglierei di spostare gli script che contengono informazioni sensibili (come le credenziali del database) sopra la tua directory public_html (la tua www root).

    
risposta data 08.05.2013 - 12:15
fonte
2

Come regola generale, non fidarti mai dell'input dell'utente , anche se sei sicuro che verrà solo da utenti autenticati. Se uno qualsiasi degli script CGI è rivolto a Internet (ovvero può essere eseguito come conseguenza diretta delle richieste degli utenti, siano essi le chiamate jQuery ajax o l'accesso regolare alla pagina), è necessario disinfettare tutti i campi di input e controllare l'autenticazione e l'autorizzazione corrette prima di eseguire qualsiasi azione sensibile.

dettagli:

Se il server web è configurato per l'esecuzione automatica di script nella cartella cgi-bin in risposta a un indirizzo URL corrispondente, tutti gli script all'interno di tale cartella sono suscettibili di essere richiamati dagli utenti, in modi che non è possibile prevedere o controllare. Se si dispone di script che non devono essere chiamati in questo modo, è necessario memorizzarli altrove o configurare il server Web in modo che non li esegua automaticamente (ad esempio, autorizzando gli URL che corrisponderanno direttamente alle risorse del server).

(In caso di dubbi sul fatto che uno script particolare sia o non sia esposto, basta sostituirlo con uno innocuo e provare a chiamarlo tramite l'URL corrispondente)

Come per gli altri script (quelli che sono destinati ad essere chiamati dall'esterno), hai ancora i problemi di non avere il controllo di chi li chiamerà, in quali circostanze verranno chiamati, e se verranno chiamati o meno con i parametri corretti. potresti provare a inserire nella whitelist gli indirizzi IP o controllare il referer HTTP, ma questi non sono a prova di bomba. Il codice JavaScript che li chiama può sempre essere modificato dal client, e banalmente così (ad esempio, modificando la pagina live usando bookmaklet), quindi non c'è modo di sapere che il codice che ha preparato quelle richieste non è stato controllato, anche se corrono nel tuo contesto della pagina. E l'utente può sempre modificare i parametri dello script su valori arbitrari, sia utilizzando il codice in modo improprio sia utilizzando il proprio (o modificando direttamente la richiesta HTTP, tra l'altro).

Per questi motivi, per essere veramente sicuri, devi sempre eseguire una convalida completa della richiesta prima di eseguirla: usa un CSRF token , autentica l'utente che effettua la richiesta (utilizzando un cookie di sessione sicuro per esempio - ma anche l'autenticazione .htaccess dovrebbe funzionare), controlla l'autorizzazione dell'utente entrambi per eseguire quell'azione e utilizzare il fornito i parametri e controllare tutti i parametri per i tipi / sintassi corretti e valori validi. Potrebbe sembrare molto lavoro, ma una volta che ci si abitua a queste pratiche diventa rapidamente di natura secondaria (e dal momento che stai usando Python, un consiglio in più: cerca decoratori se non li conosci al più presto, renderà molto più semplice il compito di applicare molte delle suddette misure attraverso diverse funzioni / script).

    
risposta data 08.05.2013 - 12:17
fonte

Leggi altre domande sui tag