Implementación de firma de interfaz
Al proporcionar una interfaz para un sistema de terceros, debe considerar la seguridad de los datos de la interfaz, como si los datos han sido manipulados, si están desactualizados, si la solicitud es única, si los datos se pueden enviar repetidamente, etc. Entre ellos, es relativamente importante si los datos han sido manipulados.
La solicitud lleva los parámetros appid y sign. La solicitud sólo puede liberarse si tiene la identidad legal appid y el signo de firma correcto. Esto resuelve los problemas de autenticación y manipulación de parámetros. Incluso si los parámetros de la solicitud son secuestrados, no puede falsificar una solicitud legítima porque no puede acceder al texto cifrado (el texto cifrado solo se usa para el cifrado local y no participa en la transmisión de la red).
Usar solo appid y firma puede resolver el problema de la manipulación de los parámetros de la solicitud, pero también existe el riesgo de reutilizar los parámetros de la solicitud para falsificar solicitudes secundarias.
El nonce hace referencia a una cadena aleatoria única que identifica cada solicitud firmada. Al proporcionar un identificador único para cada solicitud, el servidor puede evitar que las solicitudes se utilicen varias veces (registrando todos los nonces utilizados para evitar que se utilicen dos veces).
Sin embargo, tiene un coste prohibitivo para el servidor almacenar permanentemente todos los nonces entrantes. Las marcas de tiempo se pueden utilizar para optimizar el almacenamiento que no sea CES.
Supongamos que se permite una diferencia horaria de hasta 10 minutos entre el cliente y el servidor, mientras se rastrean las colecciones no CES registradas en el servidor. Cuando llega una nueva solicitud, primero verifique si la marca de tiempo transportada está dentro de los 10 minutos. Si excede el tiempo, rechace la solicitud y luego consulte el nonce transportado. Si existe (lo que indica que la solicitud es la segunda solicitud), rechácela. . la solicitud. De lo contrario, el nonce se registra y los nonce con marcas de tiempo superiores a 10 minutos se eliminan de la colección de nonce (puede usar la caducidad de Redis para agregar un nuevo nonce mientras configura su vencimiento de tiempo de espera en 10 minutos).
Para el lado del servidor, es factible utilizar interceptores o facetados AOP para interceptar solicitudes. Si desea interceptar todas las solicitudes, puede realizar el procesamiento del interceptor directamente (los interceptores están antes del facetado y después de los filtros). después de la distribución del dispather Springmvc).
El orden de Filtro → Interceptor → Aspecto:
En los campos que deben colocarse en el encabezado de la solicitud: ID de la aplicación, marca de tiempo, nonce, firma, firma.
Para cada tipo de parámetros de solicitud, realice el siguiente proceso de empalme:
Si hay varios formularios de datos, vuelva a empalmarlos en el orden de ruta, consulta, formulario y cuerpo para Obtenga el valor concatenado de todos los datos.
El valor de empalme anterior se expresa como Y.
X="appid=xxxnonce=xxxtimestamp=xxx"
El valor de empalme final = XY. Finalmente, el valor final empalmado se cifra mediante un algoritmo de cifrado para obtener una firma.
Aunque se recomienda utilizar SHA-256, SHA-384 y SHA-512 para los algoritmos hash y prohibir el uso de MD5, el uso de la firma de cifrado MD5 no es un gran problema. No se recomienda MD5 porque existen muchas bibliotecas para descifrar MD5.
El proceso de implementación se puede dividir en los siguientes pasos:
Utilice el parámetro del cuerpo HttpServletRequest para personalizar el caché:
Reemplace el RequestServlet personalizado en el filtro:
p>
Agregue la configuración de filtros y preste atención al orden de los filtros:
Dado que el filtro predeterminado que viene con Zuul ya procesa el cuerpo (FormBodyWrapperFilter), el La firma se procesa en Zuul, simplemente agregue un filtro como se muestra a continuación.
Implementación de firma de interfaz Java (Firma)
Verificación de firma de interfaz API abierta, para que su interfaz ya no esté expuesta.