it-swarm-eu.dev

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

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

  1. Il codice lato server crea un array todo.
  2. Serializza l'array su JSON
  3. Esegui il ciclo tra array di oggetti JSON e visualizza l'elenco di todo.

Ora devo modificare un determinato elemento da fare e aggiornarlo. È fatto così:

  1. Filtra il mio array di oggetti JSON per ID confrontando l'id da fare derivante dal valore dell'attributo ID HTML per ottenere l'oggetto.
  2. Uso AJAX per passare l'oggetto a INSERT.PHP pagina.
  3. Nel INSERT.PHP pagina Deserializzo JSON in modo da poterlo aggiornare nel database.

Problema: L'inserimento dell'ID elemento da fare nell'attributo ID HTML causerà un difetto nel sistema perché l'utente avrà la possibilità di modificare l'ID elemento da fare utilizzando la console di sviluppo del browser.

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

30
user3079341

La maggior parte dei dettagli della tua domanda sono irrilevanti. Che l'ID sia memorizzato in un attributo ID HTML, gli strumenti di sviluppo, che stai usando jQuery ... Niente di tutto ciò conta davvero.

L'unica cosa che conta è che hai un endpoint sul tuo server chiamato insert.php. Un utente malintenzionato può inviare qualsiasi richiesta desideri a tale endpoint, indipendentemente dall'aspetto del codice client. Le protezioni contro le persone che provano a fare cose che non possono fare devono essere sul server e non sul client.

Quindi guarda il tuo PHP. Verifica che l'input sia nel formato previsto? Verifica che l'utente abbia il diritto di modificare il particolare elenco di cose da fare? In caso contrario, correggilo. Ricorda che i controlli di convalida e autorizzazione devono essere eseguiti sul server per avere un valore di sicurezza.

In particolare, se gli utenti dovrebbero essere autorizzati a modificare todos di loro proprietà, è necessario eseguire le seguenti operazioni in insert.php:

  • Eseguire una query sul database per ottenere il proprietario del todo che viene modificato.
  • Ottieni l'id per l'utente che effettua la richiesta.
  • Verifica che siano uguali e nega se non lo sono.
160
Anders

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

Devi considerare ciò che stai convalidando: in caso di un elenco di cose da fare, assicurati solo che l'ID che hanno inviato abbiano le autorizzazioni pertinenti per modificare/ecc. Se qualcuno invia manualmente richieste al tuo script insert.php, dovrebbe essere resiliente contro qualunque cosa tu abbia bisogno di essere (se è, se appartiene a loro/dovrebbe avere il permesso di modificarlo/se la voce dell'elenco todo è bloccato/ecc.).

In nessun caso dovresti fidarti dei dati che il client/browser ti sta inviando e convalidare tutto il server. Potresti anche considerare quindi 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 niente al riguardo.

3
Jack