2012-07-13 14 views
21

Por lo tanto, estoy desarrollando una pequeña aplicación para mi propio uso y tal vez un proyecto de código abierto en Git. Estoy usando una API de Envato Marketplaces, y como todos ustedes saben, hay algunas operaciones que no requieren ninguna clave, pero al mismo tiempo hay algunas que sí lo requieren.¿Cómo proteger una clave API cuando se usa JavaScript?

Primero hice un buen envoltorio API para la API Envato en PHP, pero luego decidí experimentar un poco con JavaScript, así que estoy desarrollando el mismo envoltorio con JavaScript. Hasta ahora no tengo problemas con las operaciones públicas, pero ahora tengo que usar la clave API.

Mi pregunta sería si hay una forma de proteger la clave de API en JavaScript. No puedo simplemente ponerlo allí en texto simple, ya que puede ser utilizado por otros que ven el código. Entonces, ¿habría una implementación donde la API permanezca en secreto? Tal vez agarrarlo de un archivo de texto JSON con XHR?

+3

Haga que sus llamadas javascript interactúen con el lado del servidor php para llamar a los métodos que requieren privacidad. – asawyer

+1

@asawyer: debe poner eso como una respuesta – Dancrumb

+0

@asawyer - Esa es la cuestión, ya lo estoy haciendo con PHP, ahora estoy tratando de hacerlo solo con JS. ¿Entonces hacerlo solo con JS sería imposible? ¿Qué pasa si hago una llamada que toma la clave de un archivo JSON con XHR y luego la paso al método? – Roland

Respuesta

18

Respuesta corta: No

cosa que hagas para ofuscar la clave, usted todavía tiene que enviarlo para que esté disponible en el cliente de alguna manera, y por lo tanto será posible extraer usando fx. Firebug.

Incluso si ideó una forma mágica impresionante de mantener la clave en secreto, en algún momento tendría que hacer la solicitud API real, y como debería enviarse desde el navegador, un atacante sería capaz de lea la clave en texto sin formato de la pestaña de redes de Firebugs.

Lo correcto es crear un envoltorio PHP alrededor de las llamadas API que requieren claves y luego llamar a ese envoltorio desde Javascript.

+9

La clave estará protegida pero la operación no. Un ladrón no necesita la llave si la puerta se deja abierta. –

+2

¿Puede el envoltorio de PHP exigir que las solicitudes se originen desde el mismo dominio? ¿Cuál es la relación de esto con la "política del mismo origen"? Parece que no es factible determinar el solicitante: http://stackoverflow.com/questions/1153967/php-source-hostname-of-a-get-request ...? – Toph

+1

¿Cómo cambiaría el envoltorio algo? –

Cuestiones relacionadas