22 votos

¿Cómo asegurar el acceso no autorizado a WMS?

En un proyecto el cliente desea que las imágenes del WMS estén protegidas contra acceso no autorizado.

¿Cuáles son las soluciones comunes para lograr eso?

¿Son compatibles con los estándares de la OGC?

17voto

Nate Puntos 220

La especificación OGC solo exige el uso de http. Si es http compatible, debería estar bien.

Algunos métodos posibles:

  • Autenticación básica HTTP (contraseña enviada como texto plano, puede tener soporte limitado por parte del cliente)
  • Autenticación digest HTTP (más segura, puede tener soporte limitado por parte del cliente)
  • Filtrar la dirección IP del cliente (fácil de implementar pero no particularmente segura).
  • URL secreta. Usa un GUID para generar una URL no adivinable. Supone que los clientes mantendrán la URL en secreto. Mucho más simple para el usuario que entrar una contraseña. Soporte garantizado por parte del cliente.

11voto

saint_groceon Puntos 2696

Este post de OGC de 2005 dice:

No hay aspectos de seguridad específicos que formen parte de las Especificaciones de Interfaz OGC WMS/WFS/WCS. En su lugar, la seguridad y la autenticación se manejan mejor en otra capa de la pila de procesamiento.

4voto

Brian R. Bondy Puntos 1715

Si la seguridad a través de la oscuridad es suficiente para tus propósitos, podrías configurar una extensión falsa para la capa:

Solo usa coordenadas en el otro lado de la Tierra. La capa seguirá apareciendo en la lista de capas, las solicitudes seguirán siendo posibles, pero si un usuario simplemente la selecciona en un software SIG y elige "acercar a la capa", no verá nada y podría pensar que esta capa está simplemente vacía o no funciona. Una aplicación que conozca la extensión correcta de la capa todavía debería poder acceder a ella.

Ya he visto esta solución aplicada en algunos sitios WMS, pero probablemente no sea completamente conforme a los estándares de OGC, ya que el servidor devuelve una extensión incorrecta.

4voto

Alex Puntos 18

Suponiendo que tienes lo siguiente:

Puedes crear una tabla api_keys con columnas access_token y expires_at. Luego agregar un parámetro de cadena de consulta &api_key=my_unique_key. Tu archivo Mapfile para el índice de teselas (ver ejemplo) estaría configurado algo así:

DATA "geom FROM (
  SELECT
   my_table.geom,
   my_table.gid,
  api_keys.access_token
  FROM my_table
  CROSS JOIN api_keys
  WHERE ST_Intersects(geom, !BOX!) and api_keys.expires_at > now()
) AS subquery USING UNIQUE gid USING SRID=4326"
FILTER "access_token = '%api_key%'
VALIDATION
  'api_key' '^[a-zA-Z0-9\_\-]{33}$'
  'default_api_key' ''
END

La idea es que tu aplicación separada que autentica usuarios en la base de datos actualice la tabla api_keys, estableciendo access_token como un hash md5 y mantenga actualizada la columna expires_at hasta algún momento en el futuro.

Alternativamente, puedes hacer un proxy del tráfico a un marco de trabajo separado que maneje la autenticación de WMS/OWS y haga de intermediario para usuarios autorizados al Mapserver interno. Aquí tienes una lista obtenida de un mensaje en la lista de correos de mapserver-users, que es una lista ampliada/resumida de lo que otros han respondido a esta pregunta.

Si alguna vez decides utilizar Geoserver, echa un vistazo al módulo AuthKey.

3voto

Ryan Ahearn Puntos 3829

Puede requerir que los usuarios se conecten al WMS a través de HTTP asegurado por una VPN. Coloca la capa de seguridad en el nivel de la red IP, pero ciertamente agrega complejidad.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X