EnglishFrenchSpanish

Jalankan server | Ubuntu > | Fedora > |


favorit OnWorks

haserl - Online di Cloud

Jalankan haserl di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

Ini adalah perintah haserl yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


haserl - Program skrip cgi untuk lingkungan tertanam

RINGKASAN


#!/usr/bin/haserl [--kulit=spesifikasi jalur] [--upload-dir=dirspec] [--upload-handler=handler]
[--upload-limit=membatasi] [--Terima semua] [--terima-tidak ada] [--diam] [--debug]

[ teks ] [ <% skrip shell %> ] [ teks ] ...

DESKRIPSI


Haserl adalah pembungkus cgi kecil yang memungkinkan pemrograman cgi gaya "PHP", tetapi menggunakan UNIX
bash-like shell atau Lua sebagai bahasa pemrograman. Ini sangat kecil, jadi bisa digunakan
di lingkungan tertanam, atau di mana sesuatu seperti PHP terlalu besar.

Ini menggabungkan tiga fitur ke dalam mesin cgi kecil:

Ini mem-parsing permintaan POST dan GET, menempatkan elemen formulir sebagai pasangan nama=nilai ke dalam
lingkungan untuk skrip CGI untuk digunakan. Ini agak seperti uncgi pembungkus.

Ini membuka shell, dan menerjemahkan semua teks menjadi pernyataan yang dapat dicetak. Semua teks
dalam <% ... %> konstruksi diteruskan kata demi kata ke shell. Ini agak
suka menulis PHP script.

Secara opsional dapat diinstal untuk memberikan izin kepada pemilik skrip,
memberikannya beberapa fitur keamanan dari suexec or cgiwrapper.

PILIHAN RINGKASAN


Ini adalah ringkasan dari opsi baris perintah. Silakan lihat PILIHAN bagian bawah
nama opsi panjang untuk deskripsi lengkap.

-a --terima-semua
-n --terima-tidak ada
-d --debug
-s, --kulit
-S, --diam
-U, --upload-dir
-u, --upload-batas
-H, --upload-handler

PILIHAN


--Terima semua
Program biasanya menerima data POST hanya ketika REQUEST_METHOD adalah POST dan
hanya menerima data pada data URL ketika REQUEST_METHOD adalah GET. Pilihan ini
memungkinkan data POST dan URL diterima terlepas dari REQUEST_METHOD.
Ketika opsi ini disetel, REQUEST_METHOD didahulukan (misalnya jika metode
adalah POST, FORM_variables diambil dari data COOKIE, data GET, dan data POST, di
pesanan itu. Jika metodenya GET, FORM_variables diambil dari data COOKIE, POST
data, dan DAPATKAN data.) Standarnya adalah tidak menerima semua metode input - hanya
data COOKIE dan REQUEST_METHOD.

--terima-tidak ada
Jika diberikan, haserl tidak akan mengurai input standar sebagai konten http sebelum diproses
naskah. Ini berguna jika memanggil skrip haserl dari skrip haserl lain.

--debug
Alih-alih mengeksekusi skrip, cetak skrip yang akan dieksekusi. Jika
variabel lingkungan 'REQUEST_METHOD' diatur, data dikirim dengan
jenis konten biasa/teks. Jika tidak, skrip shell dicetak kata demi kata.

--kulit=spesifikasi jalur
Tentukan shell seperti bash alternatif untuk digunakan. Default ke "/ Bin / sh"

Untuk memasukkan parameter shell jangan gunakan --shell=/ Bin / sh format. Sebagai gantinya, gunakan
format alternatif tanpa "=", seperti pada --Shell "/ bin / bash --norc". Pastikan untuk
kutip string opsi untuk melindungi karakter khusus apa pun.

Jika dikompilasi dengan pustaka Lua, maka string "lua" digunakan untuk menggunakan yang terintegrasi
Lua vm. String ini peka huruf besar/kecil. Contoh: --kulit=bulan

