Alat Pemeriksa Hari 3
Halaman ini memuat alat yang dipakai untuk mengaudit Praktik 6 sampai Praktik 11, beserta berkas perbaikan yang siap dipakai.
Semua alat berjalan dengan Node.js biasa. Tidak ada dependensi yang perlu dipasang lebih dahulu.
Cara menjalankan
Section titled “Cara menjalankan”Berkasnya ada di alat/hari-3/. Isi setiap berkas bisa dibaca dan disalin di
Berkas Alat dan Perbaikan.
Dari akar repository:
cd "alat/hari-3"node jalankan-semua.mjsPerintah itu menjalankan sepuluh pemeriksa sekaligus dan merangkum hasilnya. Pemeriksa yang menguji layanan berjalan, seperti API dan GeoServer, dijalankan terpisah karena butuh layanan yang sudah hidup.
Peringatan penting: berkas SQL ini memakai SQL biasa
Section titled “Peringatan penting: berkas SQL ini memakai SQL biasa”Semua berkas SQL di sini tidak memakai meta-command psql, sehingga bisa dijalankan langsung di DBeaver, pgAdmin, TablePlus, atau klien apa pun.
Cara pakai di DBeaver:
- Buka SQL Editor pada koneksi database.
- Tempel seluruh isi berkas.
- Tekan Execute script (Alt+X), bukan Execute statement. Execute statement hanya menjalankan satu pernyataan, sehingga sisanya terlewat tanpa peringatan.
Versi awal berkas-berkas ini memakai \echo dan \if, yang membuat DBeaver berhenti dengan
syntax error at or near "\". Itu sudah diperbaiki. Bila Anda menemukan \ di awal baris pada
berkas SQL mana pun di sini, laporkan, karena berarti ada yang terlewat.
Berkas yang butuh nilai diganti lebih dahulu
Section titled “Berkas yang butuh nilai diganti lebih dahulu”Dua berkas memakai penanda sudut yang harus diganti sebelum dijalankan:
| Berkas | Ganti |
|---|---|
02_seed_super_admin.sql |
<ISI_EMAIL_DI_SINI> dan <ISI_HASH_DI_SINI> |
Praktik 7/sql/01_peran_geoserver.sql |
GANTI_SANDI_DI_SINI |
Bila lupa diganti, keduanya menolak jalan dengan pesan yang menyebutkan penandanya. Itu disengaja, supaya kata sandi atau hash yang salah tidak masuk ke database.
Dependensi
Section titled “Dependensi”Hampir semua skrip berjalan tanpa dependensi. Hanya hash-password.mjs yang memerlukan
bcryptjs, dan itu tercatat di package.json. Pasang dengan:
cd "alat/hari-3"npm installDaftar alat
Section titled “Daftar alat”| Alat | Praktik | Kegunaan | Butuh layanan hidup |
|---|---|---|---|
perbaiki-csv.mjs |
6 | Ubah pemisah pipa menjadi koma, validasi UUID dan baris kembar | Tidak |
periksa-geoserver.mjs |
7 | Periksa login, workspace, store, layer, akses publik, dan CORS | Ya |
periksa-koneksi.mjs |
8 | Periksa .env, DATABASE_URL, jangkauan TCP, dan daftar tabel |
Tidak |
audit-api.mjs |
9, 10 | Pemeriksa statis 12 jenis masalah pada berkas route | Tidak |
uji-api.mjs |
9 | Uji alur login, otorisasi, dan kebocoran kolom | Ya |
hash-password.mjs |
9 | Hash password lewat prompt tersembunyi | Tidak |
periksa-konfigurasi.mjs |
10 | Periksa proxy.js, basePath, .env, dan dependensi |
Tidak |
periksa-deploy.mjs |
11 | Periksa keterkaitan antar berkas deploy | Tidak |
periksa-yaml.mjs |
11 | Pengganti check-config.mjs tanpa paket yaml |
Tidak |
periksa-nginx.mjs |
11 | Periksa struktur nginx.conf |
Tidak |
periksa-variabel.mjs |
11 | Variabel tak terdeklarasi, variabel mati, VM_SA, firewall |
Tidak |
uji-subdomain.mjs |
11 | Periksa DNS, jalur ACME, dan sertifikat | Ya |
pra-terbang.mjs |
11 | Periksa identitas peserta sebelum Tahap 4 | Tidak |
audit-tabrakan.mjs |
11 | Jalankan skenario pesimistis terhadap teks modul | Tidak |
Alat yang paling berguna lebih dahulu
Section titled “Alat yang paling berguna lebih dahulu”audit-api.mjs
Section titled “audit-api.mjs”Pemeriksa statis untuk berkas route. Menangkap identifier yang dipakai tanpa diimpor, token yang diterima lewat query string, kolom sensitif yang ikut terkirim, kunci objek ganda, dan endpoint tanpa otorisasi.
node "Praktik 9/tools/audit-api.mjs" "../Praktik 9"node "Praktik 9/tools/audit-api.mjs" "../Praktik 10/Konfigurasi NextAuth/File Latihan"Keluaran pada Praktik 10:
[KRITIS] route.js:60 - "verifyAccessToken" dipakai tanpa di-import atau dideklarasikan Saat dijalankan ini melempar ReferenceError. Impor namanya dari lib/auth.Itulah cara temuan P10-1 ditemukan. Pemeriksa ini menelusuri struktur objek untuk membedakan
kunci objek dari referensi variabel, sehingga tidak melaporkan { session: "jwt" } sebagai
variabel yang hilang.
periksa-deploy.mjs
Section titled “periksa-deploy.mjs”Memeriksa hal yang tidak terlihat bila berkas diperiksa satu per satu:
node "Praktik 11/tools/periksa-deploy.mjs" "../Praktik 11/file latihan"Yang diperiksa: variabel ${...} pada compose harus ada di .env.example, port pada
nginx.conf harus dipublikasikan compose, berkas yang di-mount harus ada di repository, dan
kesiapan HTTPS.
Keluaran pada berkas saat ini:
ADA docker-compose.yml HILANG .env.example ADA nginx.conf ADA cloudbuild.yaml
[KRITIS] nginx.conf tidak punya location untuk /.well-known/acme-challenge/[TINGGI] nginx.conf belum punya blok listen 443[TINGGI] Tidak ada include untuk berkas TLS di nginx.confpra-terbang.mjs
Section titled “pra-terbang.mjs”Pemeriksa identitas peserta. Berguna untuk koordinator saat menyusun daftar, dan untuk peserta yang ingin memastikan nilai yang diterimanya sah sebelum menyentuh Tahap 4.
Alat ini bukan langkah wajib, karena identitas peserta ditetapkan koordinator dan dikirim ke peserta. Ia menjadi jaring pengaman bila daftar yang disusun memuat kesalahan ketik.
node "Praktik 11/tools/pra-terbang.mjs" \\ --email nama02@example.com --slug nama02 \\ --project geoportal-kelompok-a-xxxxx --peserta 4Slug yang tidak sah ditolak dengan alasan yang spesifik:
[KRITIS] Slug "Nama_02" memakai huruf besar Nama VM GCP hanya boleh huruf kecil, angka, dan tanda hubung.[KRITIS] Slug "Nama_02" memakai garis bawah Nama VM dan Service Account GCP tidak menerima garis bawah.Alat ini juga menerima daftar peserta lewat berkas CSV, dan memeriksa keunikan identitas di dalamnya:
node "Praktik 11/tools/pra-terbang.mjs" \\ --roster "Praktik 11/data/daftar-peserta.contoh.csv" --email asisten02@example.comuji-subdomain.mjs
Section titled “uji-subdomain.mjs”Memeriksa tiga hal berurutan, dan berhenti lebih awal bila syarat berikutnya belum terpenuhi. Urutan itu penting, karena menjalankan Certbot sebelum jalur ACME siap akan menghabiskan kuota penerbitan sertifikat.
node "Praktik 11/tools/uji-subdomain.mjs" nama01.gisbigtrainer.com --ip ALAMAT_IP_STATISYang diperiksa: resolusi DNS, akses HTTP lewat subdomain, kesiapan jalur ACME, dan setelah Certbot berhasil, keabsahan sertifikat beserta sisa masa berlakunya.
Catatan jujur soal audit-tabrakan.mjs
Section titled “Catatan jujur soal audit-tabrakan.mjs”Alat ini menjalankan skenario pesimistis: apa yang terjadi bila peserta menyalin contoh
PARTICIPANT_ID="nama01" dari modul apa adanya, tanpa menyesuaikannya.
Pada skema yang berlaku, identitas peserta ditetapkan koordinator dan dikirim ke peserta, jadi skenario itu tidak seharusnya terjadi. Keluarannya tetap berguna sebagai daftar akibat bila penyampaian slug gagal, dan bagian model tabrakan pada alat itu tetap berlaku.
Bacalah keluarannya bersama halaman Praktik 11, bukan sebagai temuan yang berdiri sendiri.
Berkas perbaikan siap pakai
Section titled “Berkas perbaikan siap pakai”Isi tiap berkas ditampilkan utuh dan bisa disalin di Berkas Alat dan Perbaikan.
| Berkas | Isi |
|---|---|
Praktik 6/sql/00_reset.sql |
Drop tabel untuk mulai dari nol |
Praktik 6/sql/01_schema_users_katalog.sql |
Tiga tabel, primary key, foreign key, dan CHECK |
Praktik 6/sql/02_seed_super_admin.sql |
Seed akun super admin dengan penjagaan hash bcrypt |
Praktik 7/sql/01_peran_geoserver.sql |
Peran geoserver_ro dan geoserver_rw |
Praktik 8/sql/01_perbaikan-grant-postgis.sql |
Cabut grant dari PUBLIC, kunci search_path |
| Berkas | Isi |
|---|---|
Praktik 9/perbaikan/verifyBearerToken.js |
Token hanya dari header, pesan galat seragam |
Praktik 9/perbaikan/roles.js |
Satu sumber daftar role |
Praktik 9/perbaikan/create-route.js |
Validasi, hash asinkron, select tanpa password |
Praktik 9/perbaikan/update-route.js |
Hanya mengubah field yang dikirim |
Praktik 10/perbaikan/route.js |
Route NextAuth dengan impor lengkap |
Konfigurasi
Section titled “Konfigurasi”| Berkas | Isi |
|---|---|
Praktik 11/perbaikan/nginx.conf |
nginx.conf dengan blok ACME dan include TLS |
Praktik 11/perbaikan/docker-compose.yml |
Port 443 dan tiga volume HTTPS |
Praktik 11/perbaikan/tls-aktifkan.conf.md |
Server block 443 siap tempel |
Praktik 11/perbaikan/vm-sa.md |
Bentuk alamat Service Account yang benar |
Praktik 11/perbaikan/blok-identitas.sh |
Alternatif Tahap 2, identitas diturunkan dari email |
| Berkas | Isi |
|---|---|
Praktik 6/data/katalog_data_2d.bersih.csv |
CSV Praktik 6 yang sudah diperbaiki |
Praktik 6/data/katalog_data_3d.bersih.csv |
CSV Praktik 8 yang sudah diperbaiki |
Praktik 11/data/daftar-peserta.contoh.csv |
Contoh roster email, identitas, dan project |
Hasil pemeriksaan terakhir
Section titled “Hasil pemeriksaan terakhir”Dijalankan pada paket hari 3 versi terakhir:
Praktik 6 - perbaiki CSV 2D BERSIHPraktik 6 - perbaiki CSV 3D BERSIHPraktik 8 - periksa koneksi database BERSIHPraktik 9 - audit statis API TINGGI=2 SEDANG=8 RENDAH=1Praktik 10 - audit statis NextAuth KRITIS=1Praktik 10 - periksa konfigurasi BERSIHPraktik 11 - periksa deploy HASIL: 7 temuanPraktik 11 - periksa nginx versi modul BERSIHPraktik 11 - periksa nginx versi perbaikan BERSIHPraktik 11 - periksa YAML tanpa dependensi BERSIHPraktik 11 - audit tabrakan nama resource KRITIS=7 TINGGI=2 SEDANG=3Praktik 11 - pra-terbang identitas sah BERSIHPemeriksa yang keluar dengan kode bukan nol berarti menemukan masalah, dan itu memang tujuannya. Pemeriksa yang butuh layanan hidup tidak ikut dalam daftar ini.