Descargo de responsabilidad: no estoy muy familiarizado con las técnicas de seguridad en general.
El problema: cree rápidamente muchos archivos pequeños en el servidor desde un script de bash.
Solía usar scp
(copia segura) para crear esos archivos, pero me resultó extremadamente lento con la operación de inicio de sesión necesaria, incluso cuando utilizo una clave compartida a través de SSH.
Así que pensé crear un script bash y un script php que compartan una clave para acelerar la operación haciendo solo lo esencial.
Bash del cliente envía una contraseña final, el nombre del archivo a crear, el contenido de ese archivo y el segundo UTC actual.
En el cliente, la contraseña final se calcula de la siguiente manera:
#pseudocode
final password = sha256( ${currentDateTime}${sharedKey}${remoteFilename}${content} )
La solicitud se publica en el servidor mediante el comando CURL.
El PHP del servidor ahora tiene la contraseña del cliente, el nombre de archivo para crear, el contenido y el segundo UTC a partir del cual comenzó la solicitud. El servidor calcula la hora UTC completa yendo al segundo más cercano al pasado que coincide con el segundo UTC enviado por el cliente. Por ejemplo, si el segundo envío por el cliente = 12 y la hora UTC del servidor es 13:42:25, entonces el servidor utiliza 13:42:12.
El servidor php genera su propia contraseña "real" (también conocida como la contraseña que el cliente DEBE usar para esa hora UTC (13:42:12 en este ejemplo), ese nombre de archivo y contenido, basado en esa clave compartida:
$realPasswd = hash('sha256', $timeString.$sharedKey.$filename.$content);
Luego, el servidor verifica $realPasswd
contra la contraseña enviada por el cliente (la llamada contraseña final a la que me referí anteriormente)
En mi entendimiento noobish, esta técnica debería ser bastante segura, ya que, aunque un atacante haya olfateado toda la solicitud, solo podrá enviar exactamente la misma solicitud y solo durante 1 minuto (porque la contraseña final cambiará para el siguiente minuto UTC).
No podrá modificar el nombre de archivo remoto o el contenido y podrá crear solicitudes aceptables por parte del servidor solo durante 1 minuto.
¿Cuál es tu opinión sobre esto?