2012-02-17 16 views
5

Quiero configurar una máquina en mi red para aceptar todas las llamadas desde una máquina específica sin autenticación. Para esto estoy planeando usar la dirección IP de la máquina cliente como el factor de confianza requerido para permitir la autenticación no verificada.¿Es posible determinar con precisión la dirección IP de un cliente en servlet java

Mi preocupación es que es posible determinar con precisión la dirección IP de un cliente en un servlet Java? ¿Es posible que la IP que obtengo en el servlet pueda ser cambiada por algún mecanismo de piratería para hacer que mi servidor crea que es la IP confiable?

Por ejemplo, si mi máquina servidor está configurada para confiar en 192.168.0.1, entonces ¿es posible que otro cliente que no sea 192.168.0.1 pretenda ser 192.168.0.1 y engañar a mi mecanismo de autenticación?

Respuesta

14

Puede usar el método getRemoteAddr() de la clase HttpServletRequest para obtener la dirección IP. Ten cuidado, sin embargo. Si su cliente está detrás de un servidor proxy (o incluso un firewall NATting), obtendrá la dirección IP del proxy en su lugar.

Por lo tanto, también puede buscar el encabezado HTTP X-Forwarded-For (estándar para identificar la dirección IP de origen de un cliente detrás de un proxy HTTP). Ver más en Wikipedia. Ten cuidado, sin embargo. Si su cliente NO está detrás de un proxy, puede obtener un encabezado XFF nulo. Por lo tanto, si va a seguir este camino, debe usar una combinación de los métodos de servlet y la evaluación del encabezado XFF. Sin embargo, no hay garantía de que el proxy le envíe el encabezado.

Pero tenga en cuenta que cualquier cliente malintencionado puede cambiar o falsificar fácilmente la dirección IP de origen. Realmente recomiendo usar algún tipo de autenticación de cliente (un certificado, por ejemplo). No hay forma de que una aplicación web con precisión determine la dirección IP del cliente.

+0

y +1 por mencionar el encabezado XFF y la posibilidad de que sea nulo – stevevls

+0

¿cómo funciona la autenticación del cliente? ¿Puede el cliente enviar un certificado similar al que envía el servidor en la comunicación https para identificarse a sí mismo, podría proporcionarnos algunos detalles al respecto? – Ashish

+1

Puede generar un certificado de cliente autofirmado e instalarlo en el almacén de claves de su máquina cliente (¿está utilizando Java en su cliente también?). Entonces, su servidor solo debe aceptar solicitudes firmadas por certificados de cliente de una CA determinada (usted mismo, en este caso). Existe una gran cantidad de documentación con respecto a los certificados de Java + cliente en la web. Además, eche un vistazo a la excelente [entrada de Wikipedia] (http://en.wikipedia.org/wiki/Transport_Layer_Security) en TLS para obtener información básica. – Viccari

0

IPs se pueden fingir fácilmente como los remitentes de correo electrónico. Le sugiero que no confíe solo en ellos.

+0

No es tan fácil como el remitente del correo, cuando responde a la dirección IP especificada. Entonces, el verdadero problema es desconfiar de la fuente IP en caso de acciones, pero puede confiar en ellas al proporcionar información – Hurda

+1

Sí, elevé la respuesta de stevelvs porque hace la distinción entre escrituras y solo lectura. Por cierto. El remitente del correo es exactamente el mismo porque no puede recibir la respuesta en ambos casos. – wintersolutions

7

Su servicio podría ser vulnerable a IP Spoofing. Es fácil forjar paquetes que parecen ser de una dirección IP diferente. Sin embargo, la cuestión de la suplantación de identidad es que el atacante no podrá recibir ningún paquete de respuesta. Por lo tanto, si llamar a sus servicios no causa un cambio de estado interno (es decir, es , solo lectura), entonces debería estar bien. Sin embargo, si las llamadas a su servicio emitirán escribe, entonces no debe confiar solo en la dirección IP porque un paquete falsificado será suficiente para cambiar el estado interno de su sistema.

+0

+1 para traer los efectos de lectura vs. escritura. – Viccari

+0

podría proporcionar alguna forma de cómo puedo lograr la funcionalidad deseada, es decir, confiar en una máquina en mi red. – Ashish

+0

parte de lo que podría querer hacer es decidir sobre el nivel aceptable de riesgo equilibrado con la cantidad de ciclos que tiene que bloquearlo. si eres un banco, entonces debes asegurarte de que sea sólido como una roca, pero otras aplicaciones tienen más tolerancia. Una opción es asegurarse de que no está sujeto a una IP pública y confiar en los administradores de su sistema para mantener la red local bloqueada. si realmente necesita protegerlo, las sugerencias de viccaris de usar certificados de cliente son buenas si necesita bloquearlo. Hagas lo que hagas, si vas más allá de la verificación de IP, asegúrate de que puedes revocar el acceso fácilmente. – stevevls

2

Puede ser localmente sospechoso en ARP Spoofing. Donde una máquina maliciosa convence al enrutador para asociar la dirección IP con su dirección MAC.

El nivel y el mecanismo de confianza en realidad depende de la sensibilidad del servidor/servicio que está tratando de proteger y el medio ambiente se está operando en.

A mi me parece que este es un arreglo local dada la privada Rango de la dirección IP 192.168. Si este servidor no es público, no es crítico y está operando en un entorno LAN relativamente seguro que está bien desconectado del público y otras LANS privadas, entonces debería estar bien. De lo contrario, debería considerar otras opciones de seguridad en un nivel superior.

+0

buen punto. No (todavía) he pasado mucho tiempo preocupándome por los usuarios maliciosos en la red local, aunque definitivamente se sabe que suceda y es una buena idea para protegerse. :) – stevevls

+0

El rango de 192.168 ip no será llevado por ningún enrutador público. Entonces cualquier amenaza tendrá que venir internamente –

1

Mi preocupación es que es posible determinar con precisión la dirección IP de un cliente en un servlet de Java?

No, no es posible. Hay una serie de situaciones en las que no verá la dirección IP del cliente real debido a las acciones del usuario u otras razones que están fuera del control del usuario.

En estos últimos casos, la identificación basada en IP termina causando dolores de cabeza a sus clientes honestos; es decir, los clientes que realmente desea conservar.

Si realmente necesita limitar el acceso a un conjunto específico de computadoras, debe considerar el uso de algo como SSL/TLS con certificados del cliente como primera línea de defensa. TLS con certificados de cliente se describe here.

Cuestiones relacionadas