Saat menggunakan `whenloaded ()` di graphql, yang biasanya merupakan metode untuk memuat data atau asosiasi terkait secara kondisional (mis., Dalam graphQL resolvers berbasis ORM), beberapa jebakan keamanan umum dapat muncul. Jebakan ini sebagian besar berkaitan dengan masalah keamanan graphQL yang lebih luas tetapi sangat relevan karena `whenloaded ()` sering melibatkan pengambilan data bersarang atau terkait tambahan, meningkatkan kompleksitas dan risiko.
jebakan keamanan umum dengan `whenloaded ()` di graphql
** 1. Cek otorisasi yang tidak konsisten atau hilang
`whenloaded ()` Sering memicu pemuatan data bersarang atau terkait setelah resolver awal berjalan. Jika logika otorisasi tidak diterapkan secara konsisten di setiap resolver atau titik pemuatan data (termasuk yang dipicu oleh `whenloaded ()`), pengguna yang tidak sah dapat mendapatkan akses ke data sensitif. Ini adalah masalah umum di mana beberapa jalur ke data yang sama dilindungi, tetapi yang lain (seperti yang melalui `waphloaded ()`) tidak, memungkinkan penyerang untuk memotong kontrol akses [4] [6]. Otorisasi harus ditegakkan baik di tingkat kueri dan di dalam semua pemecah atau loader data bersarang.
** 2. Over-fetching dan pertanyaan kompleks yang mengarah ke penolakan layanan (DOS)
Menggunakan `whenloaded ()` dapat menyebabkan pertanyaan bersarang yang mengambil sejumlah besar data terkait. Penyerang dapat mengeksploitasi ini dengan membuat pertanyaan yang menyebabkan pemuatan dan pemrosesan data yang berlebihan, yang mengarah ke kelelahan sumber daya dan DOS. Kemampuan GraphQL untuk mengambil beberapa objek terkait dalam satu kueri membuatnya menantang untuk memprediksi penggunaan sumber daya, dan `whenloaded ()` dapat memperburuk ini dengan memuat data tambahan secara kondisional [4] [5]. Mitigasi termasuk pembatasan kedalaman kueri, penilaian kompleksitas, dan pembatasan laju.
** 3. Paparan data sensitif melalui pemilihan bidang yang tidak tepat
Jika `whenloaded ()` memuat data terkait tanpa kontrol yang cermat terhadap bidang mana yang diekspos, informasi sensitif seperti kata sandi, token, atau detail pengguna pribadi dapat dikembalikan secara tidak sengaja dalam respons graphQL [5]. Risiko ini meningkat jika pemeriksaan otorisasi tidak ada atau jika pesan kesalahan bocor informasi sensitif. Pengembang harus memastikan bahwa bidang sensitif tidak pernah terpapar, bahkan ketika data bersarang dimuat.
** 4. Serangan injeksi melalui validasi input yang tidak tepat
Ketika `whenloaded ()` digunakan dengan argumen atau filter dinamis, validasi input yang tidak tepat dapat menyebabkan kerentanan injeksi, seperti injeksi kueri graphQL atau bahkan injeksi SQL jika pengambilan data yang mendasarinya tidak diparameterisasi dengan benar [6]. Penyerang dapat menyuntikkan kueri jahat atau perintah yang memanipulasi data pengambilan data. Validasi input yang tepat dan penggunaan kueri parameter sangat penting.
** 5. Melewati laju pembatasan dan perlindungan brute force
Karena `whenloaded ()` dapat menyebabkan beberapa data bersarang mengambil dalam satu kueri, penyerang dapat mengeksploitasi ini untuk memotong pembatasan tingkat tradisional. Sebagai contoh, mereka dapat mengirim satu kueri kompleks tunggal yang memicu banyak data mengambil atau mutasi, secara efektif melakukan serangan brute atau enumerasi tanpa memicu batas per-permintaan [4] [7]. Strategi pembatas tingkat harus mempertimbangkan kompleksitas kueri dan operasi bersarang.
** 6. Peningkatan permukaan serangan karena introspeksi dan perkakas skema
Penggunaan `whenloaded ()` sering mencerminkan skema kompleks dengan banyak hubungan bersarang. Penyerang dapat menggunakan introspeksi graphql dan alat -alat seperti GraphiQL untuk menemukan hubungan ini dan membuat pertanyaan yang mengeksploitasi `whenloaded ()` untuk mengakses data yang tidak diinginkan [1] [8]. Menonaktifkan introspeksi dalam produksi atau membatasi untuk pengguna yang berwenang dapat mengurangi risiko ini.
Ringkasan
Jebakan keamanan utama saat menggunakan `whenloaded ()` di graphql berputar di sekitar:
- Gagal menegakkan otorisasi yang konsisten pada semua jalur pemuatan data bersarang.
- Mengizinkan kueri yang terlalu kompleks atau dalam yang menyebabkan DOS.
- Mengekspos data sensitif melalui bidang bersarang.
- Validasi input yang tidak mencukupi yang mengarah ke serangan injeksi.
- Memintas batas tingkat karena pertanyaan bersarang yang kompleks.
- Peningkatan paparan akibat introspeksi dan perkakas skema.
Mitigasi mencakup pemeriksaan otorisasi yang ketat di setiap resolver, kompleksitas permintaan dan pembatasan kedalaman, validasi input yang ketat, desain skema yang cermat, melumpuhkan introspeksi dalam produksi, dan pembatasan tingkat komprehensif yang disesuaikan untuk struktur kueri GraphQL [3] [4] [5] [6] [8].
Kutipan:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerability-common-attacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerability-and-how-to-mitigate-the-risks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_most_common_graphql_vulnerability_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerability.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-graphql