Capa extra segura para llamadas cURL

0

Estoy tratando de averiguar cómo agregar una capa de seguridad adicional a mis llamadas de CURS de aplicación web que van a mi motor de API.

Tengo una aplicación web que envía datos a un motor de API que hice.

Mi API tendrá acceso al sistema de archivos y, por lo tanto, debe ser bastante segura para que no haya forma de que alguien pueda ejecutar un script en el servidor.

La idea que tenía para asegurarla aún más es tener un salt en la aplicación web y la misma en el motor de la API, la aplicación web enviará la cURL con una marca de tiempo con hash y la marca de tiempo real, más cualquier otra solicitud, ejemplo:

<?php

$hash = "1h2k3jklh";
$tstamp = time();
$hashed_tmstamp = md5($tstamp . $hash);

$data_to_send = [
    'time' => $tstamp,
    'auth' => $hashed_tmstamp,
    'foo'  => "bar"
];

En el lado de la API, comprobaré si auth es igual a la marca de tiempo enviada con el hash de la API (que es el mismo que el de la aplicación web).

De esta manera, si auth se copia y el envío con una nueva solicitud siempre fallará como actualizaciones de fecha y hora. Hice un pequeño ejemplo gráfico para entender mejor.

Hayunpunto,si"el hombre del medio" puede copiar el auth también puede copiar el time y puede enviar solicitudes siempre con la misma hora y autenticación.

Así que me pregunto cómo resolver esta parte ya que en el lado de la API no tengo una base de datos para verificar contra "hash ya usado".

Estoy en duda Probablemente estoy tratando de reinventar la rueda y seguro que este tipo de cosas ya han sido revisadas / manejadas.

El único punto es que quiero la "forma estándar", pero estoy tratando de agregar seguridad adicional para que un posible pirata informático no sepa lo que hay al otro lado.

¿Algún consejo? Además, ¿alguna idea mejor?

    
pregunta Mr.Web 02.08.2018 - 22:26
fuente

1 respuesta

3

Iría exactamente en el sentido contrario. Coloque el código en github, deje que la gente lo bifurque, envíe solicitudes de extracción, cambie el código. Evoluciona Si cometió un error crítico, alguien lo notificará e informará.

Y usa TLS. Hay una gran comunidad detrás, hay errores, pero son tan oscuros la mayor parte del tiempo que nosotros, los simples mortales, no tenemos que preocuparnos. La mala configuración, los errores de programación, los errores lógicos y las inyecciones de código son mucho más frecuentes y explotables que los errores TLS.

Si desea implementar la protección de reproducción, use un nonce creciente. De esta manera, el servidor solo tendrá que guardar un valor: el último recurso utilizado, y el cliente tendrá que incrementarlo antes de cada solicitud. No necesita incrementarse en uno, se puede incrementar en cualquier valor. En algunas API que utilizo, el nonce es el Epoch (más milisegundos).

Citando a Antoine de Saint Exupéry:

  

Parece que la perfección se alcanza no cuando no hay nada más que agregar, sino cuando no hay nada más que eliminar.

Las API son simples. No agregue ningún mecanismo si no es necesario. Agregar componentes aumenta la complejidad, reduce el rendimiento y es una cosa más que necesita actualizar de vez en cuando. Mantener solo las partes esenciales reduce esta carga.

    
respondido por el ThoriumBR 02.08.2018 - 23:03
fuente

Lea otras preguntas en las etiquetas