Tautan sementara daftar izin IP: apa yang sebenarnya diizinkan oleh pemberian izin
Tautan yang membuka port firewall mengizinkan sebuah alamat, bukan orang. Tentukan cakupannya, minta konfirmasi yang disengaja, dan uji pengulangan, kedaluwarsa, serta IPv6.
Mengubah satu klik menjadi aturan firewall sementara memang nyaman, dan itu juga membangun sistem otorisasi yang memutuskan siapa yang boleh menjangkau sebuah layanan. Yang dikeluarkannya adalah alamat, bukan orang, dan perbedaan itu penting pada saat dua orang berbagi satu NAT. Batasi cakupan pemberian izin, konfirmasikan dengan sengaja, dan beri makna pada kedaluwarsa sebelum tautan dibangun. Keputusan di depan Anda adalah di mana menempatkan batas, bukan apakah batas itu seharusnya ada.
Putuskan pertanyaan mana yang dijawab oleh pemberian izin
Mulailah dari persyaratan. Jika orang yang disebut namanya harus menjangkau layanan dan aplikasi sudah mengautentikasi orang itu, gateway yang terautentikasi menjaga identitas di titik penegakan dan tidak membutuhkan penerimaan alamat sama sekali. Jika targetnya adalah agen build, port lompat administratif, atau perangkat yang tidak dapat ikut serta dalam login pengguna, pemberian izin alamat dengan cakupan terbatas mungkin satu-satunya kontrol praktis yang tersedia.
Memilih penerimaan berdasarkan alamat untuk aplikasi yang menghadap pengguna memindahkan masalah otorisasi yang sebenarnya ke tempat lain, dan portal lalu mewarisi kesalahan atas celah yang tidak pernah ditutupnya.
Batasi permintaan di server
Peramban tidak boleh memilih tujuan, port, atau prefiks. Portal menyelesaikan layanan dari catatannya sendiri dan memeriksa hak dengan uji di sisi server, yang merupakan prinsip yang sama yang panduan otorisasi OWASP terapkan pada setiap permintaan. Penurunan alamat juga termasuk pada batas yang dilindungi: ketika proxy balik melaporkan alamat klien, terima hanya rantai proxy yang dikonfigurasi dan penanganan header yang terdokumentasi. Header penerusan yang disediakan pengunjung adalah klaim tentang asal, bukan buktinya.
Lalu periksa apakah portal dan layanan melihat sumber yang sama. Terowongan terpisah, satu lompatan proxy, dan IPv4 versus IPv6 dapat memberi dua tujuan dua alamat berbeda, sehingga izin yang diaktifkan dari satu jalur mungkin tidak mencakup permintaan berikutnya.
Tampilkan izin sebelum memasangnya
Membuka tautan seharusnya menampilkan layanan yang diusulkan, sumber yang teramati, dan durasinya, dan belum mengubah apa pun. Satu langkah itu mengubah tautan dari surel dari tindakan menjadi usulan, dan itu mencegah bot pratinjau atau pemindai surat memberi akses hanya dengan mengambilnya.
Konfirmasi seharusnya berupa permintaan yang mengubah keadaan dengan pertahanan lintas situs dan asal yang biasa. Token seharusnya sekali pakai dan dikonsumsi secara atomik pada saat aturan dipasang, dan catatan seharusnya merekam pemilik, layanan, alamat, pengenal izin, dan kedaluwarsa tanpa pernah mencatat token mentah.
Pengiriman token sama pentingnya dengan aturannya sendiri. Tautan yang kedaluwarsa atau sudah dikonsumsi yang masih menghasilkan aturan adalah pintu kedua yang dipasangi kunci yang sama.
Alamat itu dibagi bahkan selama izin masih hidup
NAT kantor, NAT operator, dan jalan keluar VPN bersama masing-masing menempatkan beberapa orang di belakang satu alamat. Mengizinkan alamat itu mengizinkan semua orang di belakangnya — sejauh menyangkut batas berikutnya dari layanan —, tanpa membuktikan apa pun tentang siapa yang memegang akun yang diharapkan layanan.
Menghapus aturan juga bukan pemutusan universal. Koneksi yang sudah terbentuk, token aplikasi yang tersimpan di cache, dan sesi berumur panjang dapat bertahan melewati aturan selama beberapa menit atau jauh lebih lama, jadi masa hidup yang Anda pilih seharusnya mencerminkan apa yang dilakukan layanan setelah penerimaan, bukan hanya berapa lama aturan itu ada.
Uji empat kasus, dan kedua keluarga alamat
Pemberian izin hanya sebaik empat kasus yang ia lewati: permintaan baru yang diizinkan, pemohon yang tidak disetujui, pengulangan tautan yang sama, dan permintaan yang sama setelah kedaluwarsa.
Lalu uji setiap keluarga secara terpisah, karena alamat sumber yang diamati layanan dapat berbeda di antara keduanya.
dig +short A service.example.com
dig +short AAAA service.example.com
curl -4 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
curl -6 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
Hasil yang berguna adalah keputusan penerimaan sementara yang dapat diaudit di bawah otorisasi pengguna biasa, bukan pembukaan permanen yang membawa nama orang yang mengklik lebih dulu.