Lewati ke konten

Alat Pemeriksa Hari 3

InternalSebagian terujiArti badge ini

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.

Berkasnya ada di alat/hari-3/. Isi setiap berkas bisa dibaca dan disalin di Berkas Alat dan Perbaikan.

Dari akar repository:

Terminal window
cd "alat/hari-3"
node jalankan-semua.mjs

Perintah 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:

  1. Buka SQL Editor pada koneksi database.
  2. Tempel seluruh isi berkas.
  3. 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.

Hampir semua skrip berjalan tanpa dependensi. Hanya hash-password.mjs yang memerlukan bcryptjs, dan itu tercatat di package.json. Pasang dengan:

Terminal window
cd "alat/hari-3"
npm install
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

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.

Terminal window
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.

Memeriksa hal yang tidak terlihat bila berkas diperiksa satu per satu:

Terminal window
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.conf

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.

Terminal window
node "Praktik 11/tools/pra-terbang.mjs" \\
--email nama02@example.com --slug nama02 \\
--project geoportal-kelompok-a-xxxxx --peserta 4

Slug 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:

Terminal window
node "Praktik 11/tools/pra-terbang.mjs" \\
--roster "Praktik 11/data/daftar-peserta.contoh.csv" --email asisten02@example.com

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.

Terminal window
node "Praktik 11/tools/uji-subdomain.mjs" nama01.gisbigtrainer.com --ip ALAMAT_IP_STATIS

Yang diperiksa: resolusi DNS, akses HTTP lewat subdomain, kesiapan jalur ACME, dan setelah Certbot berhasil, keabsahan sertifikat beserta sisa masa berlakunya.

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.

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
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

Dijalankan pada paket hari 3 versi terakhir:

Praktik 6 - perbaiki CSV 2D BERSIH
Praktik 6 - perbaiki CSV 3D BERSIH
Praktik 8 - periksa koneksi database BERSIH
Praktik 9 - audit statis API TINGGI=2 SEDANG=8 RENDAH=1
Praktik 10 - audit statis NextAuth KRITIS=1
Praktik 10 - periksa konfigurasi BERSIH
Praktik 11 - periksa deploy HASIL: 7 temuan
Praktik 11 - periksa nginx versi modul BERSIH
Praktik 11 - periksa nginx versi perbaikan BERSIH
Praktik 11 - periksa YAML tanpa dependensi BERSIH
Praktik 11 - audit tabrakan nama resource KRITIS=7 TINGGI=2 SEDANG=3
Praktik 11 - pra-terbang identitas sah BERSIH

Pemeriksa yang keluar dengan kode bukan nol berarti menemukan masalah, dan itu memang tujuannya. Pemeriksa yang butuh layanan hidup tidak ikut dalam daftar ini.