¿Es peligroso exponer mi API KEY de Firebase en proyecto Web con el SDK de Javascript? ¿Cómo podría protegerla?

publicado por: Anonymous

Este es el código que indica Firebase para configurar una App Web que pueda leer datos de Real Time Database con el SDK de Javascript:

  // Set the configuration for your app
  // TODO: Replace with your project's config object
  var config = {
    apiKey: "apiKey",
    authDomain: "projectId.firebaseapp.com",
    databaseURL: "https://databaseName.firebaseio.com",
    storageBucket: "bucket.appspot.com"
  };
  firebase.initializeApp(config);

  // Get a reference to the database service
  var database = firebase.database();

Quisiera hacer una implementación de en un sitio web con hosting compartido. He probado el código con mis datos y funciona.

Pero como se puede apreciar, la APIKEY del proyecto y la URL de la base de datos quedarían expuestas en el cliente.

  • ¿Esto es peligroso? ¿Qué posibles peligros podría haber?
  • ¿Hay alguna forma de evitarlo? (Tendría que usar el SDK de Javascript, no sé usar Node o similares y quiero mostrar los datos en una página web normal que ya existe en WordPress. Podría hacerlo con PHP, pero no encontré nada sobre PHP en Firebase).

solución

El peligro que puede tener es que si tu API está visible, cualquier persona podría copiarla y usarla para hacer peticiones y llegar a tu límite (lo cual implicaría que las peticiones dejarían de funcionar o se te pasaría una factura, dependiendo del tipo de servicio que tengas).

Si es un proyecto privado, puedes (debes) incluir en el contrato que todo el código (incluyendo claves de API) te pertenece y el cliente no lo puede usar. Aunque eso no es tan sencillo cuando es una aplicación abierta a Internet.

Para evitar ese robo de claves, muchas APIs (como por ejemplo las de Google o Facebook) permiten restringir el acceso a una serie de dominios. Entonces si se intenta acceder a la API fuera del host indicado, la petición será rechazada.

En Google (el caso de Firebase que indicas) puedes restringir los HTTP referrers para que sólo se admitan peticiones desde ciertos dominios. Los pasos a seguir para crear una API restringida serían los siguientes:

  1. Ve a la consola de desarrolladores de Google.
  2. Pulsa en Credenciales
    introducir la descripción de la imagen aquí
  3. Opcional: Si no tienes un proyecto, debes crear uno.
  4. Pulsa en el botón de “Crear Credenciales” y selecciona “API Key”
    introducir la descripción de la imagen aquí
  5. Pulsa en “Restringir Clave”
  6. En el menú que te aparece en la siguiente página, selecciona la opción “HTTP Referrers”:
    introducir la descripción de la imagen aquí
  7. En la caja de texto que aparece abajo, introduce los dominios que quieres que tengan acceso a tu clave de API (puedes usar “expresiones regulares” para incluir múltiples dominios/subdominios)
  8. Pulsa en Guardar

Ahora, sólo los dominios especificados en la lista tendrán acceso a tu clave de API.

Puedes dejar la caja de texto vacía para no tener restricciones mientras estás desarrollando y probando tu aplicación, pero es importante añadir una lista de dominios antes de mover la aplicación a producción.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *