javascript - google - Web services API Keys y Ajax-Asegurar la clave
google maps html5 (5)
¿Qué le parece usar jQuery para llamar al código del lado del servidor que maneja la comunicación con la API? Si está utilizando MVC puede llamar a una acción de controlador que puede contener el código y la clave API para acceder a su servicio y devolver una vista parcial (o incluso JSON) a su UX. Si está utilizando formularios web, puede crear una página aspx que hará la comunicación API en el código subyacente y luego escribir contenido en la secuencia de respuesta para que consuma su UX. Entonces su código UX puede contener algunas llamadas $ .post () o $ .load () a su código del lado del servidor y tanto su clave API como su punto final estarán protegidos.
Esta es probablemente una pregunta de seguridad genérica, pero pensé que podría preguntar en el ámbito de lo que estoy desarrollando.
El escenario es: Un servicio web (WCF Web Api) que usa una clave API para validar y decirme quién es el usuario, y una combinación de jQuery y aplicaciones en los frontales.
Por un lado, el tráfico puede ser https, por lo que no se puede inspeccionar, pero si utilizo la misma clave por usuario (por ejemplo, un guid), y lo estoy usando en ambos, existe la posibilidad de que se lo tome y alguien pueda suplantarlo. el usuario.
Si implemento algo similar a OAuth, se genera un usuario y una clave por aplicación, y eso podría funcionar, pero para el lado de jQuery necesitaría la clave API de la aplicación en el javascript.
Esto solo sería un problema si alguien estuviera en la computadora real e hiciera una fuente de visualización.
¿Que debería hacer?
- md5 o encriptar la clave de alguna manera?
- Coloque la clave en una variable de sesión, luego cuando use ajax, recupérela?
- Superarlo, no es un gran problema / problema.
Estoy seguro de que probablemente sea un problema común, por lo que cualquier sugerencia sería bienvenida.
Para aclarar esto , esta es mi API. He escrito que estoy consultando en contra, no en google, etc. Así que puedo hacer tokens por sesión, etc., solo estoy tratando de encontrar la mejor manera de asegurar el lado del cliente tokens / claves que usaría.
Estoy siendo un poco demasiado cauteloso aquí, pero solo uso esto para aprender.
(Sugiero etiquetar esta publicación como "seguridad").
En primer lugar, debe tener claro sobre lo que está protegiendo. ¿Puedes confiar en el cliente? Un usuario astuto podría pegar un script de Greasemonkey en su página y llamar exactamente el código que su UI llama para enviar solicitudes. Ocultar todo en un cierre de Javascript solo significa que necesita un depurador; no hace un ataque imposible. Firebug puede rastrear solicitudes HTTPS. Considere también un cliente comprometido: ¿hay un keylogger instalado? ¿El sistema completo se está virtualizando secretamente para que un atacante pueda inspeccionar cualquier parte de la memoria en cualquier momento cuando lo desee? La seguridad cuando estás tan expuesto como una aplicación web es realmente complicado.
Sin embargo, aquí hay algunas cosas que debe considerar:
Considere no usar claves en realidad, sino más bien hash HMAC de, por ejemplo, un token que otorga inmediatamente después de la autenticación.
El almacenamiento DOM puede ser un poco más difícil de detectar que las cookies.
Eche un vistazo a la implementación de OAuth 2 de Google para un ejemplo de modelo de seguridad. Básicamente, utiliza tokens que solo son válidos durante un tiempo limitado (y quizás para una sola dirección IP). De esa forma, incluso si el token es interceptado o clonado, solo es válido por un corto período de tiempo. Por supuesto, debes tener cuidado con lo que haces cuando se acaba el token; ¿un atacante podría hacer lo mismo que tu código y obtener un nuevo token válido?
No descuides la seguridad del lado del servidor: incluso si tu cliente debería haber verificado antes de enviar la solicitud, verifica nuevamente en el servidor si el usuario realmente tiene permiso para hacer lo que está pidiendo. De hecho, este consejo puede obviar la mayoría de los anteriores.
Depende de cómo se usa la clave API. Las claves de API como la proporcionada por Google están vinculadas a la URL del sitio que origina la solicitud; si intentas utilizar la clave en un sitio con una URL alternativa, el servicio arroja un error que elimina la necesidad de proteger la clave en el lado del cliente.
Sin embargo, algunas API básicas están vinculadas a un cliente y se pueden usar en varios dominios, por lo que en esta instancia ya he utilizado la práctica de incluir esta API en el código del servidor y restringir el modo en que el cliente puede comunicarse con el servicio local. y protegiendo el servicio.
Sin embargo, mi recomendación general sería aplicar restricciones en la API web sobre cómo se pueden usar las claves y, por lo tanto, se eliminan las complicaciones y la necesidad de tratar de protegerlas en el cliente.
Generalmente, en casos como este, las solicitudes de proxy a través del servidor que utilizan ''AJAX'' que verifica que el navegador que realiza las solicitudes está autorizado a hacerlo. Si desea llamar al servicio directamente desde JavaScript, necesita algún tipo de sistema de token como JSON Web Tokens (JWT) y tendrá que resolver problemas entre dominios si el servicio se encuentra en otro lugar que no sea el dominio actual.
ver http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx para más información información (Cómo verificar la clave API para los servicios REST en .NET 4)