Domanda

Scopri questa pagina da il New York Times:

  

http://homedelivery.nytimes.com/HDS/learnMorePopUp.do   modalità ? = common.learnMorePopUp
   & amp; productId = NDS
   & amp; ProdRate = 7.40

Sono stato sorpreso di vedere che quando ho modificato manualmente il parametro prodRate , la pagina è stata aggiornata:

  • Il tasso di abbonamento introduttivo.
  • Il tasso di abbonamento normale.

Provalo tu stesso! Ora, non ho fatto molto sviluppo web, ma so che probabilmente non dovrebbe succedere. Quindi mi chiedo:

  • Che tipo di implementazione causerebbe questo comportamento?
  • Come modificheresti la pagina per nascondere tali parametri sensibili all'utente finale?
È stato utile?

Soluzione

Potresti voler riformulare la tua domanda, poiché le uniche risposte che posso concepire non sono troppo illuminanti:

D: Che tipo di implementazione causerebbe questo comportamento?
A: Uno in cui l'input dell'utente è autorizzato a controllare il comportamento interno e attendibile. Se stai chiedendo " perché qualcuno dovrebbe fare questo " ;, di solito l'ho visto come un malinteso. L'autore del codice generalmente non si rende conto che l'utente può (a) controllare il valore e / o (b) anche scoprire che esiste. Molto spesso, l'ho visto implementato come un reindirizzamento: fai clic su un pulsante, il server determina l'importo, quindi reindirizza il browser a una nuova pagina che mantiene il valore

D: Come modificheresti la pagina per nascondere all'utente parametri così sensibili?
A: Non memorizzare il valore in modo che sia modificabile dall'utente finale. Se hai spazio di archiviazione disponibile sul server (come un motore Servlet), memorizzalo nel contesto della sessione. Se non si dispone di un buon meccanismo di sessione, è possibile memorizzarlo in un cookie firmato o HMAC.

Altri suggerimenti

Probabilmente stanno solo leggendo il valore dalla stringa di query per scopi di visualizzazione. Dubito fortemente (o meglio, spererei davvero) che l'eventuale elaborazione dell'ordine non si basi su quel valore, e piuttosto da una ricerca che utilizza l'ID prodotto.

Beh, hai già provato a ordinarlo? Potrebbe convalidare l'input sul back-end.

Per quanto riguarda le altre opzioni, avrebbero potuto prendere in considerazione la possibilità di pubblicare le informazioni o di inserire le informazioni in un cookie. Né sono esattamente infallibili. Non puoi ottenere una nuova finestra con un post e un utente può disattivare i cookie.

Non puoi ordinare da quella pagina, quindi non vedo un buco di sicurezza qui. Sì, è sdolcinato, ma sarei molto più preoccupato se il flusso dell'ordine reale fosse così mal costruito. Rende facile aggiornare la tariffa in un posto e passare semplicemente il valore, così posso vedere come è successo.

Abbiamo alcune pagine di valutazione che fanno praticamente la stessa cosa. Non sono collegati al flusso di acquisto effettivo, quindi i parametri vanno bene. Se il client vuole confondersi modificando un URL, così sia ... il flusso dell'ordine reale è tutto guidato dal database e le modifiche dell'utente non sono mai attendibili.

Ho trovato tutti i tipi di cattive pratiche come questa. Ho visto siti Web passare intere query SQL in Querystring, che vengono quindi eseguite . Ricordo anche di aver trovato un negozio online che ha superato i prezzi in querystring. Ne ho cambiato uno in un valore negativo e, sicuramente, alla cassa il prezzo era meno! Non sono andato oltre, tecnicamente è una frode e non vale la pena rischiare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top