Seguridad API

How

Para comenzar, necesitamos comprender la función que desempeña la solicitud de introspección en GraphQL. Para simplificar, tener una petición de introspección en GraphQL significa que tenemos una ruta para investigar la arquitectura de una API GraphQL. Esto se presenta como una gran herramienta para los programadores que requieren comprender la disposición de los datos con los que se encuentran laborando. Sin embargo, en un ambiente de producción, si se permite su funcionamiento, puede transformarse en una brecha de seguridad.
What is GraphQL Schema

Apagado de la petición de introspección en el servidor

La manera más precisa y directa de apagar la petición de introspección es hacerlo desde el servidor. Dependiendo del idioma de programación y el framework en uso, existen diferentes métodos para lograrlo.

Por ejemplo, si estás trabajando con Apollo Server (un servidor GraphQL ampliamente utilizado para JavaScript), puedes desactivar la petición de introspección ajustando la opción de introspection a false durante la creación de tu servidor. Este es un modelo de cómo se hace:

<code class="language-javascript">const server = new ApolloServer({
  typeDefs,
  resolvers,
  introspection: false,
});

server.listen().then(({ url }) =&gt; {
  console.log(`🚀  Server ready at ${url}`);
});</code>

En este fragmento de código, typeDefs y resolvers son tus definiciones de tipo y resolutores GraphQL, respectivamente. Al ajustar introspection a false, estás desactivando la posibilidad de realizar peticiones de introspección en tu servidor.

`

 

`

Apagado de la petición de introspección en el middleware

Otra técnica para desactivar la petición de introspección es en el nivel del middleware. Esta opción puede ser valiosa cuando se utiliza un servidor que no ofrece una opción para deshabilitar directamente la petición de introspección.

Por ejemplo, si estás utilizando Express.js como tu servidor, puedes emplear un middleware para capturar y detener las peticiones de introspección antes de llegar a tu servidor GraphQL. Te muestro cómo hacerlo:

<code class="language-javascript">app.use(&#039;/graphql&#039;, (req, res, next) =&gt; {
  if (req.body.operationName === &#039;IntrospectionQuery&#039;) {
    res.status(400).json({ error: &#039;Introspection is disabled&#039; });
  } else {
    next();
  }
});</code>

En este fragmento de código, app es tu aplicación Express.js. Al aplicar el método use de Express.js, estás incluyendo un middleware que se ejecuta antes de que las consultas lleguen a tu servidor GraphQL. Este middleware verifica si la operación requerida es una petición de introspección y si es así, devuelve un error.

Aspectos de seguridad a considerar

Es esencial considerar que deshabilitar la petición de introspección no equivale a una solución de seguridad total. Aunque puede prevenir ciertos tipos de ataques, no ofrece protección contra otros tipos de amenazas a la seguridad.

Por ejemplo, un invasor aún podría intentar deducir los nombres de tus tipos y campos y realizar peticiones o mutaciones no autorizadas. Por lo tanto, es necesario que implementes otras medidas de seguridad, como autenticación y autorización, para resguardar tu API GraphQL.

En resumen, aunque deshabilitar la petición de introspección puede ser un elemento crucial de tu estrategia de seguridad para tu API GraphQL, deberías complementarla con otras medidas para obtener una protección completa.

This post is also available in: 日本語 (Japonés)