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…
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:
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.
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…
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…
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…