I dati importanti possono essere modificati dalla console per sviluppatori. Cosa dovrei fare?

30

Scenario: ho un elenco di cose da fare generato con JavaScript usando JSON che è stato codificato sul lato server. Ho inserito l'id dell'oggetto todo nell'attributo ID HTML. Quindi il processo va in questo modo:

  1. Il codice lato server crea un array todo.
  2. Serializza l'array su JSON
  3. Passa attraverso la matrice di oggetti JSON e visualizza la lista delle cose da fare.

Ora devo modificare un determinato elemento delle cose da fare e aggiornarlo. È fatto in questo modo:

  1. Filtro il mio array di oggetti JSON di id confrontando l'ID to-do proveniente dal valore dell'attributo id HTML per ottenere l'oggetto.
  2. Uso AJAX per passare l'oggetto alla pagina INSERT.PHP .
  3. Nella pagina INSERT.PHP ho deserializzato il JSON in modo da poterlo aggiornare nel database.

Problema: L'inserimento dell'ID elemento to-do nell'attributo id HTML causerà un difetto nel sistema perché l'utente avrà la possibilità di modificare l'id oggetto to-do utilizzando lo sviluppatore del browser console.

Domanda: C'è un modo sicuro per farlo? Sto semplicemente sbagliando o è una cosa normale da fare?

    
posta user3079341 14.12.2017 - 13:21
fonte

2 risposte

161

La maggior parte dei dettagli nella tua domanda sono irrilevanti. Che l'ID è archiviato in un attributo id HTML, gli strumenti di sviluppo, che stai usando jQuery ... Niente di tutto ciò importa davvero.

L'unica cosa che conta è che hai un endpoint sul tuo server chiamato insert.php . Un utente malintenzionato può inviare qualsiasi richiesta che desidera a quell'endpoint, indipendentemente dal codice del client. Le protezioni contro le persone che cercano di fare cose che non sono autorizzati a fare devono essere sul server e non sul client.

Quindi guarda il tuo codice PHP. Verifica che l'input sia nel formato previsto? Verifica che l'utente abbia il diritto di modificare la particolare lista delle cose da fare? Se no, aggiustalo. E ricorda che i tuoi controlli di convalida e autorizzazione devono essere eseguiti sul server per avere qualsiasi valore di sicurezza.

In particolare, se gli utenti devono essere autorizzati a modificare tutti i contenuti che possiedono, devi eseguire quanto segue in insert.php :

  • Interrogare il database per ottenere il proprietario del todo che si sta modificando.
  • Ottieni l'ID per l'utente che effettua la richiesta.
  • Verifica che siano uguali e nega se non lo sono.
risposta data 14.12.2017 - 13:47
fonte
3

Le cose relative a AJAX che hai descritto non hanno molta importanza, non dovresti avere fiducia nel client (browser) e, piuttosto, lo script insert.php dovrebbe convalidare le informazioni.

Devi considerare quello che stai convalidando - in un caso di una lista di cose da fare, assicurati solo che l'ID che hanno inviato, abbiano le autorizzazioni rilevanti per modificare / etc. Se qualcuno invia manualmente richieste al tuo script insert.php, dovrebbe essere resiliente contro qualunque cosa tu abbia bisogno di essere (se è questo, se appartiene a loro / dovrebbero avere il permesso di modificarlo / se l'elemento di elenco di cose da fare è bloccato / etc).

Non dovresti in nessun caso fidarti dei dati che il client / browser ti sta inviando e convalidare tutto il server. Potresti anche prendere in considerazione allora piuttosto che avere uno script insert.php che sembra semplicemente inserire un oggetto JSON, potresti creare un'API per le tue richieste AJAX piuttosto che inserire semplicemente oggetti JSON senza convalidare nulla a riguardo.

    
risposta data 18.12.2017 - 01:40
fonte

Leggi altre domande sui tag