АнглийскийФранцузскийИспанский

Ad


Значок OnWorks

haserl - Интернет в облаке

Запустите haserl в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда haserl, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


haserl - программа для написания сценариев cgi для встраиваемых сред

СИНТАКСИС


#! / usr / bin / haserl [--shell =путь] [--upload-dir =дирспец] [--upload-handler =обработчик]
[--upload-limit =предел] [--принять все] [--принять-нет] [--тихий] [--отлаживать]

[текст] [<% shell script%>] [текст] ...

ОПИСАНИЕ


Haserl - это небольшая оболочка cgi, которая позволяет программировать cgi в стиле "PHP", но использует UNIX
bash-подобная оболочка или Lua в качестве языка программирования. Он очень маленький, поэтому его можно использовать
во встроенных средах или там, где что-то вроде PHP слишком велико.

Он сочетает в себе три функции в небольшом движке cgi:

Он анализирует запросы POST и GET, помещая элементы формы как пары имя = значение в
среда для использования сценария CGI. Это чем-то похоже на uncgi обертка.

Он открывает оболочку и переводит весь текст в печатные инструкции. Весь текст
внутри <% ...%> конструкции дословно передаются оболочке. Это несколько
как писать PHP скриптов.

При желании его можно установить, чтобы передать права доступа владельцу скрипта,
придавая ему некоторые из функций безопасности Суексек or cgiwrapper.

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ РЕЗЮМЕ


Это сводка параметров командной строки. Пожалуйста, посмотрите ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ раздела под
длинное имя опции для полного описания.

-a - принять все
-n --принять-нет
-d --отладка
-s, --шелл
-С, --тишина
-U, --upload-каталог
-u, --загрузка-лимит
-H, --upload-обработчик

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ


--принять все
Программа обычно принимает данные POST только тогда, когда REQUEST_METHOD - POST и
принимает данные о данных URL только тогда, когда REQUEST_METHOD имеет значение GET. Этот вариант
позволяет принимать данные POST и URL независимо от REQUEST_METHOD.
Когда этот параметр установлен, REQUEST_METHOD имеет приоритет (например, если метод
это POST, переменные FORM_variables берутся из данных COOKIE, данных GET и данных POST, в
тот заказ. Если используется метод GET, переменные FORM_variables берутся из данных COOKIE, POST
data и GET data.) По умолчанию не принимаются все методы ввода - только
Данные COOKIE и REQUEST_METHOD.

- не принимать
Если указано, haserl не будет анализировать стандартный ввод как содержимое http перед обработкой.
сценарий. Это полезно при вызове сценария haserl из другого сценария haserl.

--отлаживать
Вместо выполнения сценария распечатайте сценарий, который будет выполняться. Если
переменная среды REQUEST_METHOD установлена, данные отправляются с
простой / текстовый тип содержимого. В противном случае сценарий оболочки печатается дословно.

--shell =путь
Укажите альтернативную оболочку, подобную bash, для использования. По умолчанию "/ Бен / ш"

Чтобы включить параметры оболочки, не используйте --shell =/ Бен / ш формат. Вместо этого используйте
альтернативный формат без "=", например --shell "/ bin / bash --norc ". Обязательно
заключите строку параметра в кавычки, чтобы защитить любые специальные символы.

Если скомпилирован с помощью библиотек Lua, то строка «lua» используется для использования интегрированного
Lua vm. Эта строка чувствительна к регистру. Пример: --shell =луна

Альтернатива - «люак». Это приводит к отключению парсеров haserl и lua,
и предполагается, что сценарий представляет собой предварительно скомпилированный фрагмент lua. Видеть ЛУАК ниже для более
Информация.

--тихий
Haserl обычно выводит информационное сообщение об ошибках. Этот
подавляет сообщение об ошибке, поэтому использование haserl не рекламируется.

--upload-dir =дирспец
По умолчанию "/ Tmp". Все загруженные файлы создаются с временным именем файла в этом
каталог HASERL_xxx_path содержит имя временного файла. FORM_xxx_имя
содержит исходное имя файла, указанное клиентом.

