¿Cómo garantizar la seguridad de los datos de la interfaz API?

Los métodos de desarrollo front-end y back-end están separados, usamos la interfaz como estándar para promover, definir la interfaz, desarrollar sus propias funciones y finalmente hacer ajustes conjuntos. Ya sea que se esté desarrollando una aplicación nativa, una aplicación web o un software de PC, siempre que el front-end y el back-end estén separados, es inevitable llamar a la interfaz proporcionada por el back-end para la interacción empresarial.

Para las páginas web o aplicaciones, siempre que tome el paquete, puede conocer claramente los datos obtenidos por la solicitud y puede falsificar la solicitud para obtener o atacar el servidor; también es una bendición para los rastreadores, y es fácil para capturar sus datos. Entonces, ¿cómo resolvemos estos problemas?

Firma de la interfaz

Consideremos primero el problema de los datos de interfaz falsificados y las llamadas repetidas de la interfaz. Para resolver este problema, necesitamos utilizar el esquema de firma de la interfaz.

Proceso de firma

Inserte la descripción de la imagen aquí

Reglas de firma

1. Asigne appid y appsecret sin conexión, y asigne diferentes appid y appsecret para diferentes personas que llaman.
2. Agregue una marca de tiempo (marca de tiempo), y los datos serán válidos en 5 minutos.
3. Agregue un número de serie temporal nonce (para evitar el envío repetido), al menos 10. Bit. Para la interfaz de consulta, el número de serie solo se utiliza para el aterrizaje del registro, lo cual es conveniente para una verificación posterior del registro. Es necesario verificar la unicidad del número de serie dentro del período de validez de la interfaz de procesamiento para evitar solicitudes repetidas.
4. Agregue la firma del campo de firma, la información de firma de todos los datos.
Los campos anteriores se colocan en el encabezado de la solicitud.

Generación de firmas

Reglas de generación de campos de firma
Todos los parámetros dinámicos = parte del encabezado de la solicitud + dirección URL de la solicitud + parámetros de la solicitud de la solicitud + cuerpo de la solicitud

上面的动态参数以key-value的格式存储,并以key值正序排序,进行拼接

La última cadena empalmada se empalma en una cadena en appSecret
signature = DigestUtils.md5DigestAsHex (sortParamsMap + appSecret)
, y luego se realiza el cifrado irreversible md5

Encabezado de solicitud

Request header = "appId = xxxx & nonce = xxxx × tamp = xxxx & sign = xxx"
Deben pasarse los 4 parámetros en el encabezado de la solicitud; de lo contrario, se informará directamente de una excepción

Solicitar dirección URL

Esta es la dirección que contiene el protocolo de la interfaz de solicitud, como
https://mso.xxxx.com.cn/api/user

Solicitar parámetros de solicitud

Es decir, cuando la solicitud es el método Get, se obtienen los parámetros entrantes

Cuerpo de la solicitud

Es decir, cuando la solicitud es Publicar, el cuerpo del cuerpo de la solicitud

从request inputstream中获取保存为String形式

Implementación del algoritmo de firma

El principio básico es realmente relativamente simple, que es personalizar el filtro para procesar cada solicitud; el proceso general es el siguiente:
1) Verificar los parámetros de encabezado necesarios
2) Obtener los parámetros de encabezado, parámetros de solicitud, ruta de solicitud de URL, cuerpo de solicitud Cuerpo , y poner estos El valor se coloca en SortMap para clasificar
3) El valor en SortMap se empalma
4) El valor empalmado se cifra y se genera el signo
5) El signo generado se compara con el signo pasado desde el frente end, y se devuelve un error si no son lo mismo

Echemos un vistazo al código.

@Component
public class SignAuthFilter extends OncePerRequestFilter{
    
    
static final String FAVICON = "/favicon.ico";
static final String PREFIX = "attack:signature:";
}

Inserte la descripción de la imagen aquí
Lo anterior es la clase de filtro. Una de las aplicaciones secretas debe ser obtenida por su propia empresa. Su función es principalmente distinguir diferentes aplicaciones cliente. Y use el appSecret obtenido para participar en la firma de la firma, asegurando que la firma de la solicitud del cliente esté controlada por nuestros antecedentes, y podamos emitir diferentes appSecrets para diferentes clientes.

Echemos un vistazo a los parámetros del encabezado de verificación.

Inserte la descripción de la imagen aquí

La figura anterior es en realidad para verificar si el valor se pasa; pero de hecho, hay un punto muy importante, que es verificar el tiempo de la solicitud. Si es mayor de 10 minutos, el enlace ha expirado, evitando otros vengan a este enlace para solicitarlo. Esto es para evitar hotlinking.

Veamos cómo obtener cada parámetro

Inserte la descripción de la imagen aquí

Hemos obtenido varios parámetros arriba, que es relativamente simple; echemos un vistazo a la generación de signos y a la verificación de signos
Inserte la descripción de la imagen aquí

En el proceso anterior, habrá un proceso de seguridad adicional,

  • Para evitar hotlinking, podemos dejar que el enlace caduque
  • Utilice el parámetro nonce para evitar envíos repetidos
在签名验证成功后,判断是否重复提交;
原理就是结合redis,判断是否已经提交过

Inserte la descripción de la imagen aquí

para resumir

Hoy usamos firmas para proteger las interfaces que proporcionamos al exterior; pero esta protección solo evita que otros manipulen o simulen solicitudes.

Sin embargo, aún existe una falta de protección de seguridad para los datos en sí, es decir, los parámetros solicitados y los datos devueltos pueden ser interceptados por otros, y estos datos están en texto plano, por lo que mientras sean interceptados, los datos comerciales correspondientes. Puede ser obtenido.

Supongo que te gusta

Origin blog.csdn.net/qq_43565087/article/details/108267876
Recomendado
Clasificación