¿Cuáles son los posibles problemas de seguridad al realizar un sistema de pago en Javascript?

0

Soy bastante nuevo en JS y actualmente estoy realizando un sencillo sistema de pago por pasos utilizando puramente JS y algunos Ajax y PHP. Me he estado preguntando acerca de los posibles problemas de seguridad que podrían plantearse con este sistema.

La forma en que funciona es la siguiente:

  1. Seleccione un elemento, presione Siguiente (Ocultar div. actual, mostrar siguiente div)
  2. Use el incremento / decremento y elija la cantidad para el artículo, presione Siguiente (Ocultar div. actual, mostrar el siguiente div)
  3. Igual que 2 solo con otro elemento
  4. Igual que 2 y 3 con otro elemento
  5. Generar factura
  6. Continúe con el pago (complete los detalles de la tarjeta y pague usando la API externa de la tarjeta de crédito)

Ahora, lo que me molesta es el número 6. ¿Qué es alguien que edita el JS y envía valores diferentes al procesador de pagos externo? ¿Es eso posible? Y si es así, ¿cómo puedo asegurarme de que esto no suceda?

Con mi Javascript, uso varios valores que obtengo de una tabla simple de mi base de datos, como el precio de los artículos y el costo de envío. Pero uso estos valores directamente en mi archivo Javacsript para los cálculos y la generación de la factura. Tengo la sensación de que estoy abordando el problema de una manera incorrecta. ¿Existe la posibilidad de que el "cliente" también pueda cambiar los cálculos?

¿Cómo me aseguro de que una vez que se genere la factura, se utilicen los valores correctos para calcular el precio total, de modo que se envíe el precio adecuado a través de la pasarela de pago, sin importar si alguien simplemente confunde con el "front-end"? ¿Números que aparecen?

Nota Me han dicho que este sería el mejor lugar para publicar esta pregunta; por favor, avíseme si no es así y la eliminaré.

Si desea ver el proceso de pago que realicé, aquí está (aún no he puesto la API de la pasarela de pago porque me preocupa la seguridad): enlace

Gracias :-)

    
pregunta nTuply 08.04.2016 - 21:43
fuente

2 respuestas

2

El cliente del usuario debe enviar solo la lista de artículos (y cantidades) del pedido al servidor. Cualquier otra cosa relacionada con el pedido, especialmente el costo total del pedido, debe calcularse en el servidor, en función de la lista de artículos pedidos. Si el usuario se atasca con el JavaScript que envía los elementos que el usuario ha pedido, no hay nada realmente incorrecto en eso: es equivalente a que el usuario haya pedido normalmente algunos elementos diferentes.

Opcionalmente, puede hacer que el cliente también calcule el total del pedido, simplemente como una conveniencia de UX para el usuario. Este valor debe eliminarse al enviar el pedido al servidor, ya que el usuario puede haberlo modificado después de que su script lo haya calculado.

    
respondido por el apsillers 08.04.2016 - 21:51
fuente
0
  

¿Qué es alguien que edita el JS y envía diferentes valores al   procesador de pago externo? ¿Es eso posible? Y si es así, como yo.   Asegúrate de que esto no suceda?

Es posible. Aquí hay una forma en que PayPal lo maneja: El código del botón de pago se cifra antes de que se muestre en el sitio web del comerciante. Podría hacer lo mismo o usar un proveedor de carrito de compras y pasarela de pago que ofrezca esta funcionalidad.

  

Dentro de mi Javascript hago uso de varios valores que obtengo de un   tabla simple de mi base de datos, como el precio de los artículos y   costo de envío. Pero yo uso estos valores directamente en mi archivo Javacsript   Para los cálculos y generación de la factura. Tengo la sensación de que   Me estoy acercando al problema de una manera incorrecta. Hay una posibilidad   ¿Que el "cliente" también puede cambiar los cálculos?

Sí, esto es posible. Estuve en una conferencia el fin de semana pasado donde un desarrollador estaba discutiendo cómo reveló la vulnerabilidad a un cliente en su servidor. Aquí hay un artículo que encontré en línea hablando sobre el mismo problema de FYI: Vulnerabilidad en la manipulación de precios en plataformas de comercio electrónico

  

¿Cómo me aseguro de que una vez que se genera la factura, la correcta   Los valores se utilizan en el cálculo del precio total, por lo que el precio adecuado es   enviado a través de la pasarela de pago, no importa si alguien simplemente ensucia   ¿Con los números "front-end" que aparecen?

No estoy seguro de cómo asegurarme de que sea correcta la primera vez que se genera la factura más allá de usar botones de pago que envían información cifrada al servidor para la generación de la factura . Si usa un cifrado lo suficientemente fuerte, será difícil para un atacante usar información no válida para generar un pedido.

Realmente no se convierte en un problema hasta que se entrega algo. Entonces, si no sabe cómo configurar un sistema de compras encriptado, una tarea más sencilla es hacer pedidos pendientes de forma predeterminada y ejecutar un script del lado del servidor que se ejecuta en la base de datos de pedidos después de la transacción para verificar que los precios pagados coincidan con el precio real de cada elemento. Puede ejecutar este script con la información generada a partir del historial de pedidos de su cuenta de comerciante después de que se haya procesado el pago. Cómo para escribir el script está fuera del alcance de security.stackexchange.

Aquí hay algunos enlaces relacionados con la seguridad de JavaScript y las vulnerabilidades de comercio electrónico:

respondido por el jtlindsey 08.04.2016 - 22:37
fuente

Lea otras preguntas en las etiquetas