Đây là hàm băm lệnh có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
haserl - Một chương trình kịch bản cgi cho môi trường nhúng
SYNOPSIS
#! / usr / bin / haserl [--shell =đặc tả đường dẫn] [--upload-dir =chỉ thị] [--upload-handler =xử lý]
[--upload-limit =hạn chế] [--chấp nhận tất cả] [- chấp nhận-không] [--im lặng] [--gỡ lỗi]
[text] [<% shell script%>] [text] ...
MÔ TẢ
Haserl là một trình bao bọc cgi nhỏ cho phép lập trình cgi kiểu "PHP", nhưng sử dụng UNIX
bash-like shell hoặc Lua làm ngôn ngữ lập trình. Nó rất nhỏ, vì vậy nó có thể được sử dụng
trong môi trường nhúng hoặc nơi mà thứ gì đó như PHP quá lớn.
Nó kết hợp ba tính năng thành một công cụ cgi nhỏ:
Nó phân tích cú pháp các yêu cầu POST và GET, đặt các phần tử biểu mẫu dưới dạng các cặp name = value vào
môi trường để tập lệnh CGI sử dụng. Điều này phần nào giống như ungi vỏ bánh.
Nó mở một trình bao và dịch tất cả văn bản thành các câu lệnh có thể in được. Tất cả văn bản
bên trong các cấu trúc <% ...%> được chuyển nguyên văn vào shell. Đây là một phần
thích viết lách PHP tập lệnh.
Nó có thể được cài đặt tùy chọn để giảm quyền của nó cho chủ sở hữu của tập lệnh,
cung cấp cho nó một số tính năng bảo mật của suexec or cgiwrapper.
LỰA CHỌN TÓM TẮT
Đây là một bản tóm tắt về các tùy chọn dòng lệnh. Xin vui lòng xem LỰA CHỌN phần dưới
tên tùy chọn dài cho một mô tả hoàn chỉnh.
-a - chấp nhận-tất cả
-n - chấp nhận-không có
-d --gỡ lỗi
-s, --vỏ
-S, --im lặng
-U, --upload-dir
-u, - giới hạn tải lên
-H, - trình xử lý tải lên
LỰA CHỌN
--chấp nhận tất cả
Chương trình thường chỉ chấp nhận dữ liệu POST khi REQUEST_METHOD là POST và
chỉ chấp nhận dữ liệu trên dữ liệu URL khi REQUEST_METHOD là GET. Tùy chọn này
cho phép chấp nhận cả dữ liệu ĐĂNG và URL bất kể REQUEST_METHOD.
Khi tùy chọn này được đặt, REQUEST_METHOD sẽ được ưu tiên (ví dụ: nếu phương thức
là POST, FORM_variables được lấy từ dữ liệu COOKIE, dữ liệu GET và dữ liệu POST, trong
đơn đặt hàng đó. Nếu phương thức là GET, FORM_variables được lấy từ dữ liệu COOKIE, POST
dữ liệu và dữ liệu GET.) Mặc định là không chấp nhận tất cả các phương thức nhập - chỉ
Dữ liệu COOKIE và REQUEST_METHOD.
- chấp nhận-không
Nếu được cung cấp, haserl sẽ không phân tích cú pháp đầu vào chuẩn dưới dạng nội dung http trước khi xử lý
kịch bản. Điều này hữu ích nếu gọi một tập lệnh haserl từ một tập lệnh haserl khác.
--gỡ lỗi
Thay vì thực thi tập lệnh, hãy in ra tập lệnh sẽ được thực thi. Nếu như
biến môi trường 'REQUEST_METHOD' được đặt, dữ liệu được gửi với
loại nội dung thuần túy / văn bản. Nếu không, kịch bản shell được in nguyên văn.
--shell =đặc tả đường dẫn
Chỉ định một trình bao giống bash thay thế để sử dụng. Mặc định là "/ Bin / sh"
Để bao gồm các tham số shell, không sử dụng --shell =/ Bin / sh định dạng. Thay vào đó, hãy sử dụng
định dạng thay thế không có "=", như trong --shell "/ bin / bash --norc ". Hãy chắc chắn
trích dẫn chuỗi tùy chọn để bảo vệ bất kỳ ký tự đặc biệt nào.
Nếu được biên dịch với thư viện Lua, thì chuỗi "lua" được sử dụng để sử dụng
Lua vm. Chuỗi này phân biệt chữ hoa chữ thường. Thí dụ: --shell =mặt trăng
Một thay thế là "luac". Điều này khiến trình phân tích cú pháp haserl và lua bị vô hiệu hóa,
và tập lệnh được giả định là một đoạn lua được biên dịch trước. Nhìn thấy LẠC dưới đây để biết thêm
thông tin.
--im lặng
Haserl thường in một thông báo thông tin về các điều kiện lỗi. Điều này
ngăn chặn thông báo lỗi, để việc sử dụng hàm băm không được quảng cáo.
--upload-dir =chỉ thị
Mặc định là "/ Tmp". Tất cả các tệp đã tải lên được tạo bằng tên tệp tạm thời trong
thư mục HSERL_xxx_path chứa tên của tệp tạm thời. FORM_xxx_name
chứa tên gốc của tệp, như được chỉ định bởi máy khách.
--upload-handler =đặc tả đường dẫn
Khi được chỉ định, quá trình tải lên tệp được xử lý bởi trình xử lý này, thay vì được ghi vào
Hồ sơ tạm thời. Đường dẫn đầy đủ phải được cung cấp (PATH không được tìm kiếm) và
trình xử lý tải lên được cung cấp một tham số dòng lệnh: Tên của FIFO trên
mà tệp tải lên sẽ được gửi. Ngoài ra, người xử lý có thể nhận được 3
biến môi trường: CONTENT_TYPE, TÊN TỆPvà TÊN. Những điều này phản ánh MIME
tiêu đề content-layout cho nội dung. Haserl sẽ phân nhánh trình xử lý cho mỗi
đã tải lên tệp và sẽ gửi nội dung của tệp tải lên đến FIFO được chỉ định.
Sau đó Haserl sẽ chặn cho đến khi trình xử lý kết thúc. Phương pháp này dành cho các chuyên gia
chỉ
--upload-limit =hạn chế
Cho phép tệp được mã hóa mime lên đến hạn chế KB được tải lên. Mặc định là 0KB (không
cho phép tải lên). Lưu ý rằng mã hóa mime thêm 33% vào kích thước của dữ liệu.
TỔNG QUAN OF HOẠT ĐỘNG
Nói chung, máy chủ web thiết lập một số biến môi trường, sau đó sử dụng ngã ba or
một phương pháp khác để chạy tập lệnh CGI. Nếu tập lệnh sử dụng cây tầm ma thông dịch viên,
sau đây xảy ra:
If cây tầm ma được cài đặt gốc suid, sau đó uid / gid được đặt thành chủ sở hữu của tập lệnh.
Môi trường được quét cho HTTP_COOKIE, có thể đã được thiết lập bởi web
máy chủ. Nếu nó tồn tại, nội dung được phân tích cú pháp sẽ được đặt trong môi trường cục bộ.
Môi trường được quét cho REQUEST_METHOD, được đặt bởi máy chủ web.
Dựa trên phương thức yêu cầu, đầu vào chuẩn được đọc và phân tích cú pháp. Đã phân tích cú pháp
nội dung được đặt trong môi trường cục bộ.
Tập lệnh được mã hóa, phân tích cú pháp cây tầm ma khối mã từ văn bản thô. Văn bản thô là
được chuyển đổi thành các câu lệnh "echo" và sau đó tất cả các mã thông báo được gửi đến trình bao phụ.
cây tầm ma fork và một sub-shell (thường là / Bin / sh) được bắt đầu.
Tất cả các mã thông báo được gửi đến STDIN của lớp vỏ phụ, với một dấu ra chỉ huy.
Khi trình bao phụ kết thúc, cây tầm ma thông dịch viên thực hiện dọn dẹp lần cuối và
sau đó chấm dứt.
KHÁCH HÀNG BÊN ĐẦU VÀO
cây tầm ma trình thông dịch sẽ giải mã dữ liệu được gửi qua biến môi trường HTTP_COOKIE và
phương thức GET hoặc POST từ máy khách và lưu trữ chúng dưới dạng các biến môi trường có thể
được truy cập bởi haserl. Tên của biến theo tên được cung cấp trong nguồn,
ngoại trừ tiền tố ( MẪU_) được thêm vào trước. Ví dụ: nếu khách hàng gửi "foo = bar",
biến môi trường là FORM_foo=thanh.
Đối với phương thức HTTP_COOKIE, các biến cũng được lưu trữ với tiền tố ( COOKIES_) thêm.
Ví dụ: nếu HTTP_COOKIE bao gồm "foo = bar", thì biến môi trường là
COOKIE_foo=thanh.
Đối với phương thức GET, dữ liệu được gửi ở dạng% xx được dịch thành các ký tự mà chúng
đại diện và các biến cũng được lưu trữ với tiền tố ( GET_) thêm. Ví dụ, nếu
QUERY_STRING bao gồm "foo = bar", biến môi trường là GET_foo=thanh.
Đối với phương thức POST, các biến cũng được lưu trữ với tiền tố ( POST_) thêm. Vì
ví dụ: nếu luồng bài đăng bao gồm "foo = bar", thì biến môi trường là POST_foo=thanh.
Ngoài ra, đối với phương thức POST, nếu dữ liệu được gửi bằng multiart / form-data mã hóa,
dữ liệu được giải mã tự động. Điều này thường được sử dụng khi các tệp được tải lên từ web
khách hàng sử dụng .
LƯU Ý Khi một tệp được tải lên máy chủ web, tệp đó sẽ được lưu trữ trong thư mục tải lên
thư mục. FORM_variable_name = chứa tên của tệp được tải lên (như
do khách hàng chỉ định.) HASERL_variable_path = chứa tên của tệp trong
thư mục tải lên chứa nội dung đã tải lên. Để ngăn chặn các máy khách độc hại
làm đầy thư mục tải lên trên máy chủ web của bạn, tải lên tệp chỉ được phép khi
- giới hạn tải lên tùy chọn được sử dụng để chỉ định dung lượng tệp có thể được tải lên. Haserl
tự động xóa tệp tạm thời khi tập lệnh kết thúc. Để giữ lại
, di chuyển nó hoặc đổi tên nó ở đâu đó trong script.
Lưu ý rằng tên tệp được lưu trữ trong HASERL_biến_path Điều này là do FORM_,
Các biến GET_ và POST_ có thể được sửa đổi bởi ứng dụng khách và ứng dụng khách độc hại có thể
đặt một biến thứ hai với tên biến_path =/ etc / passwd. Các phiên bản trước đó
không lưu trữ pathspec trong HASERL không gian tên. Đến duy trì lạc hậu
khả thi, các tên of các tạm thời hồ sơ is Ngoài ra lưu trữ in FORM_variable = và
POST_variable =. T is xem xét không an toàn và nên không be đã sử dụng.
Nếu khách hàng gửi dữ liệu cả hai bằng phương thức POST và GET, sau đó cây tầm ma sẽ chỉ phân tích cú pháp
dữ liệu tương ứng với REQUEST_METHOD biến do máy chủ web đặt, trừ khi
chấp nhận tất cả tùy chọn đã được thiết lập. Ví dụ: một biểu mẫu được gọi qua phương thức POST, nhưng có
URI của some.cgi? Foo = bar & otherdata = something sẽ có dữ liệu POST được phân tích cú pháp và foo
và dữ liệu khác các biến bị bỏ qua.
Nếu máy chủ web xác định một HTTP_COOKIE biến môi trường, dữ liệu cookie được phân tích cú pháp.
Dữ liệu cookie được phân tích cú pháp trước dữ liệu GET hoặc POST, vì vậy trong trường hợp có hai biến của
giống tên, dữ liệu GET hoặc POST sẽ ghi đè lên thông tin cookie.
Khi nhiều bản sao của cùng một biến được gửi từ các nguồn khác nhau,
FORM_variable sẽ được đặt theo thứ tự mà các biến được xử lý.
HTTP_COOKIE luôn được xử lý trước, sau đó là REQUEST_METHOD. Nếu chấp nhận tất cả
tùy chọn đã được đặt, sau đó HTTP_COOKIE được xử lý đầu tiên, tiếp theo là phương thức not
được chỉ định bởi REQUEST_METHOD, tiếp theo là REQUEST_METHOD. Phiên bản cuối cùng của
biến sẽ được sử dụng để đặt FORM_variable. Lưu ý rằng các biến cũng riêng biệt
tạo dưới dạng COOKIE_variable, GET_variable và POST_variable. Điều này cho phép sử dụng
trùng tên từ mỗi nguồn.
Khi nhiều bản sao của cùng một biến được gửi từ cùng một nguồn, chỉ bản cuối cùng
một cái đã được lưu. Để giữ tất cả các bản sao (ví dụ: đối với nhiều lựa chọn), hãy thêm "[]" vào cuối
của tên biến. Tất cả các kết quả sẽ được trả về, phân tách bằng các dòng mới. Ví dụ,
host = Enoch & host = Esther & host = Joshua kết quả là "FORM_host = Joshua".
host [] = Enoch & host [] Esther & host [] = Joshua kết quả là "FORM_host = Enoch \ nEsther \ nJoshua"
NGÔN NGỮ
Các cấu trúc ngôn ngữ sau đây được công nhận bởi cây tầm ma.
CHẠY
<% [shell script]%>
Bất kỳ thứ gì được bao bọc bởi các thẻ <%%> đều được gửi đến trình bao phụ để thực thi. Văn bản
được gửi nguyên văn.
BAO GỒM
<% trong pathspec%>
Bao gồm nguyên văn tệp khác trong tập lệnh này. Tệp được bao gồm khi tập lệnh
được phân tích cú pháp ban đầu.
ĐÁNH GIÁ
<% = biểu thức%>
in biểu thức shell. Đường cú pháp cho "echo expr".
LÀM THẾ NÀO
<% # bình luận%>
Khối bình luận. Mọi thứ trong khối bình luận đều không được phân tích cú pháp. Các bình luận có thể được lồng vào nhau
và có thể chứa các phần tử haserl khác.
VÍ DỤ
CẢNH BÁO
Các ví dụ dưới đây được đơn giản hóa để chỉ ra cách sử dụng cây tầm ma. Bạn nên
làm quen với bảo mật kịch bản web cơ bản trước khi sử dụng cây tầm ma (hoặc bất kỳ đoạn mã nào
ngôn ngữ) trong môi trường sản xuất.
Đơn giản Lệnh
#! / usr / local / bin / haserl
loại nội dung: văn bản / đơn giản
<% # Đây là tập lệnh mẫu "env"%>
<% env%>
In kết quả của env lệnh dưới dạng tài liệu "văn bản / thuần túy" kiểu mime. Đây là
các cây tầm ma phiên bản của chung inenv cgi.
Vòng lặp với năng động đầu ra
#! / usr / local / bin / haserl
Loại nội dung: văn bản / html
<% cho a trong Red Blue Yellow Cyan; làm%>
"> <% echo -n" $ a "%>
<% hoàn thành%>
Gửi tài liệu "text / html" kiểu mime cho máy khách, với một bảng html với
các phần tử được gắn nhãn với màu nền.
Sử dụng Shell xác định chức năng.
#! / usr / local / bin / haserl
content-type: text / html
<% # xác định một chức năng người dùng
table_element () {
tiếng vang " $ 1 "
}
%>
<% cho a trong Red Blue Yellow Cyan; làm%>
<% table_element $ a%>
<% hoàn thành%>
Tương tự như trên, nhưng sử dụng một hàm shell thay vì html nhúng.
Tự Tham khảo CGI với a hình thức
#! / usr / local / bin / haserl
content-type: text / html
Biểu mẫu
" method="GET">
<% # Thực hiện một số xác thực cơ bản của trường FORM_text
# Để ngăn chặn các cuộc tấn công web phổ biến
FORM_textfield = $ (echo "$ FORM_textfield" | sed "s / [^ A-Za-z0-9] // g")
%>
<loại đầu vào=tên văn bản=trường văn bản
Giá trị = "<% echo -n" $ FORM_textfield "| tr az AZ%>" cols = 20>
In biểu mẫu. Nếu khách hàng nhập văn bản vào biểu mẫu, CGI sẽ được tải lại (được định nghĩa
by $ SCRIPT_NAME) và trường văn bản được làm sạch để ngăn chặn các cuộc tấn công web, sau đó
biểu mẫu được hiển thị lại với văn bản mà người dùng đã nhập. Văn bản được viết hoa.
Đang tải lên a Tập tin
#! / usr / local / bin / haserl --upload-limit = 4096 --upload-dir =/ Tmp
content-type: text / html
" method=POST enctype="multipart/form-data" >
<% if test -n "$ HASERL_uploadfile_path"; sau đó%>
Bạn đã tải lên một tệp có tên <% echo -n $ FORM_uploadfile_name%> và nó là
. được lưu trữ tạm thời trên máy chủ dưới dạng . Các
tệp là <% cat $ HASERL_uploadfile_path | wc -c%> byte dài.
<% rm -f $ HASERL_uploadfile_path%> Đừng lo lắng, tệp vừa bị xóa
từ máy chủ web.
<% khác%>
Bạn chưa tải lên một tệp nào.
<% fi%>
Hiển thị biểu mẫu cho phép tải tệp lên. Điều này được thực hiện bằng cách sử dụng
- giới hạn tải lên và bằng cách thiết lập biểu mẫu mã hóa đến đa phần / biểu mẫu-dữ liệu. Nếu
khách hàng gửi một tệp, sau đó một số thông tin liên quan đến tệp được in, và sau đó
đã xóa. Nếu không, biểu mẫu nói rằng khách hàng chưa tải lên tệp.
RFC-2616 Sự phù hợp
#! / usr / local / bin / haserl
<% echo -en "content-type: text / html \ r \ n \ r \ n"%>
...
Để tuân thủ đầy đủ đặc điểm kỹ thuật HTTP, các tiêu đề phải được kết thúc bằng cách sử dụng
CR + LF, thay vì chỉ kết thúc dòng LF unix bình thường. Cú pháp trên có thể
được sử dụng để sản xuất các tiêu đề tuân thủ RFC 2616.
MÔI TRƯỜNG
Ngoài các biến môi trường được kế thừa từ máy chủ web, các biến sau
các biến môi trường luôn được xác định khi khởi động:
HASERLVER
cây tầm ma phiên bản - một thẻ thông tin.
ID PHẦN
Một thẻ thập lục phân duy nhất cho vòng đời của CGI (nó được tạo khi
cgi bắt đầu; và không thay đổi cho đến khi tạo một truy vấn POST hoặc GET khác.)
HASERL_ACCCEPT_ALL
Nếu --chấp nhận tất cả cờ đã được đặt, -1, Nếu không 0.
HSERL_SHELL
Tên của shell haserl bắt đầu chạy các lệnh của sub-shell trong.
HASERL_UPLOAD_DIR
Thư mục haserl sẽ sử dụng để lưu trữ các tệp đã tải lên.
HASERL_UPLOAD_LIMIT
Số KB được phép gửi từ máy khách đến máy chủ.
Các biến này có thể được sửa đổi hoặc ghi đè trong tập lệnh, mặc dù những
bắt đầu bằng "HASERL_" chỉ là thông tin và không ảnh hưởng đến tập lệnh đang chạy.
AN TOÀN Tính năng nổi bật:
Có nhiều tài liệu nói về sự nguy hiểm của việc sử dụng shell để lập trình các tập lệnh CGI.
cây tầm ma chứa một số các biện pháp bảo vệ để giảm thiểu rủi ro này.
Môi trường Biến
Mã để điền các biến môi trường nằm ngoài phạm vi của sub-
vỏ bọc. Nó phân tích các ký tự? và &, vì vậy, khách hàng sẽ khó thực hiện
các cuộc tấn công "tiêm". Ví dụ, foo.cgi? a = test; cat / etc / passwd có thể dẫn đến
một biến được gán giá trị thử nghiệm và sau đó là kết quả của việc chạy làm sao
/ etc / passwd được gửi cho khách hàng. Haserl sẽ chỉ định biến hoàn chỉnh
giá trị: kiểm tra; con mèo / etc / passwd
Sẽ an toàn khi sử dụng biến "nguy hiểm" này trong các tập lệnh shell bằng cách đặt nó trong
dấu ngoặc kép; mặc dù xác nhận nên được thực hiện trên tất cả các trường đầu vào.
Đặc quyền Rơi
Nếu được cài đặt dưới dạng tập lệnh suid, cây tầm ma sẽ đặt uid / gid của nó thành uid / gid của chủ sở hữu
kịch bản. Điều này có thể được sử dụng để có một tập hợp các tập lệnh CGI có nhiều
đặc ân. Nếu cây tầm ma nhị phân không được cài đặt suid, thì các tập lệnh CGI sẽ
chạy với uid / gid của máy chủ web.
Từ chối lệnh hàng thông số được on các URL
Nếu URL không chứa "=" chưa được mã hóa, thì thông số CGI nêu các tùy chọn
được sử dụng làm tham số dòng lệnh cho chương trình. Ví dụ, theo
đối với thông số CGI: http://192.168.0.1/test.cgi? - upload-limit% 3d2000 & foo% 3dbar
Nên đặt giới hạn tải lên thành 2000KB ngoài việc đặt "Foo = bar". B ả o V ệ
chống lại khách hàng cho phép tải lên của chính họ, cây tầm ma từ chối bất kỳ tùy chọn dòng lệnh nào
ngoài argv [2]. Nếu được gọi là dấu #! script, thông dịch viên là argv [0], tất cả
các tùy chọn dòng lệnh được liệt kê trong #! dòng được kết hợp thành argv [1], và
tên script là argv [2].
LUA
Nếu được biên dịch với sự hỗ trợ của lua, --shell = lua thay vào đó sẽ kích hoạt lua làm ngôn ngữ tập lệnh
của bash shell. Các biến môi trường (SCRIPT_NAME, SERVER_NAME, v.v.) được đặt trong
bảng ENV và các biến biểu mẫu được đặt trong bảng MẪU. Ví dụ,
biểu mẫu tự tham chiếu ở trên có thể được viết như thế này:
#! / usr / local / bin / haserl --shell = lua
content-type: text / html
Biểu mẫu
"method =" GET ">
<% # Thực hiện một số xác thực cơ bản của trường FORM_text
# Để ngăn chặn các cuộc tấn công web phổ biến
FORM.textfield = string.gsub (FORM.textfield, "[^% a% d]", "")
%>
<loại đầu vào=tên văn bản=trường văn bản
Giá trị = "<% io.write (string.upper (FORM.textfield))%>" cols = 20>
Toán tử <% = là đường cú pháp cho io.write (chuỗi ( ... )) Vì vậy, ví dụ,
Giá trị = dòng trên có thể được viết: Giá trị = "<% = string.upper (FORM.textfield) %> " cols = 20>
haserl lua scripts có thể sử dụng hàm haserl.loadfile (tên tập tin) để xử lý một mục tiêu
script dưới dạng tập lệnh haserl (lua). Hàm trả về một kiểu "hàm".
Ví dụ,
thanh.lsp
<% io.write ("Xin chào Thế giới")%>
Tin nhắn của bạn là <% = gvar%>
- Cuối tệp Bao gồm -
foo.haserl
#! / usr / local / bin / haserl --shell = lua
<% m = haserl.loadfile ("bar.lsp")
gvar = "Run as m ()"
m ()
gvar = "Tải và chạy trong một bước"
haserl.loadfile ("bar.lsp") ()
%>
Chạy foo sẽ sản xuất:
Xin chào thế giới
Tin nhắn của bạn là Run as m ()
- Cuối tệp Bao gồm -
Xin chào thế giới
Tin nhắn của bạn được tải và chạy trong một bước
- Cuối tệp Bao gồm -
Chức năng này làm cho nó có thể có các trang máy chủ haserl lồng nhau - đoạn trích trang
được xử lý bởi haserl tokenizer.
LẠC
luac "shell" là một chunk lua được biên dịch trước, vì vậy việc chỉnh sửa và thử nghiệm tương tác các tập lệnh
là không thể. Tuy nhiên, hàm băm chỉ có thể được biên dịch với sự hỗ trợ của luac và điều này cho phép
lua hỗ trợ ngay cả trong một môi trường bộ nhớ nhỏ. Tất cả các tính năng haserl lua được liệt kê ở trên là
vẫn có sẵn. (Nếu luac là shell duy nhất được tích hợp trong haserl, thì haserl.loadfile là
bị vô hiệu hóa, vì trình phân tích cú pháp haserl không được biên dịch trong.)
Đây là một ví dụ về một tập lệnh tầm thường, được chuyển đổi thành tập lệnh luac cgi:
Đưa ra tệp test.lua:
print ("Loại-Nội dung: văn bản / trơn0)
print ("UUID của bạn cho lần chạy này là:" .. ENV.SESSIONID)
Nó có thể được biên dịch bằng luac:
luac -o test.luac -s test.lua
Và sau đó tiêu đề haserl được thêm vào nó:
echo '#! / usr / bin / haserl --shell = luac' | cat - test.luac> luac.cgi
Ngoài ra, có thể phát triển toàn bộ trang web bằng cách sử dụng trình bao lua tiêu chuẩn,
và sau đó có bản thân hàm băm xử lý trước các tập lệnh cho trình biên dịch luac như một phần của
xây dựng quy trình. Để làm điều này, hãy sử dụng --shell = lua và phát triển trang web. Khi sẵn sàng xây dựng
môi trường thời gian chạy, thêm dòng --debug vào các tập lệnh lua của bạn và chạy chúng xuất ra
kết quả đến tệp nguồn .lua. Ví dụ:
Đưa ra test.cgi script haserl:
#! / usr / bin / haserl --shell = lua --debug
Loại nội dung: văn bản / đơn giản
UUID của bạn cho lần chạy này là <% = ENV.SESSIONID%>
Biên dịch trước, biên dịch và thêm tiêu đề haserl luac:
./test.cgi> test.lua
luac -s -o test.luac test.lua
echo '#! / usr / bin / haserl --shell = luac' | cat - test.luac> luac.cgi
Sử dụng haserl trực tuyến bằng các dịch vụ onworks.net