--upload-handler =путь
Если указано, загрузка файлов обрабатывается этим обработчиком, а не записывается в
временные файлы. Должен быть указан полный путь (ПУТЬ не ищется), и
обработчику выгрузки дается один параметр командной строки: имя FIFO на
который будет отправлен загружаемый файл. Кроме того, обработчик может получить 3
переменные среды: ТИП СОДЕРЖИМОГО, ИМЯ ФАЙЛАкачества ИМЯ. Они отражают MIME
заголовки content-disposition для содержимого. Haserl будет форкнуть обработчик для каждого
файл загружен, и отправит содержимое файла загрузки в указанный FIFO.
Затем Haserl будет блокировать, пока обработчик не завершит работу. Этот метод для знатоков
только.

--upload-limit =предел
Разрешить файл в кодировке MIME размером до предел KB быть загруженным. По умолчанию 0KB (не
загрузка разрешена). Обратите внимание, что mime-кодирование увеличивает размер данных на 33%.

ОБЪЯВЛЕНИЕ OF РАБОТА


Обычно веб-сервер устанавливает несколько переменных среды, а затем использует вилка or
другой способ запустить сценарий CGI. Если в сценарии используется Хазерл переводчик,
следующее происходит:

If Хазерл устанавливается suid root, затем uid / gid устанавливается для владельца скрипта.

Среда проверяется на наличие HTTP_COOKIE, который мог быть установлен в Интернете
сервер. Если он существует, проанализированное содержимое помещается в локальную среду.

Среда проверяется на наличие REQUEST_METHOD, который был установлен веб-сервером.
В зависимости от метода запроса считывается и анализируется стандартный ввод. Разобранный
содержимое помещается в локальную среду.

Скрипт токенизируется, парсинг Хазерл блоки кода из необработанного текста. Необработанный текст
преобразуется в операторы «эхо», а затем все токены отправляются во вспомогательную оболочку.

Хазерл вилки и вспомогательная оболочка (обычно / Бен / ш) запускается.

Все токены отправляются на STDIN суб-оболочки с завершающим выход команда.

Когда суб-оболочка завершается, Хазерл интерпретатор выполняет окончательную очистку и
затем завершается.

КЛИЕНТ БОКОВАЯ СТОРОНА ВХОД


Ассоциация Хазерл интерпретатор будет декодировать данные, отправленные через переменную среды HTTP_COOKIE, и
метод GET или POST от клиента и сохранить их как переменные среды, которые могут
получить доступ через haserl. Имя переменной следует за именем, указанным в источнике,
за исключением того, что префикс ( ФОРМА_) добавляется в начале. Например, если клиент отправляет «foo = bar»,
переменная окружения FORM_foo=бар.

Для метода HTTP_COOKIE переменные также сохраняются с префиксом ( ПЕЧЕНЬЕ_) добавлен.
Например, если HTTP_COOKIE включает «foo = bar», переменная среды будет
COOKIE_foo=бар.

Для метода GET данные, отправленные в форме% xx, переводятся в символы, которые они
представляют, и переменные также сохраняются с префиксом ( ПОЛУЧИТЬ_) добавлен. Например, если
QUERY_STRING включает "foo = bar", переменная среды GET_foo=бар.

Для метода POST переменные также сохраняются с префиксом ( POST_) добавлен. За
Например, если поток сообщений включает "foo = bar", переменная среды будет POST_foo=бар.

Кроме того, для метода POST, если данные отправляются с использованием многочастному / форм-данных, кодирование,
данные автоматически декодируются. Обычно это используется, когда файлы загружаются из Интернета.
клиент, использующий .

