Come faccio a essere sicuro che l'utente autenticato esegua un'azione?

0

Nella mia app (e nel sito Web) un utente accede con la propria e-mail per eseguire azioni come fare un commento sul sito Web sotto il loro nome. Ovviamente è importante che le persone malintenzionate non possano fingere di essere questo utente e inviare commenti a loro nome.

Ho letto che qualsiasi azione che modifica lo stato non dovrebbe mai essere eseguita da una richiesta GET. Che cosa impedisce a qualcuno di creare una richiesta POST utilizzando l'indirizzo email dell'utente autenticato? È possibile che qualcuno comunichi al mio sito Web di eseguire una richiesta POST e spoofare gli input?

Nel mio database sto pensando di memorizzare qualche tipo di token per convalidare un utente (chiamiamo il token authentication_token ). Ad esempio, ogni volta che un utente effettua l'accesso, authentication_token viene aggiornato nel database per l'utente e rinviato per essere archiviato in una SESSIONE sul sito Web o nell'app. Ora ogni volta che viene fatta una richiesta (per esempio facendo un commento), la SESSIONE memorizzata viene controllata nel database per assicurarsi che corrisponda prima di procedere al commento.

  1. L'utente preme il pulsante "Invia commento" sul sito web o nell'app
  2. La richiesta POST viene inviata con gli input user_email , comment e authentication_token
  3. SELECT authentication_token FROM Users_Table WHERE email = user_email
  4. Passa al passaggio 5 solo se il authentication_token richiamato authentication_token è stato inviato nella richiesta POST.
  5. Crea il commento.

È un modo sicuro per convalidare un'azione? Il trasferimento di authentication_token è sicuro su https? Grazie per l'aiuto.

    
posta user3451821 30.11.2017 - 06:45
fonte

1 risposta

4

In my app (and website) a user logs in with their email to perform actions like making a comment on the website under their name. Obviously it is important that malicious people cannot pretend to be this user and send comments on their behalf.

I read that any state changing actions should never be performed by a GET request. What is to stop someone from creating a POST request using the authenticated user's email address? Is it possible for someone to tell my website to perform a POST request and spoof the inputs?

Sì, un utente malintenzionato può certamente creare qualsiasi richiesta che desidera.

Sei sulla strada giusta, ma quello che hai fatto è reinventare sessioni . L'utente fornisce le informazioni di autenticazione (generalmente un nome utente e una password), crea una sessione e le invia come valore del cookie, quindi ogni richiesta successiva viene fornita con l'id della sessione e viene verificata sul database della sessione per sapere chi richiesta è arrivata.

Is transfer of authentication_token safe over https?

Questo è un attacco di furto di sessione, reso popolare da Firesheep. L'uso di https è la mitigazione generalmente accettata. Gli attacchi tendono a cercare di evitare https, ad esempio tramite sslstrip, quindi è necessario attenersi alle best practice di https, come HSTS.

    
risposta data 30.11.2017 - 07:13
fonte

Leggi altre domande sui tag