Formularios seguros: una guía esencial

Índice

  1. Caso de uso: cambio de contraseña
  2. Código para verificación de número de teléfono
  3. Código para verificación de SIM SWAP
  4. Más escenarios de aplicación de las APIs de red 
  5. Contexto de las APIs de red #NetworkAPIs

Los formularios en línea son una herramienta esencial para la captura de datos, pero su desarrollo debe priorizar la seguridad y las medidas antifraude, especialmente cuando manejan información sensible.

En los círculos de developers, nos hemos encontrado casuísticas de fraudes que suponen gastos a gran escala. Por ejemplo, una empresa donde se registraban usuarios falsos suponía gastos en la doble autenticación que no llegaban a ningún negocio. Otro caso muy popular en los tiempos que corren son los protagonizados por empresas afectadas por el robo de credenciales y contraseñas, que han terminado perdiendo grandes sumas de dinero o se han visto obligadas a parar la producción de la empresa. 

La implementación de seguridad avanzada en aplicaciones que manejan datos sensibles es esencial en un mundo cada vez más digital y expuesto a riesgos de fraude. Una de las soluciones más eficaces para este tipo de situaciones son las APIs de verificación de identidad, que facilitan una autenticación más precisa y confiable, brindando tranquilidad a las empresas que ofrecen servicios críticos y a los usuarios que confían en la protección de sus datos personales. 

Desde Telefónica Open Gateway, ponemos a disposición de los desarrolladores APIs de red que permiten integrar capacidades avanzadas como validaciones en tiempo real, autenticaciones y operaciones en red sin exponer datos sensibles ni guardar información. A continuación, veremos un caso de uso que refleja los beneficios de nuestras herramientas y explicaremos cómo programarlo. 

1. Caso de uso: cambio de contraseña 

Unas de las actividades fraudulentas más repetidas son aquellas en las que se da un cambio de contraseña. Se trata de un proceso crítico las aplicaciones ya que se trata de información sensible y cualquier atacante puede tomar el control de la cuenta. Esto suele ocurrir con ataques de SIM Swapping donde el delincuente realiza un cambio de SIM para recibir códigos de verificación por SMS, o simplemente accede a la cuenta desde otro dispositivo usando un número de teléfono falsificado.

Supongamos que tenemos este formulario de login donde si hemos olvidado la contraseña le damos a “Forgot Password”. 

Interfaz de usuario gráfica, Aplicación

Descripción generada automáticamente

En este caso, para garantizar que el cambio de contraseña sea solicitado y realizado únicamente por el propietario legítimo de la cuenta, se pueden implementar estos pasos utilizando las APIs de SIM Swap y Number Verification.

Paso 1: Validación Number Verificación. 

Cuando el usuario solicita el cambio de contraseña desde el botón, se abre un formulario similar al que podemos encontrar en la imagen. Es en este momento donde la API de Number Verification de Telefónica Open Gateway entra en acción. 

Interfaz de usuario gráfica, Texto, Aplicación

Descripción generada automáticamente

Esta API verifica que el número de teléfono proporcionado coincide con el número asociado al dispositivo actual. Si la API confirma que el número de teléfono del dispositivo coincide con el registrado, el cambio de contraseña puede proceder. En caso contrario, se podría bloquear el intento y enviar una alerta al usuario, indicando que un dispositivo no autorizado intentó acceder a la cuenta.

2. Código para verificación de número de teléfono

Por la naturaleza de esta API, el proceso de autenticación pasa por un entorno Frontend, por lo una opción sencilla y rápida es levantar un pequeño servicio con frameworks como Flask.

Como ejemplo, os ofrecemos un código “cliente” y un código “servidor” que simulan este flujo y muestran de forma sencilla la respuesta que podemos obtener de Number Verification

Código cliente

Sencillamente el cliente hace una petición get con su número de teléfono. El servidor lo utilizará para hacer las comprobaciones.

phone = input("tel: ")client_id = "your_client_id"purpose = "dpv:FraudPreventionAndDetection#number-verification-verify-read"callback = "tu_callback_url” # Ej: http://localhost:4242url = f"https://sandbox.opengateway.telefonica.com/apigateway/authorize?client_id={client_id}&response_type=code&purpose={purpose}&redirect_uri={callback}&state={phone}&login_hint=phone_number:{phone}" params = {        'client_id': client_id,        'purpose': purpose,        'redirect_uri': callback,        'state': phone,        'login_hint': phone} try:    response = requests.get(url, params)    response.raise_for_status()    print(response.json())except:    status_code = response.status_code    print(f"Error {status_code}")    sys.exit(1)