ЗАМЕТКА Когда файл загружается на веб-сервер, он сохраняется в директория загрузки
каталог. FORM_variable_name = содержит имя загруженного файла (как
уточняется заказчиком.) HASERL_variable_path = содержит имя файла в
директория загрузки который содержит загруженный контент. Чтобы предотвратить проникновение злонамеренных клиентов
заполнение директория загрузки на вашем веб-сервере загрузка файлов разрешена только тогда, когда
- предел загрузки Опция используется, чтобы указать, насколько большой файл может быть загружен. Haserl
автоматически удаляет временный файл по завершении сценария. Чтобы сохранить
файл, переместите или переименуйте его где-нибудь в скрипте.

Обратите внимание, что имя файла хранится в ХАСЕРЛ_путь_переменной Это потому, что FORM_,
Переменные GET_ и POST_ могут быть изменены клиентом, и злонамеренный клиент может
установить вторую переменную с именем переменная_путь =/ И т.д. / пароль. Предыдущие версии
не сохранил путь в ХАСЕРЛ пространство имен. к поддерживать назад
совместимость, домен имя of домен временный файл is Также хранить in FORM_variable = и
POST_variable =. Эта is считается небезопасный и должен не be используемый.

Если клиент отправляет данные изоферменты печени методами POST и GET, затем Хазерл проанализирует только
данные, которые соответствуют REQUEST_METHOD переменная, установленная веб-сервером, если только
принять все опция была установлена. Например, форма, вызываемая методом POST, но имеющая
URI some.cgi? Foo = bar & otherdata = something будет анализировать данные POST, а Foo
и другие данные переменные игнорируются.

Если веб-сервер определяет HTTP_COOKIE переменная среды, данные cookie анализируются.
Данные файлов cookie анализируются до данные GET или POST, поэтому в случае двух переменных
с тем же именем, данные GET или POST перезаписывают информацию cookie.

Когда несколько экземпляров одной и той же переменной отправляются из разных источников,
FORM_variable будет установлен в соответствии с порядком обработки переменных.
HTTP_COOKIE всегда обрабатывается первым, за ним следует REQUEST_METHOD. Если принять-все
была установлена ​​опция, то сначала обрабатывается HTTP_COOKIE, а затем метод not
указывается REQUEST_METHOD, за которым следует REQUEST_METHOD. Последний экземпляр
переменная будет использоваться для установки FORM_variable. Обратите внимание, что переменные также отдельно
создается как COOKIE_variable, GET_variable и POST_variable. Это позволяет использовать
совпадающие имена из каждого источника.

Когда несколько экземпляров одной и той же переменной отправляются из одного источника, только последний
один спасен. Чтобы сохранить все копии (например, для множественного выбора), добавьте "[]" в конец
имени переменной. Все результаты будут возвращены через символы новой строки. Например,
host = Enoch & host = Esther & host = Joshua приводит к "FORM_host = Joshua".
host [] = Енох и хост [] Эстер и хост [] = Иисус Навин приводит к "FORM_host = Енох \ nEsther \ nJoshua"

АНГЛИЙСКИЙ ЯЗЫК


Следующие языковые структуры распознаются Хазерл.

БЕГ
<% [сценарий оболочки]%>

Все, что заключено в теги <%%>, отправляется на выполнение во вспомогательную оболочку. Текст
отправляется дословно.

ВКЛЮЧАЮТ
<% в спецификации пути%>

Дословно включите в этот сценарий еще один файл. Файл включается, когда скрипт
изначально разбирается.

EVAL
<% = выражение%>

напечатайте выражение оболочки. Синтаксический сахар для "echo expr".

КОММЕНТАРИЙ
<% # комментарий%>

Блок комментариев. Все, что находится в блоке комментариев, не анализируется. Комментарии могут быть вложенными
и может содержать другие элементы haserl.

ПРИМЕРЫ


ПРЕДУПРЕЖДЕНИЕ
Приведенные ниже примеры упрощены, чтобы показать, как использовать Хазерл. Ты должен быть
ознакомился с основами безопасности веб-сценариев перед использованием Хазерл (или любой скрипт
язык) в производственной среде.

просто Command
#! / usr / local / bin / haserl
тип содержимого: текст / простой

<% # Это пример сценария "env"%>
<% env%>