Alternatifnya adalah "luac". Ini menyebabkan parser haserl dan lua dinonaktifkan,
dan skrip diasumsikan sebagai potongan lua yang telah dikompilasi sebelumnya. Melihat LUAC di bawah ini untuk lebih
informasi.

--diam
Haserl biasanya mencetak pesan informasi tentang kondisi kesalahan. Ini
menekan pesan kesalahan, sehingga penggunaan haserl tidak diiklankan.

--upload-dir=dirspec
Default ke "/ Tmp". Semua file yang diunggah dibuat dengan nama file sementara di ini
direktori HASERL_xxx_path berisi nama file sementara. FORM_xxx_nama
berisi nama asli file, seperti yang ditentukan oleh klien.

--upload-handler=spesifikasi jalur
Saat ditentukan, unggahan file ditangani oleh penangan ini, bukan ditulis ke
berkas sementara. Pathspec lengkap harus diberikan (PATH tidak dicari), dan
upload-handler diberikan satu parameter baris perintah: Nama FIFO di
mana file unggahan akan dikirim. Selain itu, pawang dapat menerima 3
variabel lingkungan: JENIS KONTEN, NAMA FILE, dan NAMA. Ini mencerminkan MIME
header disposisi konten untuk konten. Haserl akan membayar pawang untuk masing-masing
file yang diupload, dan akan mengirimkan isi file upload ke FIFO yang ditentukan.
Haserl kemudian akan memblokir sampai pawang berakhir. Metode ini untuk para ahli
saja.

--upload-batas=membatasi
Izinkan file yang disandikan mime hingga membatasi KB untuk diunggah. Standarnya adalah 0KB tidak
upload diperbolehkan). Perhatikan bahwa mime-encoding menambahkan 33% ke ukuran data.

GAMBARAN OF OPERASI


Secara umum, server web menyiapkan beberapa variabel lingkungan, dan kemudian menggunakan garpu or
metode lain untuk menjalankan skrip CGI. Jika skrip menggunakan haserl penerjemah,
berikut terjadi:

If haserl diinstal suid root, kemudian uid/gid disetel ke pemilik skrip.

Lingkungan dipindai untuk HTTP_COOKIE, yang mungkin telah disetel oleh web
server. Jika ada, konten yang diuraikan ditempatkan di lingkungan lokal.

Lingkungan dipindai untuk REQUEST_METHOD, yang ditetapkan oleh server web.
Berdasarkan metode permintaan, input standar dibaca dan diuraikan. yang diuraikan
isinya ditempatkan di lingkungan setempat.

Skripnya diberi token, parsing haserl blok kode dari teks mentah. Teks mentah adalah
diubah menjadi pernyataan "echo", dan kemudian semua token dikirim ke sub-kulit.

haserl garpu dan sub-kulit (biasanya / Bin / sh) dimulai.

Semua token dikirim ke STDIN sub-kulit, dengan tambahan keluar perintah.

Ketika sub-kulit berakhir, haserl penerjemah melakukan pembersihan akhir dan
kemudian berakhir.

KLIEN SISI MEMASUKKAN


The haserl penerjemah akan memecahkan kode data yang dikirim melalui variabel lingkungan HTTP_COOKIE, dan
metode GET atau POST dari klien, dan menyimpannya sebagai variabel lingkungan yang dapat
diakses oleh haserl. Nama variabel mengikuti nama yang diberikan dalam sumber,
kecuali awalan ( FORMULIR_) didahulukan. Misalnya, jika klien mengirim "foo=bar",
variabel lingkungan adalah FORM_foo=bar.

Untuk metode HTTP_COOKIE, variabel juga disimpan dengan awalan ( COOKIE_) ditambahkan.
Misalnya, jika HTTP_COOKIE menyertakan "foo=bar", variabel lingkungan adalah
COOKIE_foo=bar.

Untuk metode GET, data yang dikirim dalam bentuk %xx diterjemahkan ke dalam karakter mereka
mewakili, dan variabel juga disimpan dengan awalan ( GET_) ditambahkan. Misalnya, jika
QUERY_STRING termasuk "foo=bar", variabel lingkungan adalah GET_foo=bar.

