এই কমান্ড haserl যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।
কার্যক্রম:
NAME এর
haserl - এমবেডেড পরিবেশের জন্য একটি cgi স্ক্রিপ্টিং প্রোগ্রাম
সাইনোপিসিস
#!/usr/bin/haserl [-শেল=পাথস্পেক] [--upload-dir=নির্দেশ] [--আপলোড-হ্যান্ডলার=ক্রীড়াশিক্ষক]
[-আপলোড-সীমা=সীমা] [--সব নাও] [-গ্রহণ-কিছুই নয়] [---নিরব] [--ডিবাগ]
[ পাঠ্য ] [ < % শেল স্ক্রিপ্ট % > ] [ পাঠ্য ] ...
বর্ণনাঃ
Haserl হল একটি ছোট cgi র্যাপার যা "PHP" স্টাইলের cgi প্রোগ্রামিং এর অনুমতি দেয়, কিন্তু একটি UNIX ব্যবহার করে
প্রোগ্রামিং ভাষা হিসাবে bash-এর মতো শেল বা লুয়া। এটি খুব ছোট, তাই এটি ব্যবহার করা যেতে পারে
এমবেডেড পরিবেশে, বা যেখানে পিএইচপির মতো কিছু খুব বড়।
এটি একটি ছোট সিজিআই ইঞ্জিনে তিনটি বৈশিষ্ট্য একত্রিত করে:
এটি POST এবং GET অনুরোধগুলিকে পার্স করে, ফর্ম-এলিমেন্টগুলিকে name=value পেয়ার হিসাবে স্থাপন করে৷
CGI স্ক্রিপ্ট ব্যবহারের জন্য পরিবেশ। এই কিছুটা মত uncgi মোড়কের।
এটি একটি শেল খোলে এবং সমস্ত পাঠ্যকে মুদ্রণযোগ্য বিবৃতিতে অনুবাদ করে। সমস্ত পাঠ্য
<% ... %> এর মধ্যে কনস্ট্রাক্টগুলি শেলের কাছে মৌখিকভাবে পাস করা হয়। এটি কিছুটা
লেখার মত পিএইচপি স্ক্রিপ্ট।
এটি ঐচ্ছিকভাবে স্ক্রিপ্টের মালিকের কাছে অনুমতি দেওয়ার জন্য ইনস্টল করা যেতে পারে,
এর কিছু নিরাপত্তা বৈশিষ্ট্য প্রদান করে suexec or cgiwrapper.
বিকল্প সংক্ষিপ্তসার
এটি কমান্ড-লাইন বিকল্পগুলির একটি সারাংশ। অনুগ্রহ করে দেখুন বিকল্প অধীন অধ্যায়
একটি সম্পূর্ণ বিবরণের জন্য দীর্ঘ বিকল্পের নাম।
-একটি --সব স্বীকার করুন
-n --গ্রহণ-কিছুই না
-d --ডিবাগ
-s, --শেল
-এস, --চুপ
-ইউ, --আপলোড-ডির
-u, --আপলোড-সীমা
-এইচ, --আপলোড-হ্যান্ডলার
বিকল্প
--সব নাও
প্রোগ্রামটি সাধারণত POST ডেটা গ্রহণ করে শুধুমাত্র তখনই যখন REQUEST_METHOD POST হয় এবং৷
REQUEST_METHOD পাওয়া গেলেই শুধুমাত্র URL ডেটাতে ডেটা গ্রহণ করে৷ এই বিকল্প
REQUEST_METHOD নির্বিশেষে POST এবং URL উভয় ডেটাই গ্রহণ করার অনুমতি দেয়৷
এই বিকল্পটি সেট করা হলে, REQUEST_METHOD অগ্রাধিকার নেয় (যেমন যদি পদ্ধতি
POST হল, FORM_variableগুলি COOKIE ডেটা, GET ডেটা এবং POST ডেটা থেকে নেওয়া হয়,
যে আদেশ যদি পদ্ধতিটি GET হয়, FORM_variableগুলি COOKIE ডেটা, POST থেকে নেওয়া হয়৷
ডেটা, এবং ডেটা পান।) ডিফল্ট হল সমস্ত ইনপুট পদ্ধতি গ্রহণ করা নয় - শুধু
কুকি ডেটা এবং REQUEST_METHOD৷
-- মেনে নাও না
যদি দেওয়া হয়, haserl প্রসেস করার আগে http সামগ্রী হিসাবে স্ট্যান্ডার্ড ইনপুট পার্স করবে না
এই পান্ডুলিপি. অন্য haserl স্ক্রিপ্ট থেকে একটি haserl স্ক্রিপ্ট কল করা হলে এটি দরকারী।
--ডিবাগ
স্ক্রিপ্ট চালানোর পরিবর্তে, যে স্ক্রিপ্টটি কার্যকর করা হবে তা মুদ্রণ করুন। যদি
পরিবেশ পরিবর্তনশীল 'REQUEST_METHOD' সেট করা হয়েছে, এর সাথে ডেটা পাঠানো হয়
প্লেইন/টেক্সট কন্টেন্ট টাইপ। অন্যথায়, শেল স্ক্রিপ্টটি মৌখিকভাবে মুদ্রিত হয়।
--শেল=পাথস্পেক
ব্যবহার করার জন্য একটি বিকল্প ব্যাশ-এর মতো শেল নির্দিষ্ট করুন। ডিফল্ট "/ বিন / SH"
শেল পরামিতি অন্তর্ভুক্ত করতে --shell= ব্যবহার করবেন না/ বিন / SH বিন্যাস পরিবর্তে, ব্যবহার করুন
"=" ছাড়া বিকল্প বিন্যাস, যেমন --shell "/ বিন / বাশ --norc" নিশ্চিত হন
কোনো বিশেষ অক্ষর রক্ষা করার জন্য বিকল্প স্ট্রিংটি উদ্ধৃত করুন।
যদি Lua লাইব্রেরির সাথে কম্পাইল করা হয়, তাহলে স্ট্রিং "lua" একটি ইন্টিগ্রেটেড ব্যবহার করতে ব্যবহৃত হয়
লুয়া vm. এই স্ট্রিং কেস সংবেদনশীল. উদাহরণ: --শেল=Lua
একটি বিকল্প হল "luac"। এর ফলে হ্যাসারল এবং লুয়া পার্সার অক্ষম হয়ে যায়,
এবং স্ক্রিপ্টটি একটি পূর্ব সংকলিত লুয়া খণ্ড বলে ধরে নেওয়া হয়। দেখা LUAC আরো জন্য নীচে
তথ্য।
--চুপ
Haserl সাধারণত ত্রুটি অবস্থার উপর একটি তথ্যমূলক বার্তা প্রিন্ট করে। এই
ত্রুটি বার্তা দমন করে, যাতে haserl ব্যবহার বিজ্ঞাপন না হয়।
--upload-dir=নির্দেশ
ডিফল্ট "/ tmp -র পরিবর্তে". সমস্ত আপলোড করা ফাইল এতে অস্থায়ী ফাইলের নাম দিয়ে তৈরি করা হয়৷
ডিরেক্টরি HASERL_xxx_পথ অস্থায়ী ফাইলের নাম রয়েছে। FORM_xxx_নাম
ক্লায়েন্ট দ্বারা নির্দিষ্ট করা ফাইলের আসল নাম রয়েছে।
--আপলোড-হ্যান্ডলার=পাথস্পেক
নির্দিষ্ট করা হলে, ফাইল আপলোডগুলি এই হ্যান্ডলার দ্বারা পরিচালনা করা হয়, এতে লেখার পরিবর্তে৷
অস্থায়ী ফাইল. সম্পূর্ণ pathspec দিতে হবে (PATH অনুসন্ধান করা হয় না), এবং
আপলোড-হ্যান্ডলারকে একটি কমান্ড-লাইন প্যারামিটার দেওয়া হয়: FIFO এর নাম
যা আপলোড ফাইল পাঠানো হবে। উপরন্তু, হ্যান্ডলার 3 পেতে পারে
পরিবেশ পরিবর্তনশীল: বিষয়বস্তুর প্রকার, ফাইল ফাইল, এবং NAME এর. এই MIME প্রতিফলিত
বিষয়বস্তুর জন্য বিষয়বস্তু-স্বভাব শিরোনাম। Haserl প্রতিটি জন্য হ্যান্ডলার কাঁটাচামচ হবে
ফাইল আপলোড করা হয়েছে, এবং আপলোড ফাইলের বিষয়বস্তু নির্দিষ্ট FIFO-তে পাঠাবে।
Haserl তারপর হ্যান্ডলার বন্ধ না হওয়া পর্যন্ত ব্লক করবে। এই পদ্ধতি বিশেষজ্ঞদের জন্য
কেবল.
--আপলোড-সীমা=সীমা
পর্যন্ত একটি মাইম-এনকোডেড ফাইলের অনুমতি দিন সীমা KB আপলোড করা ডিফল্ট হয় 0KB (না
আপলোড অনুমোদিত)। নোট করুন যে মাইম-এনকোডিং ডেটার আকারে 33% যোগ করে।
এক নজরে OF অপারেশন
সাধারণভাবে, ওয়েব সার্ভার বিভিন্ন পরিবেশ ভেরিয়েবল সেট আপ করে এবং তারপর ব্যবহার করে কাঁটাচামচ or
CGI স্ক্রিপ্ট চালানোর আরেকটি পদ্ধতি। যদি স্ক্রিপ্টটি ব্যবহার করে haserl দোভাষী,
নিম্নলিখিত ঘটে:
If haserl suid root ইনস্টল করা হয়, তারপর uid/gid স্ক্রিপ্টের মালিকের জন্য সেট করা হয়।
পরিবেশের জন্য স্ক্যান করা হয় HTTP_COOKIE, যা ওয়েব দ্বারা সেট করা হতে পারে৷
সার্ভার যদি এটি বিদ্যমান থাকে, পার্স করা বিষয়বস্তু স্থানীয় পরিবেশে স্থাপন করা হয়।
পরিবেশের জন্য স্ক্যান করা হয় REQUEST_METHOD, যা ওয়েব সার্ভার দ্বারা সেট করা হয়েছিল।
অনুরোধ পদ্ধতির উপর ভিত্তি করে, স্ট্যান্ডার্ড ইনপুট পড়া এবং পার্স করা হয়। পার্সড
বিষয়বস্তু স্থানীয় পরিবেশে স্থাপন করা হয়.
স্ক্রিপ্ট টোকেনাইজড, পার্সিং haserl কাঁচা টেক্সট থেকে কোড ব্লক. কাঁচা টেক্সট হয়
"প্রতিধ্বনি" বিবৃতিতে রূপান্তরিত হয় এবং তারপরে সমস্ত টোকেন সাব-শেলে পাঠানো হয়।
haserl কাঁটাচামচ এবং একটি সাব-শেল (সাধারণত / বিন / SH) শুরু হয়।
সমস্ত টোকেন একটি ট্রেলিং সহ সাব-শেলের STDIN-এ পাঠানো হয় প্রস্থান কমান্ড।
সাব-শেল শেষ হলে, haserl দোভাষী চূড়ান্ত পরিচ্ছন্নতা সঞ্চালন এবং
তারপর শেষ হয়।
ক্লায়েন্ট দিকে ইনপুট
সার্জারির haserl ইন্টারপ্রেটার HTTP_COOKIE এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে প্রেরিত ডেটা ডিকোড করবে, এবং
ক্লায়েন্ট থেকে GET বা POST পদ্ধতি, এবং সেগুলিকে পরিবেশের ভেরিয়েবল হিসাবে সংরক্ষণ করুন যা করতে পারে
haserl দ্বারা অ্যাক্সেস করা হবে। ভেরিয়েবলের নাম উৎসে দেওয়া নাম অনুসরণ করে,
একটি উপসর্গ ছাড়া ( ফর্ম_) প্রিপেন্ড করা হয়। উদাহরণস্বরূপ, যদি ক্লায়েন্ট "foo=bar" পাঠায়,
পরিবেশ পরিবর্তনশীল হয় FORM_foo=বার.
HTTP_COOKIE পদ্ধতির জন্য, ভেরিয়েবলগুলিও উপসর্গের সাথে সংরক্ষণ করা হয় ( মিষ্ট রূটি_) যোগ করা হয়েছে।
উদাহরণস্বরূপ, যদি HTTP_COOKIE-এ "foo=bar" অন্তর্ভুক্ত থাকে, তাহলে পরিবেশ পরিবর্তনশীল
কুকি_ফু=বার.
GET পদ্ধতির জন্য, %xx আকারে পাঠানো ডেটা তাদের অক্ষরে অনুবাদ করা হয়
প্রতিনিধিত্ব করে, এবং ভেরিয়েবলগুলিও উপসর্গের সাথে সংরক্ষণ করা হয় ( পাওয়া_) যোগ করা হয়েছে। উদাহরণস্বরূপ, যদি
QUERY_STRING "foo=bar" অন্তর্ভুক্ত করে, পরিবেশ পরিবর্তনশীল GET_foo=বার.
POST পদ্ধতির জন্য, ভেরিয়েবলগুলিও উপসর্গের সাথে সংরক্ষণ করা হয় ( পোস্ট_) যোগ করা হয়েছে। জন্য
উদাহরণস্বরূপ, যদি পোস্ট স্ট্রীমে "foo=bar" অন্তর্ভুক্ত থাকে, তাহলে পরিবেশ পরিবর্তনশীল POST_foo=বার.
এছাড়াও, POST পদ্ধতির জন্য, যদি ডেটা ব্যবহার করে পাঠানো হয় মাল্টিপার্ট/ফর্ম-ডেটা এনকোডিং,
ডেটা স্বয়ংক্রিয়ভাবে ডিকোড করা হয়। এটি সাধারণত ব্যবহৃত হয় যখন একটি ওয়েব থেকে ফাইল আপলোড করা হয়
ক্লায়েন্ট ব্যবহার করে .
বিঃদ্রঃ যখন একটি ফাইল ওয়েব সার্ভারে আপলোড করা হয়, তখন এটি সংরক্ষণ করা হয় আপলোড-ডির
ডিরেক্টরি. FORM_variable_name= আপলোড করা ফাইলের নাম রয়েছে (যেমন
ক্লায়েন্ট দ্বারা নির্দিষ্ট।) HASERL_variable_path= ফাইলের নাম ধারণ করে
আপলোড-ডির যে আপলোড করা বিষয়বস্তু ধারণ করে। থেকে দূষিত ক্লায়েন্ট প্রতিরোধ
পূরণ করা আপলোড-ডির আপনার ওয়েব সার্ভারে, ফাইল আপলোড শুধুমাত্র অনুমোদিত হয় যখন
--আপলোড-সীমা কত বড় ফাইল আপলোড করা যায় তা নির্দিষ্ট করতে অপশন ব্যবহার করা হয়। হাসেরল
স্ক্রিপ্ট শেষ হয়ে গেলে স্বয়ংক্রিয়ভাবে অস্থায়ী ফাইল মুছে দেয়। রাখা
ফাইল, এটি সরান বা স্ক্রিপ্টের কোথাও এটির নাম পরিবর্তন করুন।
নোট করুন যে ফাইলের নাম সংরক্ষণ করা হয় HASERL_পরিবর্তনশীল_পথ এর কারণ হল FORM_,
GET_, এবং POST_ ভেরিয়েবল ক্লায়েন্ট দ্বারা পরিবর্তনযোগ্য, এবং একটি দূষিত ক্লায়েন্ট করতে পারে
নামের সাথে একটি দ্বিতীয় ভেরিয়েবল সেট করুন পরিবর্তনশীল_পথ=/ Etc / passwd. আগের সংস্করণ
পাথস্পেক সংরক্ষণ করেনি HASERL নেমস্পেস থেকে বজায় রাখা অনগ্রসর
সামঞ্জস্য, দ্য নাম of দ্য অস্থায়ী ফাইল is এছাড়াও সঞ্চিত in FORM_variable= এবং
POST_variable=. এই is বিবেচিত বিপজ্জনক এবং উচিত না be ব্যবহার করা হয়েছে।
যদি ক্লায়েন্ট ডেটা পাঠায় উভয় POST এবং GET পদ্ধতি দ্বারা, তারপর haserl শুধুমাত্র পার্স করা হবে
এর সাথে সম্পর্কিত ডেটা REQUEST_METHOD ওয়েব সার্ভার দ্বারা সেট করা পরিবর্তনশীল, যদি না
সব নাও বিকল্প সেট করা হয়েছে। উদাহরণস্বরূপ, একটি ফর্ম POST পদ্ধতির মাধ্যমে বলা হয়, কিন্তু একটি থাকার
some.cgi?foo=bar&otherdata=something-এর URI-তে POST ডেটা পার্স করা হবে, এবং foo বিন্যাস
এবং অন্যান্য ডেটা ভেরিয়েবল উপেক্ষা করা হয়.
যদি ওয়েব সার্ভার সংজ্ঞায়িত করে a HTTP_COOKIE পরিবেশ পরিবর্তনশীল, কুকি ডেটা পার্স করা হয়।
কুকি ডেটা পার্স করা হয় আগে GET বা POST ডেটা, তাই দুটি ভেরিয়েবলের ক্ষেত্রে
একই নাম, GET বা POST ডেটা কুকি তথ্য ওভাররাইট করে।
যখন একই ভেরিয়েবলের একাধিক উদাহরণ বিভিন্ন উৎস থেকে পাঠানো হয়, তখন
FORM_variable সেট করা হবে যে ক্রম অনুসারে ভেরিয়েবল প্রক্রিয়া করা হয়।
HTTP_COOKIE সর্বদা প্রথমে প্রক্রিয়া করা হয়, তারপরে REQUEST_METHOD। সব মেনে নিলে
বিকল্প সেট করা হয়েছে, তারপর HTTP_COOKIE প্রথমে প্রক্রিয়া করা হয়, তারপরে না পদ্ধতিটি অনুসরণ করে
REQUEST_METHOD দ্বারা নির্দিষ্ট, REQUEST_METHOD দ্বারা অনুসরণ করা হয়েছে৷ শেষ দৃষ্টান্ত
FORM_variable সেট করতে ভেরিয়েবল ব্যবহার করা হবে। উল্লেখ্য যে ভেরিয়েবলগুলিও আলাদাভাবে
COOKIE_variable, GET_variable এবং POST_variable হিসেবে তৈরি করে। এটি ব্যবহার করার অনুমতি দেয়
প্রতিটি উৎস থেকে ওভারল্যাপিং নাম।
যখন একই উৎস থেকে একই ভেরিয়েবলের একাধিক দৃষ্টান্ত পাঠানো হয়, শুধুমাত্র শেষটি
একটি সংরক্ষিত হয়. সমস্ত কপি রাখতে (উদাহরণস্বরূপ, বহু-নির্বাচনের জন্য), শেষে "[]" যোগ করুন
পরিবর্তনশীল নামের। নতুন লাইন দ্বারা আলাদা করে সমস্ত ফলাফল ফেরত দেওয়া হবে। উদাহরণ স্বরূপ,
host=Enoch&host=Esther&host=Joshua ফলাফল "FORM_host=Joshua" এ।
host[]=Enoch&host[]Esther&host[]=Joshua ফলাফল "FORM_host=Enoch\nEsther\nJoshua"
ভাষা
নিম্নলিখিত ভাষা গঠন দ্বারা স্বীকৃত হয় haserl.
চালান
<% [শেল স্ক্রিপ্ট] %>
<% %> ট্যাগ দ্বারা পরিবেষ্টিত যেকোন কিছু সম্পাদনের জন্য সাব-শেলে পাঠানো হয়। পাঠ্য
মৌখিকভাবে পাঠানো হয়।
অন্তর্ভুক্ত
<% ইন পাথস্পেক %>
এই স্ক্রিপ্টে অন্য একটি ফাইল শাব্দিকভাবে অন্তর্ভুক্ত করুন। ফাইল অন্তর্ভুক্ত করা হয় যখন স্ক্রিপ্ট
প্রাথমিকভাবে পার্স করা হয়।
ইভাল
<%= অভিব্যক্তি %>
শেল এক্সপ্রেশন মুদ্রণ করুন। "ইকো এক্সপ্রেস" এর জন্য সিনট্যাকটিক চিনি।
কেমন
<%# মন্তব্য %>
মন্তব্য ব্লক. একটি মন্তব্য ব্লকের কিছু পার্স করা হয় না. মন্তব্য নেস্ট করা যেতে পারে
এবং অন্যান্য haserl উপাদান থাকতে পারে।
উদাহরণ
সতর্কতামূলক
কিভাবে ব্যবহার করতে হয় তা দেখানোর জন্য নিচের উদাহরণগুলো সরলীকৃত করা হয়েছে haserl. তোমার উচিত
ব্যবহারের আগে মৌলিক ওয়েব স্ক্রিপ্টিং নিরাপত্তার সাথে পরিচিত haserl (বা কোনো স্ক্রিপ্টিং
ভাষা) একটি উত্পাদন পরিবেশে।
সহজ আদেশ
#!/usr/local/bin/haserl
বিষয়বস্তুর ধরন: পাঠ্য/সমতল
<%# এটি একটি নমুনা "env" স্ক্রিপ্ট %>
<% env %>
এর ফলাফল প্রিন্ট করে প্রায় একটি মাইম-টাইপ "টেক্সট/প্লেইন" নথি হিসাবে কমান্ড। এই
দ্য haserl সাধারণের সংস্করণ printenv cgi
লুপ সঙ্গে প্রগতিশীল আউটপুট
#!/usr/local/bin/haserl
বিষয়বস্তুর প্রকার: টেক্সট/এইচটিএমএল
<% a এর জন্য লাল নীল হলুদ সায়ান; করুন %>
"><% echo -n "$a" %>
<% সম্পন্ন হয়েছে %>
ক্লায়েন্টকে একটি মাইম-টাইপ "টেক্সট/এইচটিএমএল" নথি পাঠায়, সাথে একটি এইচটিএমএল টেবিল সহ
পটভূমির রঙ দিয়ে লেবেল করা উপাদান।
ব্যবহার খোল সংজ্ঞায়িত ফাংশন।
#!/usr/local/bin/haserl
বিষয়বস্তুর প্রকার: পাঠ্য/এইচটিএমএল
<% # একটি ব্যবহারকারী ফাংশন সংজ্ঞায়িত করুন
টেবিল_উপাদান() {
প্রতিধ্বনি " $1 "
}
%>
<% a এর জন্য লাল নীল হলুদ সায়ান; করুন %>
<% টেবিল_এলিমেন্ট $a %>
<% সম্পন্ন হয়েছে %>
উপরের হিসাবে একই, কিন্তু এমবেডেড html এর পরিবর্তে একটি শেল ফাংশন ব্যবহার করে।
স্ব উল্লেখ সিজিআই সঙ্গে a ফর্ম
#!/usr/local/bin/haserl
বিষয়বস্তুর প্রকার: পাঠ্য/এইচটিএমএল
নমুনা ফর্ম
" 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 -র পরিবর্তে
বিষয়বস্তুর প্রকার: পাঠ্য/এইচটিএমএল
" method=POST enctype="multipart/form-data" >
<% যদি পরীক্ষা -n "$HASERL_uploadfile_path"; তারপর %>
আপনি <% echo -n $FORM_uploadfile_name %> নামে একটি ফাইল আপলোড করেছেন, এবং এটি ছিল
. সাময়িকভাবে সার্ভারে হিসাবে সংরক্ষিত। দ্য
ফাইলটি ছিল <% cat $HASERL_uploadfile_path | wc -c %> বাইট দীর্ঘ।
<% rm -f $HASERL_uploadfile_path %> চিন্তা করবেন না, ফাইলটি মুছে ফেলা হয়েছে
ওয়েব সার্ভার থেকে।
<% অন্য %>
আপনি এখনও একটি ফাইল আপলোড করেননি.
<% fi %>
ফাইল আপলোড করার অনুমতি দেয় এমন একটি ফর্ম প্রদর্শন করে। এটি ব্যবহার করে সম্পন্ন করা হয়
--আপলোড-সীমা এবং ফর্ম সেট করে এনটাইপ থেকে মাল্টিপার্ট/ফর্ম-ডেটা। যদি
ক্লায়েন্ট একটি ফাইল পাঠায়, তারপর ফাইল সম্পর্কিত কিছু তথ্য মুদ্রিত হয়, এবং তারপর
মুছে ফেলা অন্যথায়, ফর্মটি বলে যে ক্লায়েন্ট একটি ফাইল আপলোড করেনি।
আরএফসি -2616 কনফরমেন্স
#!/usr/local/bin/haserl
<% echo -en "content-type: text/html\r\n\r\n" %>
...
HTTP স্পেসিফিকেশন সম্পূর্ণরূপে মেনে চলার জন্য, হেডার ব্যবহার করে বন্ধ করা উচিত
CR+LF, সাধারণ ইউনিক্স LF লাইনের সমাপ্তির পরিবর্তে। উপরের সিনট্যাক্স করতে পারেন
RFC 2616 কমপ্লায়েন্ট হেডার তৈরি করতে ব্যবহার করা হবে।
পরিবেশ
ওয়েব সার্ভার থেকে উত্তরাধিকারসূত্রে প্রাপ্ত এনভায়রনমেন্ট ভেরিয়েবলগুলি ছাড়াও, নিম্নলিখিতগুলি
এনভায়রনমেন্ট ভেরিয়েবল সবসময় স্টার্টআপে সংজ্ঞায়িত করা হয়:
হ্যাসারলভার
haserl সংস্করণ - একটি তথ্য ট্যাগ।
সেশনআইডি
একটি হেক্সাডেসিমেল ট্যাগ যা CGI এর জীবনের জন্য অনন্য (এটি তৈরি হয় যখন
cgi শুরু হয়; এবং অন্য POST বা GET ক্যোয়ারী তৈরি না হওয়া পর্যন্ত পরিবর্তন হয় না।)
HASERL_ACCEPT_ALL
যদি --সব নাও পতাকা স্থাপন করা হয়েছিল, -1অন্যথায় 0.
HASERL_SHELL
শেল হ্যাসারলের নাম সাব-শেল কমান্ড চালাতে শুরু করেছে।
HASERL_UPLOAD_DIR
ডিরেক্টরি haserl আপলোড করা ফাইল সংরক্ষণ করতে ব্যবহার করবে.
HASERL_UPLOAD_LIMIT
ক্লায়েন্ট থেকে সার্ভারে পাঠানোর জন্য অনুমোদিত KB সংখ্যা।
এই ভেরিয়েবলগুলিকে স্ক্রিপ্টের মধ্যে পরিবর্তন বা ওভাররাইট করা যেতে পারে, যদিও এগুলো
"HASERL_" দিয়ে শুরু করা শুধুমাত্র তথ্যপূর্ণ, এবং চলমান স্ক্রিপ্টকে প্রভাবিত করে না।
নিরাপত্তা বৈশিষ্ট্য
সিজিআই স্ক্রিপ্ট প্রোগ্রামে শেল ব্যবহার করার বিপদ সম্পর্কে অনেক সাহিত্য রয়েছে।
haserl ধারণ কিছু এই ঝুঁকি কমানোর জন্য সুরক্ষা।
পরিবেশ ভেরিয়েবল
এনভায়রনমেন্ট ভেরিয়েবলকে পপুলেট করার কোড সাব-এর সুযোগের বাইরে
শেল এটা অক্ষর উপর parses? এবং &, তাই এটি করা একটি ক্লায়েন্টের পক্ষে কঠিন
"ইনজেকশন" আক্রমণ। উদাহরণ হিসেবে, foo.cgi?a=test;cat / Etc / passwd ফলাফল হতে পারে
একটি ভেরিয়েবলকে মান নির্ধারণ করা হচ্ছে পরীক্ষা এবং তারপর দৌড়ানোর ফলাফল বিড়াল
/ Etc / passwd ক্লায়েন্টের কাছে পাঠানো হচ্ছে। হাসেরল ভেরিয়েবলটিকে সম্পূর্ণ বরাদ্দ করবে
মান: পরীক্ষা; বিড়াল / Etc / passwd
শেল স্ক্রিপ্টগুলিতে এই "বিপজ্জনক" ভেরিয়েবলটি এটিকে আবদ্ধ করে ব্যবহার করা নিরাপদ
উদ্ধৃতি; যদিও বৈধতা সব ইনপুট ক্ষেত্রে করা উচিত.
সুবিধা বাতিল
একটি suid স্ক্রিপ্ট হিসাবে ইনস্টল করা হলে, haserl এর মালিক এর uid/gid সেট করবে
এই পান্ডুলিপি. এটি বিভিন্ন ধরনের CGI স্ক্রিপ্টের সেট থাকতে ব্যবহার করা যেতে পারে
বিশেষাধিকার যদি haserl বাইনারি সুইড ইনস্টল করা হয় না, তাহলে CGI স্ক্রিপ্ট হবে
ওয়েব সার্ভারের uid/gid দিয়ে চালান।
প্রত্যাখ্যান হুকুম লাইন পরামিতি প্রদত্ত on দ্য URL টি
যদি URL-এ একটি unencoded "=" না থাকে, তাহলে CGI স্পেক বিকল্পগুলিকে বলে
প্রোগ্রামের কমান্ড-লাইন পরামিতি হিসাবে ব্যবহার করা হবে। উদাহরণস্বরূপ, অনুযায়ী
CGI স্পেসিকে: http://192.168.0.1/test.cgi?--upload-limit%3d2000&foo%3dbar
"Foo=bar" সেট করার পাশাপাশি আপলোড-সীমা 2000KB সেট করা উচিত। রক্ষা করতে
ক্লায়েন্টদের তাদের নিজস্ব আপলোড সক্ষম করার বিরুদ্ধে, haserl যেকোনো কমান্ড-লাইন বিকল্প প্রত্যাখ্যান করে
argv এর বাইরে [2]। যদি একটি # হিসাবে আহ্বান করা হয়! স্ক্রিপ্ট, দোভাষী হল argv[0], সব
কমান্ড-লাইন বিকল্পগুলি #! লাইন argv[1], এবং তে একত্রিত হয়
স্ক্রিপ্টের নাম হল argv[2]।
Lua
যদি লুয়া সমর্থন দিয়ে সংকলিত হয়, --শেল=লুয়া পরিবর্তে স্ক্রিপ্ট ভাষা হিসাবে lua সক্ষম করবে
বাশ শেল এর। এনভায়রনমেন্ট ভেরিয়েবল (SCRIPT_NAME, SERVER_NAME, ইত্যাদি) রাখা হয়েছে
ENV টেবিল, এবং ফর্ম ভেরিয়েবলগুলি FORM টেবিলে স্থাপন করা হয়েছে। উদাহরণস্বরূপ, দ
উপরে স্ব-রেফারেন্সিং ফর্ম এই মত লেখা যেতে পারে:
#!/usr/local/bin/haserl --shell=lua
বিষয়বস্তুর প্রকার: পাঠ্য/এইচটিএমএল
নমুনা ফর্ম
" পদ্ধতি="গেট">
<% # FORM_textfield এর কিছু মৌলিক যাচাই করুন
# সাধারণ ওয়েব আক্রমণ প্রতিরোধ করতে
FORM.textfield=string.gsub(FORM.textfield, "[^%a%d]", "")
%>
<ইনপুট প্রকার=পাঠ্য নাম=টেক্সটফিল্ড
মান="<% io.write (string.upper(FORM.textfield)) %>" cols=20>
<%= অপারেটর হল সিনট্যাকটিক চিনির জন্য io.write (স্ট্রিং( ... )) সুতরাং, উদাহরণস্বরূপ,
মান = উপরে লাইন লেখা যেতে পারে: মান="<%= string.upper(FORM.textfield) %>" cols=20>
haserl lua স্ক্রিপ্ট ফাংশন ব্যবহার করতে পারেন haserl.loadfile(ফাইলের নাম) একটি লক্ষ্য প্রক্রিয়া করতে
একটি haserl (lua) স্ক্রিপ্ট হিসাবে স্ক্রিপ্ট। ফাংশনটি এক ধরনের "ফাংশন" প্রদান করে।
উদাহরণ স্বরূপ,
bar.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 বিন্যাস উত্পাদন করবে:
হ্যালো ওয়ার্ল্ড
আপনার বার্তাটি m() হিসাবে চালানো হচ্ছে
-- ইনক্লুড ফাইলের শেষ --
হ্যালো ওয়ার্ল্ড
আপনার বার্তা হল লোড করুন এবং এক ধাপে চালান
-- ইনক্লুড ফাইলের শেষ --
এই ফাংশনটি নেস্টেড haserl সার্ভার পৃষ্ঠাগুলি - পৃষ্ঠা স্নিপেটগুলিকে সম্ভব করে তোলে
যেগুলি haserl tokenizer দ্বারা প্রক্রিয়া করা হয়।
LUAC
সার্জারির লুয়াক "শেল" হল একটি প্রাক-সংকলিত লুয়া খণ্ড, তাই ইন্টারেক্টিভ সম্পাদনা এবং স্ক্রিপ্টগুলির পরীক্ষা
সম্ভব না. যাইহোক, haserl শুধুমাত্র luac সমর্থন দিয়ে কম্পাইল করা যেতে পারে, এবং এটি অনুমতি দেয়
এমনকি একটি ছোট মেমরি পরিবেশেও lua সমর্থন। উপরে তালিকাভুক্ত সব haserl lua বৈশিষ্ট্য
এখনও লভ্য. (যদি luac haserl-এ নির্মিত একমাত্র শেল হয়, haserl.loadfile হল
অক্ষম, যেহেতু haserl পার্সার কম্পাইল করা হয়নি।)
এখানে একটি তুচ্ছ স্ক্রিপ্টের একটি উদাহরণ, যা একটি luac cgi স্ক্রিপ্টে রূপান্তরিত হয়েছে:
ফাইল test.lua দেওয়া:
মুদ্রণ ("কন্টেন্ট-টাইপ: টেক্সট/প্লেইন0)
মুদ্রণ ("এই রানের জন্য আপনার UUID হল: " .. ENV.SESSIONID)
এটি luac দিয়ে কম্পাইল করা যেতে পারে:
luac -o test.luac -s test.lua
এবং তারপর haserl হেডার এটি যোগ করা হয়েছে:
প্রতিধ্বনি '#!/usr/bin/haserl --shell=luac' | cat - test.luac >luac.cgi
বিকল্পভাবে, স্ট্যান্ডার্ড লুয়া শেল ব্যবহার করে একটি সম্পূর্ণ ওয়েবসাইট তৈরি করা সম্ভব,
এবং তারপর haserl নিজেই একটি অংশ হিসাবে luac কম্পাইলারের জন্য স্ক্রিপ্টগুলিকে প্রিপ্রসেস করুন
নির্মাণ প্রক্রিয়া। এটি করার জন্য, --shell=lua ব্যবহার করুন এবং ওয়েবসাইটটি বিকাশ করুন। নির্মাণের জন্য প্রস্তুত হলে
রানটাইম এনভায়রনমেন্ট, আপনার লুয়া স্ক্রিপ্টে --debug লাইন যোগ করুন এবং আউটপুট চালান
.lua সোর্স ফাইলের ফলাফল। উদাহরণ স্বরূপ:
haserl স্ক্রিপ্ট test.cgi দেওয়া:
#!/usr/bin/haserl --shell=lua --debug
বিষয়বস্তুর ধরন: পাঠ্য/সাধারণ
এই রানের জন্য আপনার UUID হল <%= ENV.SESSIONID %>
প্রি-কম্পাইল, কম্পাইল এবং haserl luac হেডার যোগ করুন:
./test.cgi > test.lua
luac -s -o test.luac test.lua
প্রতিধ্বনি '#!/usr/bin/haserl --shell=luac' | cat - test.luac >luac.cgi
onworks.net পরিষেবা ব্যবহার করে haserl অনলাইন ব্যবহার করুন