Fix: Sembunyikan ID Perangkat (id_device) pada Datatable Publik - #715
Merged
Conversation
|
🔄 AI PR Review sedang antri di server...
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request: Fix: Sembunyikan ID Perangkat (id_device) pada Datatable Publik
Description
Dua endpoint datatable publik (
/datatables/pengguna-layanandesadan/datatables/pengguna-keloladesa) hanya memvalidasiif($request->ajax())sehingga dapat diakses tanpa autentikasi. Endpoint tersebut membocorkan data sensitif berupaid_device(Android Build ID perangkat petugas desa) dan field primary keyidyang digunakan untuk pelacakan perangkat. PR ini menyembunyikan kolom sensitif tersebut dari respons JSON datatable dan menghapusnya dari tampilan tabel, sehingga data pelacakan perangkat tidak lagi terekspos ke publik.Changes Made
id(DashboardController.php:258): Menambahkan->makeHidden(['id'])padadatatablePenggunaLayanandesaagar primary key tidak ikut dikirim pada respons JSON.id_device(DashboardController.php:337): Menambahkan->makeHidden(['id_device'])padadatatablePenggunaKeloladesaagar Android Build ID perangkat tidak bocor.selecteksplisit, aliasakses_terakhiruntuk kolom akses, tambahmakeHidden(['id_device']).makeHidden(['id']).<th>Id Perangkat</th>dan binding kolomid_device/iddari DataTables di kedua view (keloladesa/tabel.blade.phpdanlayanandesa/tabel.blade.php).updated_atmenjadiakses_terakhiragar sesuai dengan alias baru di query, berikut format tanggalj F Y H:i:s.Reason for Change
id_deviceadalah identitas perangkat (Android Build ID) yang dapat digunakan untuk melacak perangkat petugas desa tertentu. Karena endpoint publik (tanpa auth), siapa pun dapat mengambilnya.iddan identitas perangkat seharusnya tidak diekspos pada respons API publik.Impact of Change
✅ Keamanan: Data identitas perangkat petugas desa tidak lagi bocor ke publik.
✅ Privasi: Android Build ID perangkat tidak dapat dilacak melalui endpoint publik.
✅ Privasi: Primary key internal (
id) tidak terekspos ke client.✅ Kompatibilitas: Data tampilan dashboard tetap berfungsi normal tanpa kolom sensitif.
Related Issue
Steps to Reproduce
Before fix (problem):
GET /datatables/pengguna-keloladesa(dipicu dariGET /web/keloladesa/detail) tanpa login, kirim headerX-Requested-With: XMLHttpRequest.id_deviceberisi Android Build ID perangkat petugas desa (data tracking).GET /datatables/pengguna-layanandesadengan cara serupa.id(primary key) pada respons.After fix (solution):
id_devicedanidtidak lagi muncul pada respons.Testing on related features:
Checklist
Technical Details
Technical Explanation
Respons datatable di-generate menggunakan
yajra/laravel-datatables(DataTables::of(...)->make(true)). Meskipun fieldid_deviceditampilkan lewateditColumn, kolom tersebut tetap dikirim pada JSON. Perbaikan menambahkanmakeHidden([...])(wrapper DataTables atasmakeHidden()Eloquent) agar kolom tertentu disembunyikan dari serialisasi JSON tanpa menghapusnya dari query/model.Selain itu query pada
KelolaDesaDashboardControllerdanLayananDesaDashboardControllerdi-refactor agar memakaiselecteksplisit dengan aliasakses_terakhiruntuk kolomupdated_at, dan view di-update menggunakandata: 'akses_terakhir'agar konsisten.Configuration changes
Tidak ada perubahan konfigurasi.
Dependencies added
Tidak ada dependency baru.
Testing
Manual Testing
GET /datatables/pengguna-layanandesatanpa login (dengan headerX-Requested-With) dan pastikan tidak ada fieldid.GET /datatables/pengguna-keloladesatanpa login dan pastikan tidak ada fieldid_device.Automated Testing
id_device/idBreaking Changes
Tidak ada. Kolom sensitif hanya dihapus dari respons publik; tidak ada data fungsional yang hilang.
Migration Guide
Tidak diperlukan.
References
Catatan tambahan: Middleware autentikasi pada endpoint ini memang tidak diterapkan, karena saat ini memang endpoint tersebut bisa diakses secara public