Cara Mengimport Penyerahan Borang Awam ke Rangkaian Peribadi
Ikuti satu penyerahan borang awam daripada rekod penerimaan sehingga pengimport peribadi, dan kekalkan pengesahan, kelayakan serta pengendalian cubaan semula di pihak yang betul.
Borang awam yang tidak pernah berhubung dengan rangkaian peribadi tetap menghasilkan data yang perlu dinilai oleh rangkaian peribadi. Terowong hanya mengubah siapa menghubungi siapa. Segala-galanya selepas muat turun ialah keputusan import, dan ia tergolong di pihak peribadi. Panduan ini mengikuti satu penyerahan daripada pelayar sehingga rekod dalaman yang telah direkodkan.
Mulakan di Tempat Penyerahan Mendarat
Pelayar menghantar ke titik akhir awam, yang menulis satu baris ke dalam stor penerimaan terkawal dan mengembalikan tiada apa-apa selain pengesahan. Stor itu ialah titik penyerahan, dan ia sepatutnya menjadi satu-satunya perkara yang lapisan awam boleh tulis. Simpan muatan mentah di situ tanpa perubahan, bersama masa ia tiba dan pengecam rekod yang stabil.
Kemudian pekerja peribadi menarik baris yang belum selesai melalui terowong dan memutuskan apa yang perlu dilakukan dengan setiap satu. Ia berjalan di bawah identitinya sendiri, iaitu topik bahagian seterusnya.
curl --silent --fail \
--cert /etc/importer/client.crt --key /etc/importer/client.key \
"https://intake.corp.internal/api/pending?limit=20" \
-o /var/lib/importer/pending.json
Berikan Pengimport Hanya Kuasa yang Diperlukan
Proses web awam dan identiti yang menulis ke dalam aplikasi dalaman sepatutnya dua prinsipal yang berbeza. Pelayan awam tidak memerlukan pentadbiran dalaman semata-mata kerana ia perlu menyampaikan data borang, dan satu akaun dikongsi untuk kedua-dua pihak menjadikan sebarang pepijat web sebagai tulisan dalaman. Keluarkan kelayakan sendiri kepada pekerja, hadkan ia kepada satu operasi import, dan rekod prinsipal mana yang melakukan setiap import. Pemisahan itulah yang menjadikan sempadan terowong bermakna dan bukan sekadar hiasan.
Hadkan juga sumber yang boleh dibaca oleh pekerja. Jika pelaksanaan menggunakan baris gilir atau perkhidmatan pemindahan, perkhidmatan itu mengekalkan pengesahan dan dasar aksesnya sendiri, kerana VPN tidak mengesahkan apa-apa di dalam muatan.
Fungsi jangka pendek tidak terkecuali daripada semakan yang sama. Semasa ia berjalan, kedudukan rangkaian dan kelayakannya masih memberikan kuasa, dan jangka hayat yang lebih pendek hanya menyempitkan tetingkap. Jangka hayat bukan pengganti kepada keputusan tentang operasi yang boleh dilakukan oleh identiti itu.
Sahkan Sebelum Apa-apa Dalaman Berubah
Medan borang awam ialah teks yang dikawal penyerang sehingga dibuktikan sebaliknya, dan panduan pengesahan input OWASP mengira suapan bahagian belakang sebagai sumber tidak dipercayai atas sebab itu juga. Pemindahan tersulit bermakna bait tiba utuh, bukan bahawa ia menerangkan permintaan yang dibenarkan. Hurai dan sahkan sebelum mana-mana langkah istimewa, supaya baris buruk tidak pernah sampai ke laluan kod yang boleh bertindak.
Tetapkan medan yang dibenarkan, formatnya, saiznya dan peraturan perniagaan yang mesti dipatuhi. Tarikh boleh berformat betul tetapi masih salah untuk operasi yang diminta, dan muatan yang menamakan akaun dalaman atau status kelulusan tidak boleh memberikan kedua-duanya kepada dirinya sendiri.
Hantar baris yang ditolak ke hasil semakan dan bukannya meneka pembetulan atau memajukannya ke shell atau antara muka pangkalan data mentah. Log pengecam rekod dan peraturan yang gagal, bukan setiap medan yang ditaip pemohon.
Buat Titik Cubaan Semula pada Satu Operasi
Jika rekod submission-1042 ditarik dua kali kerana pengesahan pertama hilang, pekerja memerlukan cara tahan lama untuk mengenali rekod sumber dan hasil yang telah direkodkan. Jadual yang menjalankan tugas sekali tidak membuktikan setiap baris digunakan sekali. Penghantaran berganda adalah normal, jadi reka bentuk mesti menyerapnya.
Gunakan transaksi dan mekanisme pengendalian duplikat aplikasi dalaman itu sendiri, dan kekalkan pengecam sumber, hasil dan pengesahan dalam satu jujukan yang koheren. Sahkan hanya selepas operasi yang dimaksudkan direkodkan atau diberikan secara tahan lama, dan jangan sekali-kali memadam baris penerimaan semata-mata kerana bait telah dimuat turun.
Kemudian buktikan dengan tiga fikstur: baris sah, baris cacat dan pengecam sumber terkawal yang sama dihantar dua kali. Setiap satu melalui titik akhir yang sama yang digunakan pekerja.
for f in fixtures/valid-submission.json fixtures/bad-date.json; do
curl --silent --fail --cert /etc/importer/client.crt \
-X POST --data @"$f" https://intake.corp.internal/api/records
done
curl --silent --fail --cert /etc/importer/client.crt \
-X POST --data @fixtures/valid-submission.json https://intake.corp.internal/api/records
Dua baris pertama mesti berakhir dalam keadaan dalaman yang berbeza, dan yang ketiga mesti memulangkan pengecam yang telah direkodkan untuk rekod sumber itu dan bukannya mencipta yang kedua. Apa-apa lagi bermakna import itu belum boleh diulang.