Bagi mereka yang tidak terbiasa dengan “MySejahtera”, deskripsi resmi dari aplikasi ini adalah sebagai berikut:
MySejahtera adalah aplikasi yang dikembangkan oleh Pemerintah Malaysia untuk membantu memantau wabah COVID-19 di negara tersebut dengan memberdayakan pengguna untuk menilai risiko kesehatan mereka terhadap COVID-19. Aplikasi ini juga memberikan informasi yang diperlukan Kementerian Kesehatan (Depkes) untuk merencanakan tindakan pencegahan dini dan efektif.
Ayo Tes PCR
Sementara saya hanya memiliki pengalaman singkat dengan aplikasi selama sekitar 2 bulan ketika saya berada di Malaysia tahun lalu, saya akan mengatakan aplikasi telah mencapai tujuannya mengingat waktu yang digunakan untuk mengembangkan aplikasi.
Masalah saya dimulai ketika saya mengetahui bahwa mereka yang menerima vaksin COVID-19 di luar negeri dapat mengajukan permohonan sertifikat digital melalui helpdesk “MySejahtera”.
Saya mengikuti instruksi dan diarahkan ke alamat berikut (aplikasi web).
https://mysejahtera.malaysia.gov.my/help_en/
Saya harus mengisi informasi yang relevan, seperti tanggal vaksinasi, nomor batch dll. Semuanya tampak berfungsi dengan baik sampai tidak. Saya mendapatkan kesalahan samar yang mengatakan file saya bukan file PDF ketika saya mencoba mengirimkan permintaan saya.
Awalnya, saya pikir ada yang salah dengan browser saya, jadi saya beralih ke Edge, dan mendapatkan kesalahan yang sama. Ada beberapa keluhan di grup Facebook juga, di mana sebagian besar pengguna akhirnya mengirimkan tangkapan layar sertifikat vaksinasi mereka.
Mengenakan topi detektif saya, saya membuka Alat Pengembang Chrome lama yang bagus dan menggali kodenya.
Oke, jadi sekarang kita tahu bahwa fungsi validationAndSubmitVaccinationOverseasRequest() dipanggil saat tombol submit diklik.
validasiAndSubmitVaccinationOverseasRequest() lalu memanggil validasiUploadFile() untuk memvalidasi jenis file.
Jadi validasiUploadFile() sedang memeriksa jenis file dengan memeriksa bagian ekstensi (akhiran) dari nama file, yang juga akan saya lakukan untuk validasi sisi klien.
Dan yang membuat saya ngeri, pelakunya sebenarnya ada di array fileExtArr string dari ekstensi yang diizinkan. Jadi seseorang mungkin lupa menambahkan string “pdf” itu. Bukan masalah besar, kesalahan konyol seperti ini terjadi sesekali.
Tidak sampai saya menyadari bahwa pengembang mungkin belum sepenuhnya menguji fitur yang dikirimkan. Tes unit sederhana akan dilakukan dengan cara ini sebelum diproduksi. Saya telah mengirimkan deskripsi kesalahan melalui helpdesk agar mereka dapat memperbaikinya.
Apa berikutnya?
Apa yang harus dilakukan sambil menunggu perbaikan? Bisakah saya mengirimkannya langsung melalui titik akhir API?
Jawabannya adalah ya, ini adalah permintaan POST dan titik akhirnya adalah
https://mysejahtera.malaysia.gov.my/register/v2/rest/contactSupport
Bukan cara yang paling jelas untuk mengidentifikasi sumber daya per RESTful API, tapi saya bisa hidup dengan ini.
Permintaan posting sederhana, dan biola! Saya telah berhasil mengirimkan permintaan saya!
Ada beberapa keanehan yang saya temukan.
1. Semua informasi yang diisi dalam permintaan disimpan dalam konten sebagai string HTML dan akan dikirim kembali sebagai email. Tidak masuk akal mengapa pengembang melakukan ini karena menciptakan lebih banyak overhead (walaupun kecil) untuk panggilan HTTP. Juga lebih sulit untuk menguraikan ini dibandingkan dengan solusi pasangan nilai kunci (saya kira mereka bahkan tidak menggunakan informasi ini di backend mereka sama sekali).
2. Anda dapat menggunakan titik akhir ini untuk “mengirim email atas nama MySejahtera”. Bayangkan upaya jahat untuk menakut-nakuti orang menggunakan eksploitasi ini?
Saatnya bermain rickroll
3. Tidak diperlukan token Otentikasi untuk melakukan panggilan. Hanya header Tipe-Konten yang diperlukan.
4. Tidak ada batasan tarif yang dikenakan pada titik akhir. Saya berharap mereka menerapkan beberapa mekanisme untuk mengabaikan permintaan tersebut.
Uji Beban FTW!
Jika Anda penasaran, berikut adalah perintah curl yang dapat Anda gunakan untuk memanggil API Endpoint.
Informasi di atas berlaku per 16 Oktober 2021.
Pembaruan 1: Pada 18 Oktober 2021, reCAPTCHA telah ditambahkan untuk mengirim halaman, tetapi kesalahan PDF tetap ada.
Ayo Tes PCR