Estoy intentando configurar una red de aplicaciones web que proporcionan algún tipo de sistema de compra. En un esfuerzo por evitar tener que ejecutar exploraciones de vulnerabilidad en cada servidor de la aplicación web, me gustaría simplemente darle a cada aplicación web un valor de token que se crea en un servidor de procesamiento de pagos, que sería el único servidor compatible con PCI en la red.
La aplicación web enviaría este token al servidor de procesamiento de pagos, donde luego se descifraría y cobraría.
También me gustaría no almacenar los detalles de la tarjeta en el servidor de procesamiento de pagos, por lo que mi proceso propuesto es el siguiente:
-
El cliente de aplicaciones web (SPA) recopila los detalles de la tarjeta y realiza una solicitud de un token cifrado directamente al servidor de procesamiento de pagos.
{ "number": "4242424242424242", "exp_month": "12", "exp_year": "2018", "cvv": "123" }
-
El servidor de procesamiento de pagos cifra estos datos (por ejemplo, usemos AES256 y la contraseña "prueba") y devuelve el token al cliente de la aplicación web.
{ "token": "DmR7/sQW7+EqKc1MvdaMgQ/DPVNIJuGTpoe2uwEfA4UJTdcaXuf63GhLyTvfihK77iTknNQArUHRVhm7kdET1KjetIg7Qj/aImlPXqM6GzwlgVljoofxtuHa8rRkU4/TqKHC+mfabYQrs4E+eb39qIeIenosPTr2b/+I+IOSZ6s=" }
-
El cliente de la aplicación web luego envía este token al servidor de la aplicación web, junto con la información del pedido.
{ "token": "DmR7/sQW7+EqKc1MvdaMgQ/DPVNIJuGTpoe2uwEfA4UJTdcaXuf63GhLyTvfihK77iTknNQArUHRVhm7kdET1KjetIg7Qj/aImlPXqM6GzwlgVljoofxtuHa8rRkU4/TqKHC+mfabYQrs4E+eb39qIeIenosPTr2b/+I+IOSZ6s=", "items": [ { "id": 5, "quantity": 1 } ] }
-
El servidor de aplicaciones web recibe los detalles del pedido y luego solicita un pago al servidor de procesamiento de pagos.
{ "token": "DmR7/sQW7+EqKc1MvdaMgQ/DPVNIJuGTpoe2uwEfA4UJTdcaXuf63GhLyTvfihK77iTknNQArUHRVhm7kdET1KjetIg7Qj/aImlPXqM6GzwlgVljoofxtuHa8rRkU4/TqKHC+mfabYQrs4E+eb39qIeIenosPTr2b/+I+IOSZ6s=", "provider": "stripe", "currency": "aud", "price": 123.45 }
-
El servidor de procesamiento de pagos luego desencripta el token para descubrir los detalles de la tarjeta a cobrar y continúa con el cargo. El servidor de procesamiento de pagos devuelve si el cargo fue exitoso y el servidor de aplicaciones web es libre de marcar el pedido como procesado.
En este escenario, mi principal preocupación es si pasar los detalles de la tarjeta cifrada al servidor de aplicaciones web se considera un problema para el cumplimiento de PCI.
Soy consciente de que podría usar un servicio como Stripe.js para recuperar simplemente un token dumb (literalmente, solo una referencia a Stripe, sin datos de tarjeta), sin embargo, el sistema de procesamiento de pagos puede admitir múltiples proveedores, algunos de los cuales pueden no tener ningún sistema de tokenización, por lo que debo cubrir todas las bases aquí.
Gracias.