Código servidor

Esta aplicación recibirá por parte del cliente su número de teléfono y credenciales, llamando a la función verify y devolviendo False si el número no corresponde con el asociado al dispositivo del cliente, o True si sí corresponde

from flask import Flask, request, jsonifyimport loggingfrom opengateway_sandbox_sdk import ClientCredentials, NumberVerification credentials = ClientCredentials(    client_id='your_client_id,    client_secret='your_client_secret') app = Flask(__name__)log = logging.getLogger('werkzeug') #silent Flasklog.disabled = True @app.route('/numberverification-callback', methods=['GET'])async def callback():    code = request.args.get('code', '')    phone_number = request.args.get('state', '')    api_client = NumberVerification(credentials, code)    result = api_client.verify(phone_number)    print(f"{phone_number} is: {result}")    return jsonify(result) if __name__ == '__main__':    app.run(host='localhost', port=5000)

Paso 2: Validación de Seguridad con SIM Swap.

Interfaz de usuario gráfica, Texto, Aplicación

Descripción generada automáticamente

Una vez que ya se ha autenticado el número de teléfono asociado al dispositivo, se ofrece una segunda medida de seguridad.  Se procede a verificar si ha habido un duplicado de tarjeta SIM por medio de la API SIM Swap. Esto es un punto fundamental en la seguridad de las aplicaciones y servicios digitales, ya que un cambio reciente de SIM puede ser indicativo de un intento de suplantación de identidad.

Si la API confirma que no ha habido un cambio de SIM, el sistema puede continuar con el flujo normal de cambio de contraseña. Si, en cambio, se detecta un cambio reciente de SIM, se alerta al usuario y se pide una verificación adicional, como una autenticación multifactor (MFA) o una verificación por correo electrónico.

3. Código para verificación de SIM SWAP

SIM Swap es una API pensada para funcionar sin interacción del cliente. En este ejemplo, usamos el SDK de un entorno Sandbox destinado para hacer pruebas. El SKD y cómo utilizarlo se puede conseguir en este enlace. Nos permite en muy pocas líneas programar toda la lógica. 

En el código instanciamos el objeto SimSwap para interactuar con los métodos que ofrece la API. 

import sys

from opengateway_sandbox_sdk import ClientCredentials, SimSwap

# Paso 1: Configuración de credenciales para autenticación

credentials = ClientCredentials(

    client_id='your_cliend_id',

    client_secret='your_client_secret'

)

# Definir el número de teléfono del cliente

customer_phone_number = “+34666555343”

# Paso 2: Crear cliente SIM Swap con credenciales y número de teléfono

try:

    simswap_client = SimSwap(credentials=credentials, phone_number=customer_phone_number)

    print("Autenticación exitosa.")

except Exception as e:

    print(f"Error en la autenticación: {e}")

    sys.exit(1)

# Ejemplo 1: Verificación de cambio de SIM

max_age = 2400  # Periodo en horas para verificar cambios de SIM (hasta 2400 horas = 100 días)

try:

    # Verificar si hubo un cambio de SIM en el periodo especificado

    if simswap_client.check(max_age):

        print(f"Alerta: La SIM fue cambiada en los últimos {max_age // 24} días.")

    else:

        print(f"La SIM no ha sido cambiada en los últimos {max_age // 24} días.")

except Exception as e:

    print(f"Error en la verificación de cambio de SIM: {e}")

    sys.exit(1)

# Ejemplo 2: Obtener la fecha del último cambio de SIM

try:

    # Obtener la fecha de la última vez que la SIM fue cambiada

    result = simswap_client.retrieve_date()

    print(f"Último cambio de SIM: {result.strftime('%d de %B de %Y, %I:%M:%S %p')}")

except Exception as e:

    print(f"Error al obtener la fecha del último cambio de SIM: {e}")

    sys.exit(1)

Para probar el código de la API SIM Swap o el API de Number Verification de puedes seguir los pasos de esta página.  De forma gratuita puedes obtener ‘your_cliend_id’, ‘your_client_secret’ y la SDK y hacer tus pruebas para tu caso de uso. 

4. Más escenarios de aplicación de las APIs de red 

Con este caso de uso es posible proyectar más escenarios:

  1. Prevención de fraude financiero: Los bancos pueden utilizar la función de verificación de SIM para identificar cambios recientes y bloquear temporalmente el acceso hasta realizar verificaciones adicionales.
  2. Validación de nuevos usuarios: Las aplicaciones que requieren autenticación a través del número de teléfono pueden verificar el historial de la SIM y activar pasos adicionales de autenticación en caso de un cambio reciente.
  3. Suscripción para servicios críticos: Las empresas pueden suscribirse a notificaciones de cambio de SIM para detectar y reaccionar en tiempo real ante posibles intentos de fraude.
  4. Autenticación en aplicaciones de salud: las aplicaciones de salud pueden utilizar esta API para garantizar que el acceso a cuentas con datos sensibles se realice desde el dispositivo autorizado del usuario, evitando accesos no autorizados a cuentas de terceros.
  5. Protección de cuentas en redes sociales y comunicación: las redes sociales y plataformas de comunicación pueden prevenir accesos no autorizados usando esta API para validar que el dispositivo del usuario coincida con el número de teléfono registrado en la cuenta.

5. Contexto de las APIs de red #NetworkAPIs

Las APIs de red forman parte de una iniciativa global del sector Telco liderada por la GSMA que aspira a transformar las redes de comunicaciones en plataformas. Esto permite abrir las capacidades de forma interoperable, intuitiva y programable a través de estas APIs globales y estandarizadas bajo el marco de CAMARA, que se trata de un proyecto de código abierto dirigido por Fundación Linux. 

El poder de la estandarización y la integración de más operadores de telecomunicaciones permite que una misma API disponible en el Cloud, esté disponible para todos ellos. Según vemos en el gráfico cualquier dispositivo programable puede usar las APIs disponibles en el Cloud para abstraer la complejidad de las Telcos. 

Diagrama

Descripción generada automáticamente

Las APIs Number Verification y SIM Swap ya están disponibles en España, con tres operadores del mercado móvil. Para conocer el estado del lanzamiento comercial de Open Gateway, puedes Si quieres conocer más sobre el proyecto existe este mapa de la GSMA con el estado.  

Existen más de 27 de APIs de red actualmente en desarrollo en el marco de CAMARA. 

Overview of the 25 APIs within the CAMARA Fall24 meta-release

Existen otras APIs disponibles para combatir el fraude, aportar seguridad o ofrecer una mejora de experiencia:  

  • API Know Your Costumer-Match: verifica que los datos correspondientes en un formulario son correctos. 
  • API QoD Mobile y API QoD Wi-Fi: mejoran la conectividad durante el tiempo que el usuario lo necesite. Es ideal para optimizar la experiencia en situaciones críticas en emergencias, médicas o logísticas. También en procesos como hacer un inicio de sesión o ver contenido garantizando que la aplicación funcione bien incluso en entornos congestionados. 
  • La  API de verificación de localización,  verifica si el móvil aportado está en una localización con un rango. Es muy útil en aplicaciones con experiencia en mapas. También para activar acciones o notificaciones cuando un dispositivo sale o entra en un área. Por último, aporta seguridad en transacciones que verifiquen si realmente estás en la localización que se hace la transacción mucho más fiable que GPS. 

El proyecto CAMARA es Open Source así que si lo consideras de interés puedes unirte al proyecto tanto a título personal como empresa. 

Y recuerda, tanto si usas APIs de red o no, siempre aplica seguridad a tus formularios.  

Irene Ruiz Pozo y Laura Lacarra Arcos
Irene Ruiz Pozo y Laura Lacarra Arcos
Irene hace lo que hace y es quien es gracias a las comunidades tecnológicas. DevRel: comunicación, tecnología y networking. Laura es una mañica apasionada de la tecnología, arquitecturas Big Data e IA y actualmente involucrada en APIs de red. Involucrada en comunidades técnicas desde 2012.

Otros artículos que te pueden interesar

El día en el que comencé a desarrollar todas mis webs con Python

0
En diciembre de 2022 apareció un nuevo framework llamado Pynecone, en su versión 0.1.8 Alpha. Cero ruido. Ya en julio de 2023, con su cambio de nombre a Reflex, y el lanzamiento de su versión 0.2.0, descubrí por primera vez este framework. Y la comunidad comenzó a hablar de él.
Java 23, claves y datos necesarios de la última versión de java

Java 23: ¿dónde estamos y cómo hemos llegado hasta aquí?

0
Java 23 ya está disponible desde el 17 de septiembre de 2024. Como siempre que se lanza una nueva versión, es útil conocer las novedades que incluye nuestro lenguaje favorito.

Tests de integración con Spring Boot y Testcontainers

0
En el desarrollo de aplicaciones Spring Boot es fundamental asegurar que todo funcione correctamente. Los tests unitarios son esenciales para validar el comportamiento de componentes de manera aislada.