CGIBashopts: CGI Bash -Optionen analysieren
CGIBashopts ist eine kleine und schnelle, reine Bash -Bibliothek, um Web -Formulare -Parameter für Bash -Shell -Web -CGI -Skripte selbst mit Binärdatei -Uploads zu analysieren. Es ist frei, ohne Einschränkungen (MIT -Lizenz) zu verwenden. (c) Colas Nahaboo 2017
QuickStart
- Kopieren Sie die Datei
cgibashopts irgendwo auf Ihrem Server. ZB as /usr/local/bin/cgibashopts - Quellen Sie diese Datei einfach zu Beginn Ihrer CGI -Bash -Skripte. ZB:
source /usr/local/bin/cgibashopts or . /usr/local/bin/cgibashopts - Der Wert eines Webformparameters
foo (z <input type=text name=foo> B. in der $FORM_foo
Fehlerbehebung:
- Wenn etwas schief geht, führen Sie
tests/tewiba -v im CGIBashopts -Verzeichnis auf Ihrem Server aus, um festzustellen, ob die Testsuite ein Problem erkennt. - cgibashopts benötigt die GNU -Versionen von
bash , grep , sed . Um dies zu testen, führen Sie grep -P . /dev/null , Sie sollten keinen Fehler bekommen. Wenn Sie dies tun, sollten Sie sie auf Unix- ähnlichen Systemen installieren, die die GNU-Dienstprogramme standardmäßig nicht verwenden, z.- Auf macOS siehe Ausgabe Nr. 10
- Auf Busybox müssen Sie die Pakete für die GNU -Versionen von
bash , coreutils , grep , sed installieren - Verwenden Sie auf FreeBSD Freshports
Merkmale
- Einfach zu verwenden: nur eine Datei.
- Schnell und klein.
- Pure Bash mit Ausnahme der Verwendung von Grep, SED und Kürzung.
- Get und post-Anfragen mit allen Methoden zur Codierung der Parameter: Anwendung/x-www-form-urlencoded, mehrteilig/Formdaten, Text/Ebene.
- Verarbeitet auch die Legacy Index -Suchanfragen Strings
- Griff Binärdateien und Textdateien mit UNIX- oder DOS -Newlines. Ich habe keine vorhandene Bibliothek gefunden, die diese Funktionalität für die CGI -Shell -Programmierung bereitstellte
- Verwendet nur "klassische" Funktionen von Bash und sollte mit alten Bash -Versionen arbeiten, denke ich, 4.1+
Dokumentation
- Bei Verwendung decodiert die CGIBashopts -Bibliothek die vom Browser gesendeten Parameter, die der Webserver den Skripten als verschiedene Umgebungsvariablen und optional seine Standardeingabe liefert, gemäß dem CGI -Standard. CGIBashopts stellt sie dem Skript in einem einfachen Formular zur Verfügung: Variablen, Funktionen und Dateien.
- Um die Bibliothek zu verwenden, beziehen Sie sie so früh wie möglich zu Beginn Ihres Skripts, um Konflikte mit Variablen zu vermeiden, die Sie später in Ihrem Skript verwenden können.
- Die Bibliothek decodiert die Parameter von GET und Post -Anforderungen mit allen möglichen Möglichkeiten, die Parameter zu codieren (über "EngeTepe").
- Die Liste der Parameternamen wird in
$FORMS als speicher getrennte Namenszeichenfolge aufgeführt. ZB: echo "$FORMS" ==> foo bar gee . Die Parameternamen sind die durch das name in den verschiedenen HTML -Elementen in einem HTML -Form oder über Befehle wie wget oder curl gesendet. Parameternamen müssen rechtliche Variablennamen für Bash: Alphanumerische Zeichen und Unterstriche sein und nicht nach einer Ziffer beginnen. - Ungültige Parameternamen (zB: 0to60, ab, a: b, ...) werden stillschweigend ignoriert wie ihre Werte
- Jeder Parameterwert wird als Wert einer vorangestellten Umgebungsvariablen von Form_ - kopiert. EG:
$FORM_foo für ein HTML -Formelement namens foo . - Multi-Line-Parameterwerte werden in das UNIX-Ende der Zeilen konvertiert (eine neue Zeile anstelle von Wagenrückgabe und Newline)
- Dateien Uploads: Wenn Dateien hochgeladen werden, über Formularelemente wie
<input type=file name=file1> platziert CGIBashOpts den Parameternamen (hier file1 ) in die variablen $ formfile, die eine speicher getrennte Liste aller empfangenen Dateiparameternamen ist. Der tatsächliche Name der hochgeladenen Datei finden Sie im variablen Wert (hier $FORM_file1 ), während der Inhalt der Datei in einer lokalen Datei gefunden werden kann, die in der Variablen in $CGIBASHOPTS_DIR (hier $CGIBASHOPTS_DIR/file1 ) benannt werden kann ($ cgibashopts- Es werden nur tatsächlich hochgeladene Dateien erstellt und auf diese Weise aufgeführt. Wenn der Benutzer keine Datei im Formular auswählt, wird die Shell -Variable weder definiert noch eine Datei erstellt.
- Leere hochgeladene Dateien werden jedoch erstellt. Sie werden natürlich leer sein.
- Binär- und Textdateien werden nicht im UNIX -Textformat konvertiert (Zeilen mit einer neuen Linie), selbst wenn der Client sie in einem DOS -Format hochgeladen hat (Zeilen enden mit einer Kutschenrendite und einer neuen Linie). Sie müssen also bereit sein, DOS -Zeilen in den hochgeladenen Textdateien zu verarbeiten.
- WARNUNG: Eine Bash -Reinigungsfunktion
cgibashopts_clean muss am Ende Ihres Skripts aufgerufen werden, um das temporäre Verzeichnis $CGIBASHOPTS_DIR zu entfernen, das die hochgeladenen Dateien speichert, falls die Option -n (siehe unten) nicht verwendet wird. Cgibashopts macht eine trap cgibashopts_clean 0 so, dass diese Funktion am Ende Ihres Skripts automatisch aufgerufen wird, sodass Sie nichts tun müssen, es sei denn, Sie verwenden selbst eine trap 0 und müssen somit sicherstellen, dass Ihr Code -Signal das Exit -Signal explizit cgibashopts_clean aufruft.- Die Beschaffung von CGIBashopts wird jede zuvor durchgeführte
trap 0 löschen. Setzen Sie also Ihre Falle 0 nach der Beschaffung von cgibashopts - Das Aufrufen von cgibashopts_clean wird tatsächlich nur benötigt, wenn Ihr HTML -Formular Eingabeelemente der Type
file verwendet - Sobald Sie die hochgeladenen Dateien verarbeitet haben, können Sie die Funktion
cgibashopts_clean selbst explizit aufrufen, damit sie nicht mehr benötigt wird, und Sie können Fallen verwenden, wie Sie danach gewünscht werden können - Wenn Sie nicht erwarten, dass Dateien hochgeladen werden, können Sie die Option -n verwenden (siehe unten)
- Befehlszeilenoptionen:
- -N kann gegeben werden, um alle Anforderungen zum Hochladen von Dateien zu ignorieren und zu verwerfen. Dies wird empfohlen, wenn Sie nicht erwarten, dass Dateien hochgeladen werden, da es einige Computerladungen speichern kann, wenn ein Angreifer versucht, gefälschte Dateien hochzuladen, jedoch nicht obligatorisch. Es definiert auch weder die Variable
$CGIBASHOPTS_DIR noch die Funktion cgibashopts_clean und verwenden keine Falle. Hinweis: Dies ist nur in den Versionen 3 und höher verfügbar. Beispiel der Verwendung : . cgibashopts -n - -D -Verzeichnis gibt an, wo CGIBSHOPTIONEN seine temporären Dateien im Falle von Datei -Uploads verwaltet. Es ist standardmäßig an
/tmp . CGIBSHOPTIONISIONEN wird darin ein $CGIBASHOPTS_DIR $$ cgibashopts-files.$$
- Die variable
CGIBASHOPTS_RELEASE hält die Release -Version, die semantische Versioning (z. B. 4.0.1, 4.4.3) des verwendeten CGIBashopts -Librays verwendet. Die Versionen werden am Ende dieser Seite in der Geschichte von Änderungen aufgelistet ...- Die variable
CGIBASHOPTS_VERSION enthält die Hauptversionsnummer (die erste Ganzzahl von CGIBASHOPTS_RELEASE oben für die Rückwärtskompatibilität.
- Miscuse Goodies:
- Es werden zwei praktische Bash -Funktionen bereitgestellt:
-
urldecode , der eine Zeichenfolge in Parameter einnimmt und seine dekodierte Version ausgibt, wodurch + in Räumen und %XX im Zeichen des hexadezimalen ASCII -Code XX (z. B. %41 wird zu a) und die Kutschenrendite entfernen. -
urlencode , der den umgekehrten Betrieb ausführt. Beide sind schneller als die binären Linux -Befehle.
- Zwei Variablen
$nl und $cr halten eine neue Linie und einen Wagenrücklaufcharakter - Eine alternative Möglichkeit, die Variablenwerte zu erhalten, ist über die
param -Funktion. Dies ist nur eine Komfortfunktion, die mit Bashlib für Personen (oder Skripte) kompatibel ist.-
param ohne Argument gibt den Wert von FORMS aus -
param foo gibt den Wert von FORM_foo aus -
param foo a string... legt den Wert von FORM_foo auf "a string..." fest. -
param -f druckt $FORMFILES -
param -f foo druckt $FORMFILE_foo -
param -f foo a string... Legt den Wert von FORMFILE_foo auf "a string..." fest.
Testsuite
Eine Testsuite wird bereitgestellt, die von ./tests/RUN-ALL-TESTS ausgeführt werden kann. Weitere Informationen finden Sie im Readme.md in tests
Projekte, die es verwenden
- Watermark-PDF Ein Web-Frontend für ein PDF-Watermarking-Skript von Pipoprods
- Suchen Sie in allen Github -Projekten, die darauf verweisen
Rückmeldung
Sie sind herzlich eingeladen, dieses Projekt zu kopieren und zu verbessern sowie Fehlerberichte, Feedback und Vorschläge zu geben:
- Erstellen von Problemen, wenn Sie ein Github -Konto haben.
- Verwenden Sie das angegebene Git -Berichtsformular, um ein Problem zu erstellen, wenn Sie kein Githib -Konto haben.
- Erstellen oder beteiligen Sie sich an einer Diskussion zu diesem Projekt
- Oder senden Sie mir einfach eine E -Mail: [email protected]
Geschichte der Veränderungen
- 2023-01-11 V4.1.3: Korrekturen für die Testsuite nur, um Fehler in Bash-Versionen zu vermeiden <4.4. Der tatsächliche Code von CGIBashopts ist unverändert und muss nicht aktualisiert werden, es sei denn, die Testsuite an Legacy -Systemen zu übergeben.
- 2023-01-08 V4.1.2: Fehlerbehebung: Nur Semikolons wurden als Separatoren in den HTTP-Headern
Content-Type und Content-Disposition verstanden. Behoben, um auch Kommas zu verwenden. Bug von "Florin-CTU", Ausgaben Nr. 8 und Nr. 9. - 2022-11-24 V4.1.1: Fehlerbehebung: Formularfelder Nachdem ein Datei-Upload-Feld ignoriert wurde. Bitte upgrade! Fehlerbericht von "Pipoprods", Ausgabe Nr. 7.
- 2021-12-23 V4.1.0:
- umgestellt auf semantische Versioning mit neuem var
CGIBASHOPTS_RELEASE - Neue -D -Option zum Angeben des temporären Verzeichnisses (Vorschlag von "Aufschlauer")
- Wechseln Sie zu GitHub: Die meisten Dateien haben die Hauptansicht herausgezogen, in den Tests/Tewiba auf 1.5.0, Code -Aufräumarbeiten, um Shellcheck zu bestehen
- 2020-04-16 Version 4: Urlencode Goodie-Funktion hinzugefügt
- 2020-04-04 Einige kosmetische Änderungen in diesem DOC und in den Tests (Test-Suite-Dir, die als Tests umbenannt wurden), aber keine Änderungen des CGIBASHOPTS-Codes selbst, daher erhöhen sich die Versionsnummer.
- 2020-03-27 Version 3: -n Option hinzugefügt, um Datei-Uploads zu deaktivieren
- 2018-10-09 Version 2: Fix, Leerzeichen in Parameterwerten können als + angesehen werden
- 2017-12-13 Version 1: Behebung des Hochladens von Dateien mit verschiedenen MIME-Typen. Die Bibliothek kann jetzt in Skripten mit set -u und set -e verwendet werden.
- 2017-12-07 Erstellung des Projekts