Распечатывает результаты окр как "текстовый / простой" документ mime-типа. Это
домен Хазерл версия общего printenv компьютерная графика

петля динамический выходной
#! / usr / local / bin / haserl
Тип содержимого: текст / html




<% для a в красном синем желтом голубом; делать%>
"> <% echo -n" $ a "%>
<% готово%>




Отправляет клиенту документ MIME-типа «text / html» с таблицей html с
элементы, отмеченные цветом фона.

Используйте Оболочка определенный функции.
#! / usr / local / bin / haserl
тип содержимого: текст / HTML

<% # определить пользовательскую функцию
table_element () {
эхо " 1 доллар "
}
%>



<% для a в красном синем желтом голубом; делать%>
<% table_element $ a%>
<% готово%>




То же, что и выше, но использует функцию оболочки вместо встроенного HTML.

Сам привязка CGI a форма
#! / usr / local / bin / haserl
тип содержимого: текст / HTML


Образец формы
" method="GET">
<% # Выполните базовую проверку FORM_textfield
# Для предотвращения распространенных веб-атак
FORM_textfield = $ (echo "$ FORM_textfield" | sed "s / [^ A-Za-z0-9] // g")
%>
<тип ввода=имя текста=текстовое поле
Значение = "<% echo -n" $ FORM_textfield "| tr az AZ%>" cols = 20>




Распечатывает форму. Если клиент вводит текст в форму, CGI перезагружается (определяется
by $ SCRIPT_NAME), а текстовое поле дезинфицируется для предотвращения веб-атак, затем
форма отображается повторно с текстом, введенным пользователем. Текст в верхнем регистре.

Загрузка a Файл
#! / usr / local / bin / haserl --upload-limit = 4096 --upload-dir =/ Tmp
тип содержимого: текст / HTML


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



<% if test -n "$ HASERL_uploadfile_path"; затем%>

Вы загрузили файл с именем <% echo -n $ FORM_uploadfile_name%> , и он был
. временно хранится на сервере как . В
файл был <% cat $ HASERL_uploadfile_path | wc -c%> длина в байтах.
<% rm -f $ HASERL_uploadfile_path%> Не волнуйтесь, файл только что был удален
с веб-сервера.
<% else%>
Вы еще не загрузили файл.
<% fi%>



Отображает форму, позволяющую загружать файлы. Это достигается с помощью
- предел загрузки и установив форму шифровать в multipart / form-data. Если же линия индикатора
клиент отправляет файл, затем печатается некоторая информация о файле, а затем
удалено. В противном случае в форме указано, что клиент не загрузил файл.

RFC-2616 Соответствие
#! / usr / local / bin / haserl
<% echo -en "тип-содержимого: текст / html \ r \ n \ r \ n"%>

...


Чтобы полностью соответствовать спецификации HTTP, заголовки должны заканчиваться с помощью
CR + LF, а не только нормальное завершение строки unix LF. Приведенный выше синтаксис может
использоваться для создания заголовков, совместимых с RFC 2616.

ОКРУЖАЮЩАЯ СРЕДА


Помимо переменных среды, унаследованных от веб-сервера, следующие
переменные среды всегда определяются при запуске:

ХАСЕРЛВЕР
Хазерл версия - информационный тег.

ИДЕНТИФИКАТОР СЕССИИ
Шестнадцатеричный тег, уникальный на протяжении всего срока службы CGI (генерируется, когда
cgi запускается; и не изменяется до тех пор, пока не будет сгенерирован другой запрос POST или GET.)

HASERL_ACCEPT_ALL
Если же линия индикатора --принять все установлен флаг, -1В противном случае 0.

ХАСЕРЛ_SHELL
Имя оболочки haserl начало запускать команды под-оболочки.

HASERL_UPLOAD_DIR
Каталог, который haserl будет использовать для хранения загруженных файлов.

HASERL_UPLOAD_LIMIT
Количество КБ, которое разрешено отправлять от клиента на сервер.

