Sicurezza Webapp2

11

Sto codificando un'applicazione web REST che gira su Google App Engine, autentica le richieste API ai dati privilegiati utilizzando sessioni dai cookie forniti da webapp2_extras.auth e webapp2_extras.security.

L'intero sito e tutti i punti utilizzano HTTPS.

Webapp2 gira in un "contesto di richiesta" che credo significhi che ogni richiesta che viene attraverso ha una sua discussione, ma mi chiedo qualcosa che sia probabilmente abbastanza specifico del codice e anche se ho scavato nel codice per capire, sono Non sono sicuro che sarei capace di mettere tutte le mie paure a riposo, quindi mi sto chiedendo qui.

La situazione è: I rig la richiesta http PATCH alle richieste "batch" ai metodi PUT, GET e DELETE per salvare su roundtrips client-server. Se si dice che il client ha molti oggetti da salvare sul server, può creare un PATCH con l'elenco jsonified delle richieste "sub" a

/user/dame_edna/objects

E la patch eseguirà l'iterazione dell'elenco e quindi farà le richieste in-app ai diversi punti , ad esempio una richiesta potrebbe essere:

method:delete point:/decorative_fans/small_dog_design

E il metodo patch costruirà un oggetto webapp2.Request che punta a

/user/dame_edna/objects/decorative_fans/small_dog_design

Riempirà vari campi (ma, soprattutto, per questa domanda, non i campi cookie o auth), e quindi istanzia il gestore richieste, in questo caso,

user.objects.decorative_fans.crud.responder

ed esegui quella richiesta nell'applicazione, senza un ritorno del client-server

Ecco dove mi perdo e cosa trovo interessante:

Il campo cookie della nuova richiesta è vuoto, ma la richiesta conosce in qualche modo il token di autenticazione e la sessione della richiesta di origine. Si noti che la richiesta PATCH originale è arrivata a /user/dame_edna e, per fare in modo che quella richiesta PATCH qui, fosse necessaria una sessione autenticata per l'utente "dame_edna", ma la mia preoccupazione è: come fanno i sottorequisiti che faccio nel l'applicazione sa che sono stati verificati come "dame_edna"?

Ma lo fanno. Ho scaricato il token di autenticazione per la richiesta DELETE e si è verificato come lo stesso token di autenticazione che ha autenticato, ad esempio, dame_edna sulla richiesta PATCH originale, anche se non l'ho copiato o impostato in alcun modo

Mi sembra strano che webapp2 copi copia su questi fondamentali di autenticazione, o che diventino semplicemente accessibili all'oggetto Richiesta appena creato, dal momento che la creazione di richieste in-app come ho fatto io è, secondo i documenti, usato principalmente per i test unitari.

Voglio chiarire ogni dubbio su questo prima di andare avanti con l'applicazione, dal momento che è un'area piuttosto importante che non voglio rovinare, e non posso ignorarlo senza sapere esattamente cosa sta succedendo.

La guida è apprezzata per una spiegazione di come la sub, richiesta in-app conosce l'originale, lo stato autentico delle richieste HTTP e se l'utilizzo di sub-richieste in questo modo sarà "a prova di proiettile" come le sessioni autografate originali fornito da webapp2_extras

    
posta Cris Stringfellow 21.04.2013 - 20:11
fonte

1 risposta

1

Alcune cose che mi sono venute in mente.

Una sessione TCP (che è la base per le richieste HTTP) è identificata dall'IP: sourceport su IP: destinationport e considerata una "sessione". La richiesta HTTP non è diversa e identifica le sessioni in base a questi parametri.

Dato che hai indicato di provare a salvare i roundtrip del server client, questa è una vera affermazione. Finché il client non invia un TCP-RST o TCP-FIN l'identificatore di sessione per l'IP: la coppia di porte continuerà a essere riutilizzata. Oppure, fino a quando la connessione scade e il server restituisce un TCP-RST. Solo allora la gestione della sessione verrà rinnovata.

Inoltre, i server e i framework delle applicazioni possono anche mantenere il proprio stato di sessione.

Quindi in pratica, finché non si ripristina la connessione, gli stati di sessione tcp, http e superiori rimarranno intatti. È (altamente) dipendente dal tuo specifico set-up e configurazione in atto.

Dovresti scrivere del codice per convalidare ciò che sta realmente accadendo.

    
risposta data 19.09.2014 - 16:48
fonte

Leggi altre domande sui tag