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).