Эти переменные могут быть изменены или перезаписаны внутри скрипта, хотя
начинающиеся с "HASERL_" носят информационный характер и не влияют на запущенный скрипт.

БЕЗОПАСНОСТЬ ФУНКЦИИ И ОСОБЕННОСТИ


Существует много литературы об опасностях использования оболочки для программирования сценариев CGI.
Хазерл содержит некоторые защиты для снижения этого риска.

Окружающая среда Переменные
Код для заполнения переменных среды выходит за рамки подпрограммы.
оболочка. Разбирает по персонажам? и &, поэтому клиенту сложнее сделать
«инъекционные» атаки. Например, foo.cgi? a = test; cat / И т.д. / пароль может привести к
переменной, которой присваивается значение тестXNUMX а затем результаты бега кошка
/ И т.д. / пароль отправляется клиенту. Хазерл присвоит переменной полный
значение: тест; кошка / И т.д. / пароль

Эту «опасную» переменную можно безопасно использовать в сценариях оболочки, заключив ее в
цитаты; хотя проверка должна выполняться во всех полях ввода.

Привилегия Опустившись
Если установлено как suid-скрипт, Хазерл установит его uid / gid на идентификатор владельца
сценарий. Это можно использовать для создания набора сценариев CGI, которые имеют различные
привилегия. Если Хазерл двоичный файл не установлен suid, тогда сценарии CGI будут
запустить с uid / gid веб-сервера.

Отклонить команду линия параметры данный on домен URL
Если URL-адрес не содержит незакодированного символа "=", то в спецификации CGI указаны параметры.
должны использоваться в качестве параметров командной строки для программы. Например, согласно
к спецификации CGI: http://192.168.0.1/test.cgi? - предел загрузки% 3d2000 & foo% 3dbar
Следует установить предел загрузки 2000 КБ в дополнение к настройке «Foo = bar». Защищать
против клиентов, разрешающих свои собственные загрузки, Хазерл отклоняет любые параметры командной строки
за пределами argv [2]. Если вызывается как #! скрипт, интерпретатор - argv [0], все
параметры командной строки, перечисленные в #! строки объединяются в argv [1], а
имя скрипта - argv [2].

LUA


Если скомпилирован с поддержкой lua, --shell = lua вместо этого включит lua в качестве языка сценария
оболочки bash. Переменные среды (SCRIPT_NAME, SERVER_NAME и т. Д.) Помещаются в
таблица ENV, а переменные формы помещаются в таблицу FORM. Например,
Самостоятельная ссылка на форму выше может быть записана следующим образом:

#! / usr / local / bin / haserl --shell = lua
тип содержимого: текст / HTML


Образец формы
"method =" GET ">
<% # Выполните базовую проверку FORM_textfield
# Для предотвращения распространенных веб-атак
FORM.textfield = string.gsub (FORM.textfield, "[^% a% d]", "")
%>
<тип ввода=имя текста=текстовое поле
Value = "<% io.write (string.upper (FORM.textfield))%>" cols = 20>




Оператор <% = является синтаксическим сахаром для io.write (нанизывать( ... )) Так, например,
Значение = строка выше может быть записана: Значение = "<% = строка.upper (FORM.textfield) %> " cols = 20>

Скрипты haserl lua могут использовать функцию haserl.loadfile (имя файла) обработать цель
скрипт как скрипт haserl (lua). Функция возвращает тип «функции».

Например,

бар.lsp
<% io.write ("Привет, мир")%>

Ваше сообщение: <% = gvar%>

- Конец включаемого файла -

foo.haserl
#! / usr / local / bin / haserl --shell = lua
<% m = haserl.loadfile ("bar.lsp")
gvar = "Запуск от имени m ()"
м ()

gvar = "Загрузить и запустить за один шаг"
haserl.loadfile ("bar.lsp") ()
%>

Бег Foo произведет:

Привет мир
Ваше сообщение Run as m ()
- Конец включаемого файла -
Привет мир
Ваше сообщение загружается и запускается за один шаг
- Конец включаемого файла -