Untuk metode POST, variabel juga disimpan dengan awalan ( POST_) ditambahkan. Untuk
contoh, jika aliran pos menyertakan "foo=bar", variabel lingkungan adalah POST_foo=bar.

Juga, untuk metode POST, jika data dikirim menggunakan multipart/formulir-data pengkodean,
data secara otomatis diterjemahkan. Ini biasanya digunakan ketika file diunggah dari web
klien menggunakan .

CATATAN Ketika file diunggah ke server web, itu disimpan di unggah-dir
direktori. FORM_variable_name= berisi nama file yang diunggah (sebagai
ditentukan oleh klien.) HASERL_variable_path= berisi nama file di
unggah-dir yang menyimpan konten yang diunggah. Untuk mencegah klien jahat dari
mengisi unggah-dir di server web Anda, unggahan file hanya diperbolehkan ketika
--upload-batas option digunakan untuk menentukan seberapa besar file yang dapat diupload. Haserl
secara otomatis menghapus file sementara ketika skrip selesai. Untuk menjaga
file, pindahkan atau ganti namanya di suatu tempat di skrip.

Perhatikan bahwa nama file disimpan di HASERL_variabel_path Ini karena FORM_,
Variabel GET_, dan POST_ dapat dimodifikasi oleh klien, dan klien jahat dapat
atur variabel kedua dengan nama variabel_path=/ etc / passwd. Versi sebelumnya
tidak menyimpan pathspec di HASRL ruang nama. Untuk memelihara ke belakang
kompatibilitas, itu nama of itu sementara fillet is juga tersimpan in FORM_variabel= serta
POST_variabel=. Ini is dianggap tidak aman serta harus tidak be bekas.

Jika klien mengirim data kedua dengan metode POST dan GET, lalu haserl hanya akan menguraikan
data yang sesuai dengan REQUEST_METHOD variabel yang disetel oleh server web, kecuali jika
Terima semua pilihan telah ditetapkan. Misalnya, formulir yang dipanggil melalui metode POST, tetapi memiliki
URI dari some.cgi?foo=bar&otherdata=sesuatu akan membuat data POST diuraikan, dan foo
serta data yang lain variabel diabaikan.

Jika server web mendefinisikan a HTTP_COOKIE variabel lingkungan, data cookie diuraikan.
Data cookie diuraikan sebelum data GET atau POST, jadi jika ada dua variabel dari
nama yang sama, data GET atau POST menimpa informasi cookie.

Ketika beberapa instance dari variabel yang sama dikirim dari sumber yang berbeda,
FORM_variable akan diatur sesuai dengan urutan variabel yang diproses.
HTTP_COOKIE selalu diproses terlebih dahulu, diikuti oleh REQUEST_METHOD. Jika menerima-semua
option sudah di set, lalu HTTP_COOKIE diproses terlebih dahulu, dilanjutkan dengan metode not
ditentukan oleh REQUEST_METHOD, diikuti oleh REQUEST_METHOD. Contoh terakhir dari
variabel akan digunakan untuk mengatur FORM_variable. Perhatikan bahwa variabel juga terpisah
dibuat sebagai COOKIE_variable, GET_variable dan POST_variable. Hal ini memungkinkan penggunaan
tumpang tindih nama dari setiap sumber.

Ketika beberapa instance dari variabel yang sama dikirim dari sumber yang sama, hanya yang terakhir
satu diselamatkan. Untuk menyimpan semua salinan (untuk multi-pilihan, misalnya), tambahkan "[]" di akhir
dari nama variabel. Semua hasil akan dikembalikan, dipisahkan oleh baris baru. Sebagai contoh,
host=Enoch&host=Esther&host=Joshua menghasilkan "FORM_host=Joshua".
host[]=Enoch&host[]Esther&host[]=Joshua menghasilkan "FORM_host=Enoch\nEsther\nJoshua"

BAHASA


Struktur bahasa berikut dikenali oleh: haserl.

