Quali sono i possibili problemi di sicurezza quando si esegue un sistema di pagamento in Javascript?

0

Sono abbastanza nuovo per JS e attualmente sto facendo un semplice sistema di check-out passo-passo usando puramente JS e alcuni Ajax e PHP. Mi sono chiesto quali possibili problemi di sicurezza potrebbero comportare con un simile sistema.

Il modo in cui funziona è il seguente:

  1. Seleziona la voce, premi Avanti (nascondi il div attuale, mostra il div successivo)
  2. Usa incremento / decremento e scegli l'importo per l'oggetto, premi Avanti (nascondi il div attuale, mostra il div successivo)
  3. Come 2 solo con un altro elemento
  4. Come 2 e 3 con un altro elemento
  5. Genera fattura
  6. Procedi al pagamento (compila i dettagli della carta e paga utilizzando l'API gateway della carta di credito esterna)

Ora, la cosa che mi dà fastidio è il numero 6. Qual è qualcuno che modifica il JS e invia valori diversi al processore di pagamento esterno? È possibile? E se lo è, come posso assicurarmi che ciò non accada?

Con il mio Javascript uso diversi valori che prelevo da una semplice tabella del mio database, come il prezzo per gli articoli e il costo di spedizione. Ma io uso questi valori direttamente nel mio file Javacsript per i calcoli e generare la fattura. Ho la sensazione che mi sto avvicinando al problema in modo sbagliato. C'è una possibilità che il "client" possa cambiare anche i calcoli?

Come faccio a fare in modo che, una volta generata la fattura, i valori corretti vengano utilizzati nel calcolo del prezzo totale in modo tale che il prezzo corretto venga inviato attraverso il gateway di pagamento, a prescindere dal fatto che qualcuno faccia semplicemente "front-end" numeri visualizzati?

Nota Mi è stato detto che questo sarebbe il posto migliore per pubblicare questa domanda, per favore fatemi sapere se non lo è e lo rimuoverò.

Se vuoi vedere il checkout che ho fatto, eccolo qui (non ho ancora installato l'API del gateway di pagamento perché sono preoccupato per la sicurezza): link

Grazie: -)

    
posta nTuply 08.04.2016 - 21:43
fonte

2 risposte

2

Il client dell'utente deve inviare solo l'elenco degli articoli (e quantità) dell'ordine al server. Tutto il resto dell'ordine, in particolare l'intero costo dell'ordine, dovrebbe essere calcolato sul server, in base all'elenco degli articoli ordinati. Se l'utente si diverte con il JavaScript che invia gli elementi ordinati dall'utente, non c'è niente di veramente sbagliato in questo: è equivalente all'utente che ha normalmente ordinato alcuni oggetti diversi.

Facoltativamente, potresti avere il client anche calcolare il totale dell'ordine, puramente come una comodità UX per l'utente. Questo valore deve essere eliminato quando si invia l'ordine al server, poiché l'utente potrebbe averlo modificato dopo che è stato calcolato dallo script.

    
risposta data 08.04.2016 - 21:51
fonte
0

What is someone edits the JS and sends different values to the external payment processor? Is that possible? And if it is, how to I securely make sure this does not happen?

È possibile. Ecco un modo in cui PayPal lo gestisce: Il codice del pulsante di pagamento è crittografato prima di essere visualizzato sul sito web del commerciante. Potresti fare lo stesso o utilizzare un carrello degli acquisti e un fornitore di gateway di pagamento che offre questa funzionalità.

Withing my Javascript I make use of several values that I fetch from a simple table from my database, such as price for the items and shipping cost. But I use these values straight in my Javacsript file for the computations and generating the invoice. I have a feeling that I'm approaching the problem in a wrong way. Is there a possibility that the "client" can change the computations as well?

Sì, questo è possibile. Lo scorso fine settimana ero a una conferenza dove uno sviluppatore stava discutendo su come ha rivelato la vulnerabilità a un client sul proprio server. Ecco un articolo che ho trovato online parlando dello stesso problema: Vulnerabilità nella manipolazione dei prezzi nelle piattaforme di e-commerce

How do I make sure that once the invoice is generated, the correct values are used in calculating the total price so the proper price is sent through the payment gateway, no matter if someone simply messes up with the "front-end" numbers that show up?

Non sono sicuro di come verificare che sia corretta la prima volta che viene generata la fattura oltre all'utilizzo di pulsanti di pagamento che inviano informazioni crittografate al server per la generazione di fatture . Se si utilizza una crittografia sufficientemente potente, sarà difficile per un utente malintenzionato utilizzare le informazioni non valide per generare un ordine.

In realtà non diventa un problema finché non viene consegnato qualcosa. Quindi, se non sai come configurare un sistema di shopping crittografato, un'attività più semplice consiste nel rendere gli ordini in sospeso per impostazione predefinita e nell'esecuzione di uno script lato server che viene eseguito sul database degli ordini dopo la transazione per verificare che i prezzi pagati corrispondano al prezzo effettivo per ogni oggetto. Puoi eseguire questo script con le informazioni generate dalla cronologia degli ordini del tuo account commerciante dopo che il pagamento è stato elaborato. Come scrivere lo script va oltre lo scopo di security.stackexchange.

Ecco alcuni link correlati su sicurezza JavaScript e vulnerabilità dell'e-commerce:

risposta data 08.04.2016 - 22:37
fonte

Leggi altre domande sui tag