linmas / dokumentasi

Tinjauan pertama: regresi otorisasi

Reproduksi akses lintas pengguna secara sintetis, periksa pemeriksaan kepemilikan yang hilang, dan verifikasi perbaikannya secara lokal tanpa memanggil model.

Jelajahi dokumentasi

Cakupan dan prasyarat

Baru mengenal pendekatan ini? Baca mengapa kode buatan AI tetap perlu tinjauan keamanan, lalu gunakan alur tinjauan untuk menentukan cakupan dan bukti. Ikuti batas keamanan sebelum membagikan input nyata.

Tutorial ini mendukung topik autentikasi/API dalam rencana editorial kami. Gunakan Node.js 24+ dan direktori lokal sementara. Tidak diperlukan server, kredensial, data pengguna nyata, atau penyedia model. Instruksi Linmas 0.8.0 diperiksa pada 2026-09-08; tidak ada klaim pengujian host Codex atau Claude.

1. Periksa input lengkap

Simpan kode berikut sebagai authorization-review.mjs, atau unduh fixture. Varian yang sengaja dibuat rentan hanya untuk pembelajaran lokal.

import assert from 'node:assert/strict';

// Synthetic, in-memory fixture: never deploy the deliberately vulnerable variant.
const documents = [{ id: 'doc-1', owner: 'alice', text: 'Synthetic note' }];
function readDocument(user, id, enforceOwner) {
  if (!user || typeof user.id !== 'string' || !user.id) return { status: 401 };
  if (typeof id !== 'string' || !/^doc-[0-9]+$/.test(id)) return { status: 400 };
  const document = documents.find((entry) => entry.id === id);
  if (!document || (enforceOwner && document.owner !== user.id)) return { status: 404 };
  return { status: 200, body: document.text };
}

assert.equal(readDocument({ id: 'bob' }, 'doc-1', false).status, 200);
console.log('BEFORE: reproduced cross-user read in the deliberately vulnerable fixture.');
assert.equal(readDocument({ id: 'bob' }, 'doc-1', true).status, 404);
assert.equal(readDocument({ id: 'alice' }, 'doc-1', true).status, 200);
assert.equal(readDocument(null, 'doc-1', true).status, 401);
assert.equal(readDocument({ id: 'alice' }, '../secret', true).status, 400);
assert.equal(readDocument({ id: 'alice' }, 'doc-9', true).status, 404);
console.log('AFTER: cross-user denied; owner allowed; anonymous, invalid, and missing inputs handled.');

2. Minta tinjauan dengan cakupan terbatas

Setelah memasang dan memverifikasi Peninjau Keamanan Kode, berikan fixture ini kepada host yang diizinkan:

Tinjau authorization-review.mjs menggunakan linmas-secure-code-reviewer. Telusuri apakah Bob bisa membaca dokumen Alice saat enforceOwner bernilai false. Pisahkan bukti dari asumsi; usulkan perbaikan terkecil dan pengujian untuk pemilik, pengguna lain, pengguna anonim, input tidak valid, dan dokumen tidak ditemukan. Jangan ubah berkas atau memanggil penyedia langsung.

Mengirim prompt ke agen yang dihosting dapat mengirimkan konteks kepada penyedianya. Perintah di bawah tidak memerlukan agen; halaman ini memuat contoh temuan yang ditulis manusia, bukan rekaman keluaran model.

3. Periksa temuan dan perbaikan

Terbukti dalam fixture ini: Bob menerima status 200 ketika pemeriksaan kepemilikan dinonaktifkan. Mencari objek berdasarkan ID bukan otorisasi. Perbaikannya membandingkan ID pengguna terautentikasi dengan pemilik yang tersimpan sebelum mengembalikan isi. Ambil identitas dari autentikasi server yang tepercaya, bukan kolom pemilik dari klien.

Contoh ini menggunakan 404 untuk dokumen yang tidak ada maupun tidak dapat diakses. Sesuaikan pilihan tersebut dengan kontrak API; pastikan pemilik yang sah tetap dapat mengakses. Kode produksi harus selalu memeriksa kepemilikan dan tidak menyediakan sakelar pembelajaran ini.

4. Jalankan verifikasi regresi

node authorization-review.mjs

Jika Node tidak tersedia atau berkas tidak ditemukan, ikuti panduan pemecahan masalah pemasangan. Jalankan perintah dari direktori berkas unduhan, atau berikan path absolutnya dalam tanda kutip.

Kode keluar yang diharapkan: 0. Keluaran yang diharapkan:

BEFORE: reproduced cross-user read in the deliberately vulnerable fixture.
AFTER: cross-user denied; owner allowed; anonymous, invalid, and missing inputs handled.

Assertion yang gagal menghasilkan kode keluar bukan nol. Periksa kasus yang gagal, jangan hapus assertion. Pemeriksaan ini hanya menguji otorisasi dalam memori, bukan sesi, kueri basis data, peran tenant, transport, atau pembaruan serentak.

5. Catat bukti

Catat revisi input, perintah, runtime, keluaran yang diamati, bagian yang belum diuji, dan keputusan manusia. Assertion lokal bukan Review Capsule Linmas atau bukti tinjauan model. Untuk rekaman bukti penyedia, ikuti dokumentasi Review Capsule dengan persetujuan eksplisit dan input yang sudah dibersihkan.

Lanjutkan dengan metode tinjauan atau arahkan perubahan lintas bidang. Tinjauan manusia tetap wajib.

Pasang LinmasPanduan ID ↗