Эта функция позволяет иметь вложенные страницы сервера haserl - фрагменты страниц.
которые обрабатываются токенизатором haserl.

ЛУАК


Ассоциация Луак "shell" - это предварительно скомпилированный блок lua, поэтому интерактивное редактирование и тестирование скриптов
это невозможно. Однако haserl можно скомпилировать только с поддержкой luac, и это позволяет
lua поддерживает даже в небольшой среде памяти. Все перечисленные выше функции haserl lua
по-прежнему доступны. (Если luac - единственная оболочка, встроенная в haserl, файл haserl.loadfile
отключен, так как парсер haserl не скомпилирован.)

Вот пример тривиального скрипта, преобразованного в скрипт luac cgi:

Учитывая файл test.lua:
print ("Content-Type: text / plain0)
print ("Ваш UUID для этого прогона:" .. ENV.SESSIONID)

Его можно скомпилировать с помощью luac:
luac -o test.luac -s test.lua

А потом к нему добавился заголовок haserl:
echo '#! / usr / bin / haserl --shell = luac' | кошка - test.luac> luac.cgi

В качестве альтернативы можно разработать целый веб-сайт, используя стандартную оболочку lua,
а затем сам haserl предварительно обработает скрипты для компилятора luac как часть
процесс сборки. Для этого используйте --shell = lua и разработайте веб-сайт. Когда все будет готово к строительству
среды выполнения, добавьте строку --debug в свои скрипты lua и запустите их, выводя
результаты в исходные файлы .lua. Например:

Учитывая сценарий haserl test.cgi:
#! / usr / bin / haserl --shell = lua --debug
Content-Type: Текст / одноцветный

Ваш UUID для этого прогона: <% = ENV.SESSIONID%>

Предварительно скомпилируйте, скомпилируйте и добавьте заголовок haserl luac:
./test.cgi> test.lua
luac -s -o test.luac test.lua
echo '#! / usr / bin / haserl --shell = luac' | кошка - test.luac> luac.cgi

Используйте haserl онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    Pharser
    Pharser
    Phaser - это быстрый, бесплатный и увлекательный
    исходный игровой фреймворк HTML5, который предлагает
    WebGL и рендеринг Canvas через
    настольные и мобильные веб-браузеры. Игры
    может быть со ...
    Скачать Фазер
  • 2
    VASSAL Двигатель
    VASSAL Двигатель
    VASSAL - игровой движок для создания
    электронные версии традиционной доски
    и карточные игры. Он обеспечивает поддержку
    рендеринг и взаимодействие игровых элементов,
    и ...
    Скачать движок VASSAL
  • 3
    OpenPDF - форк iText
    OpenPDF - форк iText
    OpenPDF — это библиотека Java для создания
    и редактирование PDF-файлов с помощью LGPL и
    Лицензия с открытым исходным кодом MPL. OpenPDF – это
    LGPL/MPL преемник iText с открытым исходным кодом,
    и ...
    Скачать OpenPDF — форк iText
  • 4
    SAGA GIS
    SAGA GIS
    САГА - Автоматизированная система
    Геонаучный анализ - это географический
    Программное обеспечение информационной системы (ГИС) с
    огромные возможности для геоданных
    обработка и анализ ...
    Скачать ГИС САГА
  • 5
    Панель инструментов для Java / JTOpen
    Панель инструментов для Java / JTOpen
    IBM Toolbox for Java / JTOpen — это
    библиотека классов Java, поддерживающая
    клиент/сервер и интернет-программирование
    моделей в систему под управлением OS/400,
    i5/ОС, о...
    Скачать набор инструментов для Java/JTOpen
  • 6
    D3.js
    D3.js
    D3.js (или D3 для документов, управляемых данными)
    это библиотека JavaScript, которая позволяет вам
    для создания динамических интерактивных данных
    визуализации в веб-браузерах. С D3
    вы...
    Скачать D3.js
  • Больше »

Команды Linux

Ad