cgibashopts: تحليل خيارات باش CGI
CGIBASHOPTS هي مكتبة Bash صغيرة وسريعة سريعة لتحليل معلمات نماذج الويب الخاصة بنصوص Bash Shell Web CGI ، حتى مع تحميلات الملفات الثنائية. إنه مجاني للاستخدام بدون قيود (ترخيص MIT). (ج) كولاس ناهابو 2017
Quickstart
- انسخ ملف
cgibashopts في مكان ما على الخادم الخاص بك. على سبيل المثال /usr/local/bin/cgibashopts - فقط مصدر هذا الملف في بداية البرامج النصية لبرمجة CGI. على سبيل المثال:
source /usr/local/bin/cgibashopts أو . /usr/local/bin/cgibashopts - يمكن بعد ذلك العثور على قيمة معلمة نموذج الويب
foo (على سبيل المثال في صفحة HTML: <input type=text name=foo> ) كقيمة لمتغير بيئة shell $FORM_foo
استكشاف الأخطاء وإصلاحها:
- إذا حدث خطأ ما ، فقم بتشغيل
tests/tewiba -v في دليل CGIBASHOPTS على الخادم الخاص بك لمعرفة ما إذا كان مجموعة الاختبار يكتشف مشكلة. - يتطلب cgibashopts إصدارات GNU من
bash ، grep ، sed . لاختبار هذا ، قم بتشغيل grep -P . /dev/null ، يجب ألا تحصل على خطأ. إذا قمت بذلك ، فيجب عليك تثبيتها على أنظمة تشبه UNIX لا تستخدم مرافق GNU بشكل افتراضي ، مثل MACOS و BUSHBOX و FREEBSD و BSD و SYSV ...- على MacOS ، انظر العدد 10
- في Busybox ، تحتاج إلى تثبيت الحزم لإصدارات GNU من
bash و coreutils و grep و sed - على FreeBSD ، استخدم Freshports
سمات
- بسيط للاستخدام: ملف واحد فقط.
- سريع وصغيرة.
- باش نقي باستثناء استخدام grep ، sed و truncate.
- الحصول على طلبات و Post ، مع جميع طرق ترميز المعلمات: التطبيق/X-WWW-Form-urlencoded ، multipart/form-data ، النص/عادي.
- يتعامل أيضًا مع سلاسل استعلام البحث عن الفهرس القديم
- يعامل تحميل الملفات الثنائية ، والملفات النصية مع Newlines UNIX أو DOS. لم أجد أي مكتبة موجودة توفر هذه الوظيفة لبرمجة شل CGI
- يستخدم فقط ميزات "كلاسيكية" من باش ، ويجب أن تعمل مع إصدارات باش القديمة ، أعتقد 4.1+
الوثائق
- عند استخدامها ، تقوم مكتبة CGIBASHOPTS بفك تشفير المعلمات التي يرسلها المتصفح التي يوفرها خادم الويب للبرامج النصية كمتغيرات بيئة مختلفة ومدخلات قياسية اختياريًا ، وفقًا لمعيار CGI. CGIBASHOPTS يجعلها متاحة للبرنامج النصي في نموذج سهل الاستخدام: المتغيرات والوظائف والملفات.
- لاستخدام المكتبة ، مصدرها في بداية البرنامج النصي الخاص بك ، في أقرب وقت ممكن لتجنب النزاعات مع المتغيرات التي يمكنك استخدامها لاحقًا في البرنامج النصي.
- تقوم المكتبة بفك تشفير المعلمات من طلبات GET and Post ، مع كل الطرق الممكنة لترميز المعلمات (عبر "enctype").
- يتم سرد قائمة أسماء المعلمات في
$FORMS كسلسلة من الأسماء المنفصلة عن الفضاء. على سبيل المثال: echo "$FORMS" ==> foo bar gee . أسماء المعلمات هي تلك التي تم تحديدها بواسطة سمة name في عناصر HTML المختلفة في نموذج HTML ، أو يتم إرسالها عبر أوامر مثل wget أو curl . يجب أن تكون أسماء المعلمات أسماء متغيرات قانونية لـ Bash: الأحرف الأبجدية الرقمية والدرجات السفلية ، ولا تبدأ برقم. - يتم تجاهل أسماء المعلمات غير صالحة (على سبيل المثال: 0TO60 ، AB ، A: B ، ...) بصمت ، وكذلك قيمها
- يتم نسخ كل قيمة معلمة كقيمة متغير البيئة المسبق Form_. على سبيل المثال:
$FORM_foo لعنصر نموذج HTML يدعى foo . - يتم تحويل قيم المعلمات متعددة الخطوط إلى نهاية الخطوط UNIX (خط جديد بدلاً من عودة النقل والخط الجديد)
- تحميل الملفات: عند تحميل الملفات ، عبر عناصر النماذج مثل
<input type=file name=file1> ، تضع cgibashopts اسم المعلمة (هنا file1 ) في متغير $ formfiles ، وهي قائمة مفصوفة بالفضاء لجميع أسماء معلمات الملف المستلمة. يمكن العثور على الاسم الفعلي للملف الذي تم تحميله في القيمة المتغيرة (هنا $FORM_file1 ) ، في حين يمكن العثور على محتويات الملف في ملف محلي يسمى المتغير في دليل $CGIBASHOPTS_DIR ، (هنا $CGIBASHOPTS_DIR/file1 )- في الواقع يتم إنشاء الملفات التي تم تحميلها فقط وإدراجها بهذه الطريقة. إذا لم يحدد المستخدم أي ملف في النموذج ، فلن يتم تعريف متغير Shell أو أي ملف.
- سيتم إنشاء الملفات الفارغة التي تم تحميلها ، ولكن. ستكون فارغة ، بالطبع.
- لن يتم تحويل الملفات الثنائية والنصية المستلمة بتنسيق نص 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 (انظر أدناه)
- خيارات سطر الأوامر:
- -لا يمكن إعطاؤه لتجاهل وتجاهل أي طلبات لتحميل الملفات. يوصى بذلك إذا كنت لا تتوقع تحميل الملفات ، حيث يمكنها حفظ بعض تحميل الحوسبة إذا حاول بعض المهاجمين تحميل الملفات المزيفة ، ولكن ليس إلزاميًا. كما أنه لا يحدد المتغير
$CGIBASHOPTS_DIR ولا وظيفة cgibashopts_clean ، ولا تستخدم الفخ. ملاحظة: هذا متوفر فقط في الإصدارات 3 وما فوق. مثال على الاستخدام : . cgibashopts -n - -يحدد دليل DCIBashOptions ملفاتها المؤقتة في حالة تحميل الملفات. انها الافتراضات إلى
/tmp . $$ إنشاء CGIBashOptions فيه cgibashopts-files.$$ $CGIBASHOPTS_DIR
- يحتفظ
CGIBASHOPTS_RELEASE المتغير بإصدار الإصدار ، ويستخدم الإصدار الدلالي (على سبيل المثال 4.0.1 ، 4.4.3) من CGIBASHOPTS LIBRAY المستخدمة ، يتم سرد الإصدارات في نهاية هذه الصفحة في تاريخ التغييرات ...- يحتفظ المتغير
CGIBASHOPTS_VERSION برقم الإصدار الرئيسي (أول عدد صحيح لـ CGIBASHOPTS_RELEASE أعلاه ، من أجل التوافق الخلفي.
- الأشياء الجيدة:
- يتم توفير وظائف باش سهلة الاستخدام:
-
urldecode الذي يأخذ سلسلة في المعلمة ويخرج نسخته التي تم فك تشفيرها ، وتحويل + في المساحات و %XX في حرف رمز ASCII السداسي السداسي XX (على سبيل المثال 41 يصبح أ) ، وإزالة عوائد النقل. -
urlencode الذي يؤدي العملية العكسية. كلاهما أسرع من أوامر Linux الثنائية.
- متغيرين
$nl و $cr يحملان خطًا جديدًا وشخصية عودة عربة - طريقة بديلة للحصول على قيم المتغيرات هي عبر وظيفة
param . هذه مجرد وظيفة راحة متوافقة مع Bashlib للأشخاص (أو البرامج النصية) المستخدمة في ذلك.-
param بدون وسيطة يخرج قيمة FORMS - يقوم
param foo بإخراج قيمة FORM_foo -
param foo a string... يعين قيمة FORM_foo إلى "a string..." -
param -f يطبع $FORMFILES -
param -f foo prints $FORMFILE_foo -
param -f foo a string... يعين قيمة FORMFILE_foo إلى "a string..."
جناح اختبار
يتم توفير مجموعة اختبار tests ويمكن تشغيله بواسطة ./tests/RUN-ALL-TESTS
مشاريع استخدامه
- Watermark-PDF واجهة مواقع ويب لنص علامات مائية PDF بواسطة pipoprods
- ابحث في جميع مشاريع 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-Type Content-Disposition ثابت لاستخدام الفواصل. Bug الذي أبلغ عنه "Florin-CTU" ، القضايا رقم 8 و #9. - 2022-11-24 v4.1.1: تم تجاهل إصلاح الأخطاء: الحقول النموذجية بعد حقل تحميل الملف. يرجى الترقية! تقرير الأخطاء من قبل "pipoprods" ، العدد رقم 7.
- 2021-12-23 v4.1.0:
- تم التبديل إلى الإصدار الدلالي ، مع var
CGIBASHOPTS_RELEASE جديد - خيار جديد -D لتحديد الدليل المؤقت (اقتراح "Aufschlauer")
- انتقل إلى github: نقل معظم الملفات من العرض الرئيسي ، في الاختبارات/، تم ترقية Tewiba إلى 1.5.0 ، تنظيف الكود لأعلى لتمرير Shellcheck
- 2020-04-16 الإصدار 4: تمت إضافة وظيفة urlencode goodie
- 2020-04-04 بعض التغييرات التجميلية في هذا المستند والاختبارات (DIR-Suite DIR المعاد تسميتها كاختبارات) ، ولكن لا توجد تغييرات على رمز CGIBASHOPTS نفسه ، لذلك لا يوجد رقم إصدار.
- 2020-03-27 الإصدار 3: -N الخيار إضافة لتعطيل تحميل الملفات
- 2018-10-09 الإصدار 2: الإصلاح ، يمكن اعتبار المساحات في قيم المعلمات كـ +
- 2017-12-13 الإصدار 1: إصلاحات لتحميل الملفات مع مختلف أنواع MIME ، يمكن الآن استخدام المكتبة في البرامج النصية باستخدام set -u و set -e.
- 2017-12-07 إنشاء المشروع