MENJALANKAN
<% [skrip cangkang] %>

Apa pun yang diapit oleh tag <% %> dikirim ke sub-kulit untuk dieksekusi. Teks
dikirim kata demi kata.

TERMASUK
<% dalam spesifikasi jalur %>

Sertakan file lain kata demi kata dalam skrip ini. File disertakan saat skrip
awalnya diurai.

EVAL
<%= ekspresi %>

cetak ekspresi shell. Gula sintaksis untuk "echo expr".

KOMENTAR
<%# komentar %>

Blok komentar. Apa pun di blok komentar tidak diuraikan. Komentar dapat bersarang
dan dapat berisi elemen haserl lainnya.

CONTOH


PERINGATAN
Contoh di bawah ini disederhanakan untuk menunjukkan cara menggunakan haserl. Anda harus
akrab dengan keamanan skrip web dasar sebelum menggunakan haserl (atau skrip apa pun
bahasa) dalam lingkungan produksi.

Sederhana perintah
#!/usr/local/bin/haserl
tipe konten: teks/polos

<%# Ini adalah contoh skrip "env" %>
<% env %>

Mencetak hasil dari env perintah sebagai dokumen "teks/polos" tipe mime. Ini
itu haserl versi umum printenv cgi.

putaran dengan dinamis keluaran
#!/usr/local/bin/haserl
Jenis konten: teks/html




<% untuk a di Merah Biru Kuning Cyan; lakukan %>
"><% echo -n "$a" %>
<% selesai %>




Mengirim dokumen "teks/html" tipe mime ke klien, dengan tabel html dengan
elemen yang diberi label dengan warna latar belakang.

penggunaan Kulit didefinisikan fungsi.
#!/usr/local/bin/haserl
tipe konten: teks/html

<% # mendefinisikan fungsi pengguna
tabel_elemen() {
gema " $1 "
}
%>



<% untuk a di Merah Biru Kuning Cyan; lakukan %>
<% table_element $a %>
<% selesai %>




Sama seperti di atas, tetapi menggunakan fungsi shell alih-alih html yang disematkan.

Diri Referensi CGI dengan a bentuk
#!/usr/local/bin/haserl
tipe konten: teks/html


Contoh Formulir
" method="GET">
<% # Lakukan validasi dasar FORM_textfield
# Untuk mencegah serangan web umum
FORM_textfield=$( echo "$FORM_textfield" | sed "s/[^A-Za-z0-9 ]//g" )
%>
<input type=text name=textfield
Nilai="<% echo -n "$FORM_textfield" | tr az AZ %>" cols=20>




Mencetak formulir. Jika klien memasukkan teks dalam formulir, CGI dimuat ulang (didefinisikan
by $SCRIPT_NAME) dan bidang teks dibersihkan untuk mencegah serangan web, lalu
formulir ditampilkan ulang dengan teks yang dimasukkan pengguna. Teksnya menggunakan huruf kapital.

Mengunggah a fillet
#!/usr/local/bin/haserl --upload-limit=4096 --upload-dir=/ Tmp
tipe konten: teks/html


" method=POST enctype="multipart/form-data" >



<% if test -n "$HASERL_uploadfile_path"; lalu %>

Anda mengunggah file bernama <% echo -n $FORM_uploadfile_name %> , dan itu
. disimpan sementara di server sebagai . Itu
file adalah <% cat $HASERL_uploadfile_path | wc -c %> panjang byte.
<% rm -f $HASERL_uploadfile_path %> Jangan khawatir, file baru saja dihapus
dari server web.
<% lain %>
Anda belum mengunggah file.
<% fi %>



Menampilkan formulir yang memungkinkan untuk mengunggah file. Hal ini dicapai dengan menggunakan
--upload-batas dan dengan mengatur formulir enctype untuk multipart/formulir-data. Jika
klien mengirim file, kemudian beberapa informasi mengenai file tersebut dicetak, dan kemudian
dihapus. Jika tidak, formulir menyatakan bahwa klien belum mengunggah file.

