Cgibashopts: Parsing opsi bash CGI
CGIBASHOPTS adalah perpustakaan bash murni kecil dan cepat untuk parse parameter formulir web untuk skrip CGI web bash shell, bahkan dengan unggahan file biner. Ini gratis untuk digunakan tanpa batasan (lisensi MIT). (c) Colas Nahaboo 2017
QuickStart
- Salin file
cgibashopts di suatu tempat di server Anda. EG AS /usr/local/bin/cgibashopts - Cukup sumber file ini di awal skrip Bash CGI Anda. Misalnya:
source /usr/local/bin/cgibashopts atau . /usr/local/bin/cgibashopts - Nilai parameter formulir web
foo (misalnya di halaman html: <input type=text name=foo> ) kemudian dapat ditemukan sebagai nilai variabel lingkungan shell $FORM_foo
Pemecahan masalah:
- Jika terjadi kesalahan, jalankan
tests/tewiba -v di direktori cGibashopts di server Anda untuk melihat apakah test suite mendeteksi masalah. - CGibashopts membutuhkan versi GNU dari
bash , grep , sed . Untuk menguji ini, jalankan grep -P . /dev/null , Anda tidak boleh mendapatkan kesalahan. Jika Anda melakukannya, Anda harus menginstalnya pada sistem seperti Unix yang tidak menggunakan utilitas GNU secara default, seperti macOS , BusyBox, FreeBSD, BSD dan turunan SYSV ...- Di MacOS, lihat Edisi #10
- Di BusyBox Anda perlu menginstal paket untuk versi GNU
bash , coreutils , grep , sed - Di freebsd, gunakan freshports
Fitur
- Sederhana digunakan: Hanya satu file.
- Cepat dan kecil.
- Pure bash kecuali untuk penggunaan grep, sed dan terpotong.
- Menangani permintaan mendapatkan dan memposting, dengan semua metode pengkodean parameter: Aplikasi/X-WWW-Form-Urlencoded, Multipart/Form-Data, Text/Plain.
- Menangani juga string kueri pencarian indeks warisan
- Menangani unggahan file biner, dan file teks dengan unix atau dos newline. Saya tidak menemukan perpustakaan yang ada yang menyediakan fungsionalitas ini untuk pemrograman cangkang CGI
- Hanya menggunakan fitur "klasik" dari bash, dan harus bekerja dengan versi bash lama, saya kira 4.1+
Dokumentasi
- Saat digunakan, perpustakaan CGIBashOpts mendekode parameter yang dikirim oleh browser yang disediakan server web kepada skrip sebagai berbagai variabel lingkungan dan secara opsional input standarnya, sesuai standar CGI. CGibashopts membuatnya tersedia untuk termasuk skrip dalam bentuk yang mudah digunakan: variabel, fungsi, dan file.
- Untuk menggunakan perpustakaan, sumbernya di awal skrip Anda, sedini mungkin untuk menghindari konflik dengan variabel yang dapat Anda gunakan nanti dalam skrip Anda.
- Perpustakaan mendekode parameter permintaan GET dan POST, dengan semua cara yang mungkin untuk mengkode parameter (melalui "enctype").
- Daftar nama parameter tercantum dalam
$FORMS sebagai string nama yang dipisahkan ruang. Misalnya: echo "$FORMS" ==> foo bar gee . Nama parameter adalah yang ditentukan oleh atribut name dalam berbagai elemen HTML dalam formulir HTML, atau dikirim melalui perintah seperti wget atau curl . Nama parameter harus nama variabel legal untuk bash: karakter alfanumerik dan garis bawah, dan tidak dimulai dengan satu digit. - Nama parameter tidak valid (misalnya: 0to60, ab, a: b, ...) Diabaikan secara diam -diam, serta nilainya
- Setiap nilai parameter disalin sebagai nilai variabel lingkungan Form_ - yang diawali. Misalnya:
$FORM_foo untuk elemen bentuk html bernama foo . - Nilai parameter multi-line dikonversi ke ujung lini UNIX (garis baru alih-alih carriage return dan newline)
- Upload file: Ketika file diunggah, melalui elemen formulir seperti
<input type=file name=file1> , cGibashopts menempatkan nama parameter (di sini file1 ) ke dalam variabel $ formfiles, yang merupakan daftar semua nama parameter file yang dipisahkan ruang yang diterima. Nama aktual dari file yang diunggah dapat ditemukan dalam nilai variabel (di sini $FORM_file1 ), sedangkan konten file dapat ditemukan dalam file lokal yang dinamai oleh variabel dalam direktori $CGIBASHOPTS_DIR , (di sini $CGIBASHOPTS_DIR/file1 )- Hanya benar -benar file yang diunggah dibuat dan terdaftar dengan cara ini. Jika pengguna tidak memilih file apa pun dalam formulir, variabel shell tidak akan ditentukan atau file apa pun yang dibuat.
- Namun, file kosong yang diunggah akan dibuat. Mereka akan kosong, tentu saja.
- File biner dan teks yang diterima tidak akan dikonversi dalam format teks UNIX (baris diakhiri dengan garis baru), bahkan jika klien mengunggahnya dalam format DOS (baris diakhiri dengan carriage return dan newline). Jadi Anda harus siap untuk menangani baris DOS di file teks yang diunggah.
- Peringatan: Fungsi pembersihan bash
cgibashopts_clean harus dipanggil di akhir skrip Anda untuk menghapus direktori sementara $CGIBASHOPTS_DIR menyimpan file yang diunggah, jika opsi -n (lihat di bawah) tidak digunakan. CGibashopts melakukan trap cgibashopts_clean 0 sehingga fungsi ini akan dipanggil secara otomatis di akhir skrip Anda, jadi Anda tidak perlu melakukan apa pun, kecuali jika Anda menggunakan trap 0 sendiri, dan dengan demikian harus memastikan bahwa kode Anda menangani sinyal keluar secara eksplisit memanggil cgibashopts_clean .- Sumber CGIBASHOPTS akan menghapus
trap 0 apa pun yang dilakukan sebelumnya. Jadi, atur perangkap Anda 0 setelah sumber cgibashopts - Memanggil cGibashopts_clean sebenarnya hanya diperlukan jika formulir HTML Anda menggunakan elemen input
file tipe - Segera setelah Anda telah memproses file yang diunggah, Anda dapat secara eksplisit memanggil fungsi
cgibashopts_clean sendiri, sehingga tidak diperlukan lagi dan Anda bebas menggunakan perangkap seperti yang Anda inginkan setelahnya - Jika Anda tidak berharap ada file yang diunggah, Anda dapat menggunakan opsi -n (lihat di bawah)
- Opsi baris perintah:
- -n dapat diberikan untuk mengabaikan dan membuang permintaan apa pun untuk mengunggah file. Ini disarankan jika Anda tidak mengharapkan file diunggah, karena dapat menyimpan beberapa pemuatan komputasi jika beberapa penyerang mencoba mengunggah file palsu, tetapi tidak wajib. Ini juga tidak mendefinisikan variabel
$CGIBASHOPTS_DIR atau fungsi cgibashopts_clean , dan tidak menggunakan perangkap. Catatan: Ini hanya tersedia dalam versi 3 ke atas. Contoh Penggunaan : . cgibashopts -n - -D Direktori menentukan di mana cGibashoptions akan mengelola file sementara jika ada unggahan file. Itu default ke
/tmp . cGibashoptions akan membuat di dalamnya cgibashopts-files.$$ subdirektori (di mana $$ adalah nomor proses bash, unik per instance), ditunjukkan dalam variabel $CGIBASHOPTS_DIR .
- Variabel
CGIBASHOPTS_RELEASE memiliki versi rilis, menggunakan versi semantik (mis .- Variabel
CGIBASHOPTS_VERSION memiliki nomor versi utama (bilangan bulat pertama CGIBASHOPTS_RELEASE di atas, untuk kompatibilitas ke belakang.
- Goodies Misc:
- Dua fungsi bash praktis disediakan:
-
urldecode yang mengambil string dalam parameter dan mengeluarkan versi decoded, mentransformasikan + dalam spasi dan %XX dalam karakter Hexadecimal ASCII Code XX (misalnya %41 menjadi A), dan menghapus pengembalian kereta. -
urlencode yang melakukan operasi terbalik. Keduanya lebih cepat dari perintah Linux biner.
- Dua variabel
$nl dan $cr memiliki karakter baru dan karakter carriage return - Cara alternatif untuk mendapatkan nilai variabel adalah melalui fungsi
param . Ini hanya fungsi kenyamanan yang kompatibel dengan Bashlib untuk orang (atau skrip) yang digunakan untuk itu.-
param tanpa argumen menghasilkan nilai FORMS -
param foo mengeluarkan nilai FORM_foo -
param foo a string... menetapkan nilai FORM_foo ke "a string..." -
param -f mencetak $FORMFILES -
param -f foo mencetak $FORMFILE_foo -
param -f foo a string... menetapkan nilai FORMFILE_foo ke "a string..."
Suite tes
Suite tes disediakan, dapat dijalankan oleh ./tests/RUN-ALL-TESTS , untuk lebih jelasnya lihat readme.md dalam tests direktori
Proyek menggunakannya
- Watermark-PDF Sebuah frontend web untuk skrip watermarking PDF oleh Pipoprods
- Cari di semua proyek github semua github yang merujuknya
Masukan
Jangan diterima untuk menyalin dan meningkatkan proyek ini, serta memberikan laporan bug, umpan balik, saran melalui:
- Membuat masalah, jika Anda memiliki akun GitHub.
- Gunakan formulir Laporan GIT yang disediakan untuk membuat masalah jika Anda tidak memiliki akun Githib.
- Membuat atau berpartisipasi dalam diskusi tentang proyek ini
- Atau cukup email saya: [email protected]
Sejarah Perubahan
- 2023-01-11 v4.1.3: Perbaikan untuk suite uji hanya untuk menghindari bug di versi bash <4.4. Kode aktual CGIBASHOPTS tidak berubah, tidak perlu meningkatkan kecuali untuk melewati suite uji pada sistem warisan.
- 2023-01-08 v4.1.2: Perbaikan bug: Hanya titik koma yang dipahami sebagai pemisah dalam header http
Content-Type dan Content-Disposition . Diperbaiki juga menggunakan koma. Bug dilaporkan oleh "Florin-Ctu", masalah #8 dan #9. - 2022-11-24 v4.1.1: Bug Fix: Form Fields Setelah bidang unggahan file diabaikan. Harap Tingkatkan! Laporan Bug oleh "Pipoprods", Edisi #7.
- 2021-12-23 v4.1.0:
- beralih ke versi semantik, dengan var
CGIBASHOPTS_RELEASE baru - Opsi -D baru untuk menentukan direktori sementara (saran "aufschlauer")
- Pindah ke GitHub: Pindahkan sebagian besar file dari tampilan utama, dalam tes/, Tewiba ditingkatkan menjadi 1.5.0, pembersihan kode untuk melewati kerang
- 2020-04-16 Versi 4: Fungsi Goodie Urlencode Ditambahkan
- 2020-04-04 Beberapa perubahan kosmetik dalam dokumen ini dan tes (Tes-suite dir berganti nama menjadi tes), tetapi tidak ada perubahan pada kode cGibashopts itu sendiri, jadi tidak ada peningkatan nomor versi.
- 2020-03-27 Versi 3: -n Opsi ditambahkan untuk menonaktifkan unggahan file
- 2018-10-09 Versi 2: Fix, Spaces in Parameter Nilai dapat dilihat sebagai +
- 2017-12-13 Versi 1: Perbaikan untuk mengunggah file dengan berbagai tipe-mime, perpustakaan sekarang dapat digunakan dalam skrip menggunakan set -u dan set -e.
- 2017-12-07 Penciptaan proyek