¿Cómo podemos restringir el acceso a un servicio web a computadoras cliente específicas?

¿Cómo podemos restringir el acceso a un servicio web a computadoras cliente específicas?

Tenemos una aplicación web (Apache/PHP) que actualmente utiliza autenticación de nombre de usuario/contraseña y actualmente es accesible desde cualquier lugar. Tiene habilitado SSL del lado del servidor.

Nuestro programa cliente es una versión de Firefox que hemos modificado y renombrado. Este cliente Firefox modificado está destinado únicamente a conectarse a nuestro servidor de aplicaciones web. Los usuarios deben utilizar este programa cliente para conectarse al servicio web.

Además de la autenticación de usuario, nos gustaría bloquear el acceso a nivel de servidor a cualquier persona que no esté utilizando nuestro programa cliente*. Entonces, si un usuario ingresa un URI usando un navegador normal, se le negará directamente.

Para lograr esto, el programa cliente debe identificarse ante el servidor para que éste sepa que se está utilizando nuestro programa cliente y no un navegador web o un bot.

*El objetivo real es asegurarse de que sean empleados autorizados de nuestra empresa antes de poder intentar iniciar sesión. Incrustar esta "prueba de empleo" en el programa del cliente parece ser la forma más fácil de hacerlo, ya que la aplicación es Solo se entrega a personas que necesitan usarlo.

Hasta ahora, he tenido algunas ideas sobre cómo lograr esto.

1.) Incruste un tolken en la aplicación cliente que se envía cuando el cliente inicia sesión (el inicio de sesión se maneja mediante una interfaz Chrome/XUL). Esto no se bloquearía a nivel de servidor, solo a nivel de aplicación. La clave podría robarse tan fácilmente como una contraseña, pero no adivinarse por fuerza bruta tan fácilmente, ya que podría tener cualquier longitud o complejidad.

1a.) Agregue un parámetro tolken especial al encabezado del navegador del cliente en todas las solicitudes. Esto se parece más a la seguridad a través de la oscuridad, pero ciertamente podría ralentizar a un atacante que intenta forzar contraseñas por fuerza bruta si el inicio de sesión siempre falla (incluso con la contraseña correcta) cuando falta la cadena mágica en la solicitud.

2.) Incruste un certificado SSL de cliente en el programa cliente. Parece que podría ser una buena solución, pero la buena documentación sobre SSL del lado del cliente es casi inexistente. NO querríamos firmar un certificado para cada usuario, ni querríamos que el usuario tuviera que crear un certificado o que se molestara en absoluto con los diálogos de seguridad. La clave privada tendría que estar incrustada en el navegador y sería una clave compartida entre todos los programas cliente y distribuida previamente instalada en nuestro navegador personalizado.

3.) Verifique la cadena del agente de usuario. Creo que Apache puede restringir en función de esto. Pero, en el mejor de los casos, parece una medida débil. Probablemente haría esto además de otras medidas.

¿Espero tener una mejor idea sobre cómo hacer esto?

Respuesta1

Incluir un certificado SSL de cliente con el navegador modificado sería más fácil y probablemente más seguro.

Si usa la misma clave para todos, perderá muchas de las ventajas de los certificados de cliente, pero es mejor que verificar useragent. Y supongo que aún necesitarás un nombre de usuario y contraseña para iniciar sesión.

Respuesta2

¿Has pensado en VPN? Eso suena exactamente como lo que realmente quieres.

información relacionada