RFC-2616 Kesesuaian
#!/usr/local/bin/haserl
<% echo -en "tipe konten: teks/html\r\n\r\n" %>

...


Untuk sepenuhnya mematuhi spesifikasi HTTP, header harus diakhiri menggunakan
CR+LF, daripada penghentian jalur LF unix normal saja. Sintaks di atas dapat
digunakan untuk menghasilkan header yang sesuai dengan RFC 2616.

LINGKUNGAN


Selain variabel lingkungan yang diwarisi dari server web, berikut ini:
variabel lingkungan selalu didefinisikan saat startup:

HASRLVER
haserl versi - tag informasi.

SESIONID
Tag heksadesimal yang unik untuk masa pakai CGI (dihasilkan saat
cgi dimulai; dan tidak berubah hingga kueri POST atau GET lainnya dibuat.)

HASERL_ACCEPT_ALL
Jika --Terima semua bendera ditetapkan, -1, Jika tidak 0.

HASERL_SHELL
Nama shell haserl mulai menjalankan perintah sub-shell.

HASERL_UPLOAD_DIR
Direktori haserl akan digunakan untuk menyimpan file yang diunggah.

HASERL_UPLOAD_LIMIT
Jumlah KB yang diizinkan untuk dikirim dari klien ke server.

Variabel-variabel ini dapat dimodifikasi atau ditimpa dalam skrip, meskipun yang
dimulai dengan "HASERL_" hanya sebagai informasi, dan tidak memengaruhi skrip yang sedang berjalan.

KESELAMATAN FITUR


Ada banyak literatur mengenai bahaya menggunakan shell untuk memprogram skrip CGI.
haserl mengandung beberapa perlindungan untuk mengurangi risiko ini.

Lingkungan Hidup Variabel
Kode untuk mengisi variabel lingkungan berada di luar cakupan sub-
kerang. Ini mem-parsing pada karakter? dan &, sehingga lebih sulit dilakukan oleh klien
serangan "suntikan". Sebagai contoh, foo.cgi?a=test;cat / etc / passwd dapat mengakibatkan
variabel yang diberi nilai uji dan kemudian hasil lari kucing
/ etc / passwd sedang dikirim ke klien. Haserl akan menetapkan variabel lengkap
nilai: tes; kucing / etc / passwd

Aman untuk menggunakan variabel "berbahaya" ini dalam skrip shell dengan melampirkannya di
kutipan; meskipun validasi harus dilakukan pada semua bidang input.

Hak istimewa Jatuhan
Jika diinstal sebagai skrip suid, haserl akan mengatur uid/gidnya dengan pemilik
naskah. Ini dapat digunakan untuk memiliki satu set skrip CGI yang memiliki berbagai
hak istimewa. jika haserl biner tidak diinstal suid, maka skrip CGI akan
dijalankan dengan uid/gid dari server web.

Menolak perintah line parameter diberikan on itu URL
Jika URL tidak berisi "=" yang tidak dikodekan, maka spesifikasi CGI menyatakan opsinya
digunakan sebagai parameter baris perintah untuk program. Misalnya menurut
untuk spesifikasi CGI: http://192.168.0.1/test.cgi?--batas unggah%3d2000&foo%3dbar
Harus mengatur batas unggah ke 2000KB selain pengaturan "Foo=bar". Untuk melindungi
terhadap klien yang mengaktifkan unggahan mereka sendiri, haserl menolak opsi baris perintah apa pun
di luar argv [2]. Jika dipanggil sebagai #! skrip, penerjemahnya adalah argv[0], semua
opsi baris perintah yang tercantum di #! garis digabungkan menjadi argv[1], dan
nama skrip adalah argv [2].

LUA


Jika dikompilasi dengan dukungan lua, --shell=lua akan mengaktifkan lua sebagai bahasa skrip sebagai gantinya
dari bash shell. Variabel lingkungan (SCRIPT_NAME, SERVER_NAME, dll) ditempatkan di
tabel ENV, dan variabel bentuk ditempatkan di tabel FORMULIR. Misalnya,
formulir referensi diri di atas dapat ditulis seperti ini:

