Living With Chronic Pain? Quality Sleep Might Be The Key To Managing Your Pain.

Over half of adults over the age of 60 experience chronic pain. Chronic pain is defined as any pain lasting longer than 3 months and is a very different experience for your brain than acute pain. And…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




Disable GraphQL Introspection pada Reverse Proxy

GraphQL Introspection pada dasarnya adalah fitur yang dapat memudahkan bagi siapa saja yang ingin berinteraksi dengan GraphQL API, karena dengan fitur inspeksi kita dapat mengetahui resource apa saja yang tersedia pada schema-nya seperti query, type, field dan lain sebagainya.

Contoh, jika kita ingin mengetahui type apa saja yang tersedia di dalam sebuah GraphQL API, maka kita cukup mengirimkan query seperti berikut:

Maka, pada GraphQL API yang mengaktifkan fitur Introspection akan mengirimkan respon berupa type apa saja yang tersedia pada endpoint tersebut:

Untuk beberapa kasus, fitur ini adalah sesuatu yang memudahkan, salah satunya pada endpoint yang bersifat open yang semua orang diperbolehkan untuk menggunakannya. Keuntungannya, tidak harus banyak menulis dokumentasi teknis karena dengan mudah kita bisa mendapatkannya, bahkan dapat mencobanya dengan GraphQL Playground ataupun GraphiQL.

Namun, jika hal tersebut diaktifkan pada API yang sifatnya private dan hanya source dengan kriteria tertentu saja yang dapat menggunakannya, maka perlu menjadi pertimbangan apakah fitur Introspection tersebut benar-benar harus diaktifkan atau tidak. Karena tentu saja ini dapat menjadi Security Hole yang dapat dimanfaatkan oleh pihak-pihak yang tidak bertanggung jawab.

Penanggulangannya tentu saja dengan menonaktifkan fitur GraphQL Introspection. Pada library atau framework yang memungkinkan kita untuk membangun sebuah GraphQL server, fitur tersebut biasanya by default disediakan. Misalnya sebuah server GraphQL yang dibangun menggunakan Apollo yang running diatas Node JS, kita hanya perlu menonaktifkan introspection pada bagian konfigurasi:

Namun, bagaimana jika fitur tersebut tidak tersedia?

Sejak GraphQL populer, banyak tool yang berkaitan dengan hal itu tersedia. Salah satu jenis tool yang juga cukup populer adalah hadirnya PaaS, BaaS, DBaaS maupun SaaS yang menawarkan solusi instant GraphQL untuk kebutuhan development, baik yang sifat nya open-source maupun yang closed-source. Sehingga kita dapat lebih fokus pada pengembangan produk tanpa memikirkan kompleksitas teknis khususnya pada layer data. Layanan-layanan tersebut misalnya Fauna, Hasura, Supabase, Strapi, Nhost dan banyak lagi yang lainnya. Beberapa diantaranya ada yang menyediakan fitur tersebut by default, ada juga yang ketersediannya melalui sebuah mekanisme upgrade layanan. Contohnya pada Hasura, fitur tersebut hanya tersedia untuk pengguna cloud dan enterprise.

Kita akan coba lakukan Proof of Concept ini pada Nginx yang bertindak sebagai Reverse Proxy. Untuk intercept lalu validate request body pada setiap request, kita akan menggunakan js module sebagai tool nya.

Pertama, pasang js module atau njs (Nginx JavaScript) pada nginx:

Edit file konfigurasi Nginx:

Load module njs pada file konfigurasi

Lalu wrap konfigurasi dengan scope http

Buat file JavaScript pada /etc/nginx/njs/introspect.js

Buat sebuah fungsi dengan parameter r yang akan kita pakai untuk mengolah request (r = request).

Pertama, kita cek apakah request method nya post atau bukan

Jika request nya bukan bersifat introspeksi, maka teruskan request ke GraphQL server

Maka file lengkap introspect.js adalah sebagai berikut:

Kembali lagi ke file konfigurasi, pada scope http, import introspect.js yang telah dibuat tadi

Lalu uat upstream yang mengarah ke server backend dimana GraphQL server di serve

Selanjutnya, pada scope server, buat dua buah location: / sebagai root dan @app-backend sebagai variable yang diakses dari file js tadi.

Pada root diarahkan ke fungsi pada introspect.js untuk divalidasi apakah request berupa introspeksi atau bukan. Lalu pada @app-backend diarahkan ke server GraphQL.

Jangan lupa untuk memakai SSL dan redirect http-nya.

File lengkap /etc/nginx/nginx.conf adalah sebagai berikut:

Cek apakah konfigurasi-nya tepat atau tidak:

Restart nginx

Terakhir, lakukan request introspeksi, maka hasilnya akan seperti berikut:

Request Introspection

Selamat, GraphQL Introspection sudah dinonaktifkan via reverse proxy. Implementasinya dapat berbeda pada setiap reverse proxy. Yang harus kamu concern adalah bagaimana intercept, validate atau bahkan modifikasi setiap request pada reverse proxy. Jika ketemu, maka sesuaikan workaround nya dengan kerangka yang sama seperti pada implementasi.

Add a comment

Related posts:

PELAJAR INGIN BERBISNIS ONLINE? INI DIA BISNIS ONLINE YANG COCOK UNTUK PELAJAR!

Kata siapa melakukan bisnis harus diawali sesudah memperoleh gelar Sarjana? Banyak orang di luar sana tanpa ada pendidikan spesial juga rupanya bisa melakukan bisnis seperti bisnis online. Alasannya…

How do Marketing Automation tools work?

There are a number of benefits associated with marketing automation tools. In addition to mass marketing, search engine optimization, and lead generation, marketing automation tools offer a wide…

Steam is No Longer Accepting Bitcoin

As reported previously by IGN and Gizmodo, the PC gaming giant Steam is no longer accepting Bitcoin as a payment method on their platform. The news coincided with the digital currency breaking its…