Lompat ke konten
Raizel/atelier

Bisa diverifikasi

Situs ini diperlakukan sebagai target, bukan sebagai brosur.

Menulis “application security” di daftar keterampilan itu gratis. Halaman ini memuat kontrol yang benar-benar aktif pada respons yang sedang Anda terima, beserta perintah untuk membuktikannya tanpa perlu mempercayai saya.

01Prinsip

Empat aturan yang menentukan sisanya.

Keputusan teknis di bawah bukan daftar praktik terbaik yang disalin — semuanya turun dari empat aturan ini.

01

Default tertutup, lalu dibuka seperlunya

CSP dan Permissions-Policy dimulai dari penolakan. Setiap izin yang ada di situs ini bisa saya tunjuk alasannya — kalau tidak bisa, izinnya tidak layak ada.

02

Kontrol yang bisa dibuktikan orang lain

Semua yang diklaim di halaman ini terlihat dari respons HTTP. Tidak ada bagian yang hanya bisa dipercaya berdasarkan perkataan saya.

03

Nol kredensial di repositori

Tidak ada API key, token, atau string koneksi dalam kode. Satu-satunya variabel lingkungan adalah NEXT_PUBLIC_SITE_URL, yang memang publik — lihat .env.example.

04

Permukaan yang sengaja kecil

Tiga dependensi runtime: next, react, react-dom. Tanpa analytics pihak ketiga, tanpa font eksternal, tanpa tag manager — tidak ada pihak lain yang bisa mengeksekusi kode di halaman ini.

02Kontrol aktif

Header respons dan apa yang sebenarnya dicegah.

Setiap baris menjelaskan kelas serangan yang ditutupnya, bukan hanya nama headernya. Header tanpa alasan yang jelas adalah beban pemeliharaan.

  • Content-Security-Policy

    nonce per-request (lihat middleware.ts)

    Membatasi dari mana script boleh dimuat. Nonce dibuat ulang setiap request, jadi script yang disuntikkan lewat HTML tidak punya token yang sah dan tidak dieksekusi.

  • X-Content-Type-Options

    nosniff

    Melarang browser menebak tipe konten. File yang dikirim sebagai teks tidak bisa dipaksa dieksekusi sebagai script.

  • X-Frame-Options

    DENY

    Menolak situs ini dibingkai. Redundan dengan frame-ancestors di CSP, dipertahankan untuk klien lama yang mengabaikan CSP.

  • Referrer-Policy

    strict-origin-when-cross-origin

    Path dan query tidak ikut terkirim saat pengguna berpindah ke domain lain — hanya origin-nya.

  • Permissions-Policy

    camera=(), microphone=(), geolocation=(), payment=(), usb=(), magnetometer=()

    Mematikan API perangkat yang tidak pernah dipakai situs statis. Permukaan yang tidak diaktifkan tidak perlu dipertahankan.

  • Strict-Transport-Security

    max-age=63072000; includeSubDomains; preload

    Mengunci akses ke HTTPS selama dua tahun. Diabaikan di localhost, berlaku setelah dilayani lewat TLS.

  • Cross-Origin-Opener-Policy

    same-origin

    Memutus referensi window dari dokumen lintas origin, menutup kelas serangan tabnabbing.

  • X-DNS-Prefetch-Control

    on

    Bukan kontrol keamanan, dicantumkan supaya daftar ini utuh terhadap apa yang benar-benar terkirim: situs ini tidak memuat domain pihak ketiga, jadi prefetch DNS tidak membocorkan tujuan ke siapa pun.

Catatan jujur soal biayanya: CSP berbasis nonce membuat nilai header berubah setiap request, sehingga halaman yang dilewati middleware tidak lagi dirender sebagai HTML statis penuh. Aset yang tidak butuh nonce — OG image, icon, sitemap, robots — dikecualikan dari matcher supaya tetap statis. Itu pertukaran yang saya pilih sadar, bukan efek samping.

03Verifikasi

Jangan percaya halaman ini. Jalankan sendiri.

Tiga perintah, tanpa alat khusus. Kalau hasilnya tidak cocok dengan yang tertulis di sini, itu bug dan saya ingin tahu.

langkah 1
curl -sI https://ruchel.dev | grep -i -E 'content-security|strict-transport|x-content-type|referrer'

Harapan Keempat header muncul. Nilai CSP berbeda tiap kali dijalankan — bagian nonce-nya memang berubah per request.

langkah 2
curl -s https://ruchel.dev/.well-known/security.txt

Harapan Kontak, kebijakan preferensi bahasa, dan tanggal kedaluwarsa sesuai RFC 9116.

langkah 3
curl -sI https://ruchel.dev | grep -i -E 'x-powered-by|server'

Harapan X-Powered-By tidak ada — dimatikan lewat poweredByHeader: false. Tidak ada gunanya mengumumkan versi framework.

04Disclosure

Menemukan sesuatu? Ini jalurnya.

Kebijakan yang sama juga tersedia dalam format mesin di /.well-known/security.txt.

Dalam cakupan

  • Domain utama dan seluruh subdomain yang saya kelola
  • Kesalahan konfigurasi header, CSP yang bisa dilewati, atau kebocoran informasi
  • Apa pun yang memungkinkan eksekusi script di origin ini

Di luar cakupan

  • Temuan otomatis tanpa dampak yang bisa ditunjukkan
  • Laporan versi library tanpa jalur eksploitasi nyata
  • Rekayasa sosial, DoS, atau uji beban

Yang saya janjikan

  • Balasan pertama dalam 72 jam kerja
  • Kredit publik bila Anda menginginkannya
  • Tanpa ancaman hukum untuk riset yang dilakukan dengan itikad baik