#!/usr/local/bin/haserl --shell=lua
tipe konten: teks/html


Contoh Formulir
" metode="DAPATKAN">
<% # Lakukan validasi dasar FORM_textfield
# Untuk mencegah serangan web umum
FORM.textfield=string.gsub(FORM.textfield, "[^%a%d]", "")
%>
<input type=text name=textfield
Nilai="<% io.write (string.upper(FORM.textfield)) %>" cols=20>




Operator <%= adalah gula sintaksis untuk io.write (mengikat ( ... )) Jadi, misalnya,
Nilai= baris di atas dapat ditulis: Nilai="<%= string.upper(FORM.textfield) %>" cols=20>

skrip haserl lua dapat menggunakan fungsi haserl.loadfile(nama file) untuk memproses target
skrip sebagai skrip haserl (lua). Fungsi mengembalikan jenis "fungsi".

Sebagai contoh,

bar.lsp
<% io.write ("Halo Dunia") %>

Pesan Anda adalah <%= gvar %>

-- Akhir Penyertaan file --

foo.haserl
#!/usr/local/bin/haserl --shell=lua
<% m = haserl.loadfile("bar.lsp")
gvar = "Jalankan sebagai m()"
m ()

gvar = "Muat dan jalankan dalam satu langkah"
haserl.loadfile("bar.lsp")()
%>

Running foo akan menghasilkan:

Hello Dunia
Pesan Anda Jalankan sebagai m()
-- Akhir Penyertaan file --
Hello Dunia
Pesan Anda adalah Muat dan jalankan dalam satu langkah
-- Akhir Penyertaan file --

Fungsi ini memungkinkan untuk memiliki halaman server haserl bersarang - cuplikan halaman
yang diproses oleh tokenizer haserl.

LUAC


The luac "shell" adalah bongkahan lua yang telah dikompilasi sebelumnya, jadi pengeditan dan pengujian skrip yang interaktif
itu tidak mungkin. Namun, haserl hanya dapat dikompilasi dengan dukungan luac, dan ini memungkinkan
lua mendukung bahkan dalam lingkungan memori kecil. Semua fitur haserl lua yang tercantum di atas adalah
masih ada. (Jika luac adalah satu-satunya shell yang dibangun ke dalam haserl, haserl.loadfile adalah
dinonaktifkan, karena pengurai haserl tidak dikompilasi.)

Berikut adalah contoh skrip trivial, diubah menjadi skrip luac cgi:

Diberikan file test.lua:
print ("Jenis Konten: teks/polos0)
print ("UUID Anda untuk proses ini adalah: " .. ENV.SESSIONID)

Itu dapat dikompilasi dengan luac:
luac -o test.luac -s test.lua

Dan kemudian header haserl ditambahkan ke dalamnya:
echo '#!/usr/bin/haserl --shell=luac' | cat - test.luac >luac.cgi

Atau, dimungkinkan untuk mengembangkan seluruh situs web menggunakan lua shell standar,
dan kemudian haserl sendiri memproses skrip untuk kompiler luac sebagai bagian dari a
membangun proses. Untuk melakukan ini, gunakan --shell=lua, dan kembangkan situs web. Saat siap untuk membangun
lingkungan runtime, tambahkan baris --debug ke skrip lua Anda, dan jalankan keluarannya
hasilnya ke file sumber .lua. Sebagai contoh:

Mengingat skrip haserl test.cgi:
#!/usr/bin/haserl --shell=lua --debug
Tipe-Konten: teks/polos

UUID Anda untuk proses ini adalah <%= ENV.SESSIONID %>

Prakompilasi, kompilasi, dan tambahkan header haserl luac:
./test.cgi > test.lua
luac -s -o test.luac test.lua
echo '#!/usr/bin/haserl --shell=luac' | cat - test.luac >luac.cgi

Gunakan haserl online menggunakan layanan onworks.net


Ad


Ad