CGIBASHOPTS: CGI BASH Параметры
CGIBASHOPTS - это небольшая и быстро чистая библиотека BASH, чтобы анализировать параметры веб -форм для сценариев CGI Bash Shell, даже при загрузке двоичных файлов. Он бесплатно использовать без ограничений (лицензия MIT). (c) Colas Nahaboo 2017
QuickStart
- Скопируйте файл
cgibashopts где -нибудь на вашем сервере. Например, как /usr/local/bin/cgibashopts - Просто поставьте этот файл в начале ваших сценариев CGI Bash. Например:
source /usr/local/bin/cgibashopts или . /usr/local/bin/cgibashopts - Значение параметра веб -формы
foo (например, на странице HTML: <input type=text name=foo> ) может быть найдено как значение переменной среды оболочки $FORM_foo
Поиск неисправностей:
- Если что -то пойдет не так, запустите
tests/tewiba -v в каталоге Cgibashopts на вашем сервере, чтобы увидеть, обнаруживает ли набор тестов. - CGIBASHOPTS требует версий GNU
bash , grep , sed . Чтобы проверить это, запустите grep -P . /dev/null , вы не должны получать ошибку. Если вы это сделаете, вы должны установить их в UNIX-подобные системы, не использующие утилиты GNU по умолчанию, такие как MacOS , BusyBox, FreeBSD, BSD и производные SYSV ...- На macOS см. Выпуск № 10
- На Busybox вам нужно установить пакеты для версий GNU
bash , coreutils , grep , sed - На FreeBSD используйте новички
Функции
- Простой в использовании: только один файл.
- Быстро и маленький.
- Чистый удар, за исключением использования Grep, SED и усечения.
- Ручки получают и публикуют запросы, со всеми методами кодирования параметров: приложение/x-www-form-urlencode, multipart/form-data, текст/равнина.
- Использует также строки запроса на поиск индекса устаревшего индекса
- Обрабатывает загрузку двоичных файлов и текстовые файлы с помощью NOS или DOS Newlines. Я не нашел никакой существующей библиотеки, предоставляющей эту функциональность для программирования оболочки CGI
- Использует только «классические» особенности Bash и должен работать со старыми версиями Bash, я думаю, 4.1+
Документация
- При использовании библиотека CGIBASHOPTS декодирует параметры, отправляемые браузером, которые веб -сервер предоставляет для сценариев в качестве различных переменных среды и, необязательно его стандартный вход, согласно стандарту CGI. CGIBASHOPTS делает их доступными для включения сценария в простой в использовании форме: переменные, функции и файлы.
- Чтобы использовать библиотеку, поставьте ее в начале вашего сценария, как можно раньше, чтобы избежать конфликтов с переменными, которые вы можете использовать позже в своем сценарии.
- Библиотека декодирует параметры запросов GET и POST, со всеми возможными способами кодирования параметров (через «enctype»).
- Список имен параметров указан в
$FORMS как разделенная пространственная строка имен. Например: echo "$FORMS" ==> foo bar gee . Имена параметров представлены атрибутом name в различных элементах HTML в форме HTML или отправлены через такие команды, как wget или curl . Имена параметров должны быть законными именами переменных для Bash: буквенно -цифровые символы и подчеркивание, и не начинаются с цифры. - Неверные имена параметров (например: 0to60, AB, A: B, ...) молча игнорируются, а также их значения
- Каждое значение параметра копируется как значение переменной среды Form_ - префикс. Например:
$FORM_foo для элемента формы HTML с именем foo . - Значения параметров с несколькими линиями преобразуются в Enix End of Lines (новая линия вместо возврата перевозки и Newline)
- Загрузки файлов: когда файлы загружаются, через элементы формы, такие как
<input type=file name=file1> , cgibashopts помещает имя параметра (здесь file1 ) в переменную $ formfiles, которая представляет собой пространственный список всех полученных имен параметров. Фактическое имя загруженного файла можно найти в значении переменной (здесь $FORM_file1 ), в то время как содержимое файла можно найти в локальном файле, названном переменной в каталоге $CGIBASHOPTS_DIR (здесь $CGIBASHOPTS_DIR/file1 )- Только на самом деле загруженные файлы создаются и перечислены таким образом. Если пользователь не выбирает какой -либо файл в форме, переменная оболочки не будет определена, ни какой -либо файл.
- Однако пустые загруженные файлы будут созданы. Они будут пусты, конечно.
- Полученные бинарные и текстовые файлы не будут преобразованы в текстовом формате Unix (строки заканчиваются новой линией), даже если клиент загрузил их в формате DOS (строки заканчиваются возвратом каретки и новой линией). Таким образом, вы должны быть готовы обрабатывать линии DOS в загруженных текстовых файлах.
- Предупреждение: функция очистки Bash
cgibashopts_clean должна быть вызвана в конце вашего сценария, чтобы удалить временный каталог $CGIBASHOPTS_DIR хранящий загруженные файлы, если опция -n (см. Ниже) не используется. CGIBASHOPTS делает trap cgibashopts_clean 0 так что эта функция будет автоматически называться в конце вашего сценария, поэтому вам не нужно ничего делать, если вы не используете trap 0 и, таким образом, должны убедиться, что ваш код обрабатывает сигнал выхода явно вызывает cgibashopts_clean .- Поиск CGIBASHOPTS будет стереть любую
trap 0 которая была сделана ранее. Итак, установите свою ловушку 0 после поиска cgibashopts - Вызов CGIBASHOPTS_CLEAN действительно нужен только в том случае, если ваша форма HTML Использует входные элементы типа
file - Как только вы обработаете загруженные файлы, вы можете явно вызвать функцию
cgibashopts_clean , чтобы она больше не нужна, и вы можете использовать ловушки, как пожелаете потом - Если вы не ожидаете загрузки файлов, вы можете использовать опцию -n (см. Ниже)
- Параметры командной строки:
- -n можно дать, чтобы игнорировать и отказаться от любых запросов на загрузку файлов. Это рекомендуется, если вы не ожидаете, что файлы будут загружены, так как он может сохранить некоторую вычислительную нагрузку, если какой -то злоумышленник попытается загрузить фальшивые файлы, но не обязательно. Он также не определяет переменную
$CGIBASHOPTS_DIR или функцию cgibashopts_clean и не использует ловушку. Примечание: это доступно только в версиях 3 и выше. Пример использования : . cgibashopts -n - -Д -каталог указывает, где Cgibashoptions будет управлять своими временными файлами в случае загрузки файлов. По умолчанию
/tmp . Cgibashoptions создаст в нем cgibashopts-files.$$ Suberactory (где $$ -это номер процесса Bash, уникальный экземпляр), показанный в переменной $CGIBASHOPTS_DIR .
- Переменная
CGIBASHOPTS_RELEASE имеет версию выпуска, использует семантическое управление версиями (например, 4.0.1, 4.4.3) используемого Libray CGIBASHOPTS, версии перечислены в конце этой страницы в истории изменений ...- Переменная
CGIBASHOPTS_VERSION содержит основной номер версии (первое целое число CGIBASHOPTS_RELEASE выше, для обратной совместимости.
- Разное вкусности:
- Предоставлены две удобные функции Bash:
-
urldecode , который принимает строку в параметрах и выводит свою декодированную версию, преобразуя + в пространствах и %XX в символе шестнадцатеричного кода ASCII XX (например, AG %41 становится A), и удаление возврата перевозки. -
urlencode , который выполняет обратную работу. Оба являются быстрее, чем бинарные команды Linux.
- Две переменные
$nl и $cr держат новую линию и символ возврата кареты - Альтернативный способ получить значения переменных - это функция
param . Это просто удобная функция, совместимая с башлибом для людей (или сценариев), используемых для нее.-
param без аргумента выводит значение FORMS -
param foo выводит значение FORM_foo -
param foo a string... устанавливает значение FORM_foo для "a string..." -
param -f Prints $FORMFILES -
param -f foo prints $FORMFILE_foo -
param -f foo a string... устанавливает значение FORMFILE_foo "a string..."
Тестовый набор
Представлен tests набор, его можно запустить ./tests/RUN-ALL-TESTS
Проекты, использующие его
- Watermark-PDF Веб-фронта
- Поиск во всех GitHub все проекты GitHub ссылаются на это
Обратная связь
Чувствуйте желание копировать и улучшить этот проект, а также предоставлять отчеты об ошибках, отзывы, предложения через:
- Создание проблем, если у вас есть учетная запись GitHub.
- Используйте предоставленную форму отчета GIT, чтобы создать проблему, если у вас нет учетной записи Githib.
- Создать или участвовать в обсуждении этого проекта
- Или просто напишите мне: [email protected]
История изменений
- 2023-01-11 v4.1.3: исправления для тестового набора только для того, чтобы избежать ошибок в версиях Bash <4.4. Фактический код CGIBASHOPTS не изменяется, не нужно обновлять, если для прохождения тестового набора в устаревших системах.
- 2023-01-08 v4.1.2: Исправление ошибки: только полуколоны были поняты как сепараторы в заголовках HTTP
Content-Disposition Content-Type Исправлено, чтобы также использовать запятые. Ошибка сообщена «Florin-CTU», выпуска № 8 и № 9. - 2022-11-24 v4.1.1: Исправление ошибки: Поля формы после поля загрузки файла были проигнорированы. Пожалуйста, обновите! Отчет об ошибках "Pipoprods", выпуск № 7.
- 2021-12-23 v4.1.0:
- Переключится на семантическое управление версиями, с новым VAR
CGIBASHOPTS_RELEASE - Новый вариант для указания временного каталога (предложение «aufschlauer»)
- Перейдите в GitHub: выдвинули большинство файлов из основного представления, в тестах/, Tewiba обновлен до 1.5.0, очистка кода, чтобы пройти ShellCheck
- 2020-04-16 Версия 4: Добавлена функция Goodie Urlencode
- 2020-04-04 Некоторые косметические изменения в этом документе и тестах (тест-Suite, переименованный в переименование в качестве тестов), но никаких изменений в коде CGIBASHOPTS, поэтому не увеличивается номер версии.
- 2020-03-27 Версия 3: -n опция добавлена, чтобы отключить загрузки файлов
- 2018-10-09 Версия 2: Исправление, пространства значений параметров можно рассматривать как +
- 2017-12-13 Версия 1: Исправления для загрузки файлов с различными типами MIME, библиотека теперь можно использовать в сценариях с помощью SET -U и SET -E.
- 2017-12-07 Создание проекта