Get Started
Log in

Asegurar webhooks de SMS entrants

 

 

 

Descripción general

 

Como una mejor práctica, le recomendamos que asegure los webhooks de SMS entrantes para asegurarse de que sea IntelePeer y no por un tercero quien los esté activando. Hay dos formas de asegurar sus webhooks, que no son mutuamente excluyentes:

  • Asegurar SMS entrantes a través de autenticación básica
  • Validar que un SMS entrante proviene de IntelePeer

 

Asegurar SMS entrantes a través de autenticación básica

 

La primera forma de asegurar su webhook entrante está completamente en sus manos. IntelePeer admite webhooks que contienen autenticación básica integrada en la URL. Por ejemplo: https://tomhanks:megryan@joeversusthevolcano.org

Debido a que la URL contiene las credenciales, se recomienda ALTAMENTE (actualmente no se requiere) que se utilice el protocolo HTTPS, que naturalmente cifrará las credenciales durante la transmisión. Ya que IntelePeer ahora posee esas credenciales, también se recomienda que cualquier punto final en su servidor web que no sea el entrante sms-webhook, no use las mismas credenciales.

 

Validar que un SMS entrante proviene de IntelePeer

 

Por otro lado, si le preocupa que alguien intente simular ser IntelePeer y le envíe mensajes SMS entrantes a su webhook de manera malintencionada, pero ha optado por no usar la autenticación básica (o sus credenciales de autenticación básica están comprometidas), no se preocupe; aquí es donde entra en juego su «cuenta secreta«.

Si se establece su cuenta secreta, IntelePeer complementará cada mensaje SMS entrante con una «firma». Esta firma es un hmac-procedente de tres cosas:

  • El ID de referencia de los mensajes SMS
  • El cuerpo del mensaje
  • Su cuenta secreta

Los dos primeros son parte de la carga útil enviada a su webhook. La cuenta secreta es algo que solo usted e IntelePeer conocen, y NO forma parte de la carga útil por diseño. Para calcular la firma esperada, puede ejecutar el siguiente código en el idioma de su elección. Una vez que tenga la firma esperada, puede compararla con la firma real provista por IntelePeer y, si las dos coinciden, habrá validado la autenticidad del mensaje:

 

Código de ejemplo

 

Python

 

import hmac, hashlib

def get_expected_signature(message_body, reference_id, account_secret):

    #the string to be signed is a concatenation of the reference ID and the body

    signing_string = u'{}{}’.format(reference_id, message_body)

    resulting_hmac = hmac.new(account_secret, signing_string, hashlib.sha1)

    return resulting_hmac.hexdigest()

 

Un ejemplo concreto del uso de esta función es el siguiente:

 

Código de ejemplo

 

Python

 

ACCOUNT_SECRET = 'shhhhhhhhhh!'

INBOUND_SMS = {

    u'to': u'',

    u'message': u'This is a security test',

    u'from': u'',

    u'refid': u'SM5ACE21340001006568000044A9F800',

    u'signature': u'67e6b7fdbed0fd11cf90de310d3bb8c0cca5650e'}


expected_signature = get_expected_signature(                         INBOUND_SMS['message'],                         INBOUND_SMS['refid'],                         ACCOUNT_SECRET) authenticated = (expected_signature == INBOUND_SMS['signature']) print 'authenticated' if authenticated else 'not authenticated'

 

Aspectos importantes:

 

  • Los mensajes son firmados en el momento de la recepción. Si bien el cambio de su «cuenta secreta» es una acción atómica, los mensajes que ya se hayan firmado pero aún no se hayan entregado, no se volverán a firmar con la nueva firma antes de la entrega.
  • Esta ingeniosa herramienta es un rápido validador para la corrección de su código: https://www.freeformatter.com/hmac-generator.html (seleccione SHA1)
  • Si solo se usara el cuerpo del mensaje como la «cadena a firmar», dos mensajes idénticos producirían firmas idénticas y con suficientes puntos de datos, entonces la seguridad de la cuenta secreta podría verse comprometida. Por lo tanto, concatenamos el ID de referencia y el cuerpo del mensaje como la «cadena a firmar», lo que da como resultado firmas únicas, incluso en el caso de mensajes idénticos.

 

 

Cart Overview