পাবলিক ফর্মের সাবমিশন কীভাবে প্রাইভেট নেটওয়ার্কে আমদানি করবেন
একটি পাবলিক ফর্ম সাবমিশনকে ইনটেক রেকর্ড থেকে প্রাইভেট ইমপোর্টার পর্যন্ত অনুসরণ করুন, এবং ভ্যালিডেশন, ক্রেডেনশিয়াল ও রিট্রাই সঠিক দিকে রাখুন।
যে পাবলিক ফর্ম কখনো প্রাইভেট নেটওয়ার্কের সঙ্গে কথা বলে না, সেটিও এমন ডেটা তৈরি করে যা প্রাইভেট নেটওয়ার্ককে বিচার করতে হয়। টানেল শুধু বদলে দেয় কে কার সঙ্গে সংযোগ করছে। ডাউনলোডের পরের সবকিছুই আমদানির সিদ্ধান্ত, এবং তা প্রাইভেট দিকের। এই আলোচনায় একটি সাবমিশন ব্রাউজার থেকে একটি নিশ্চিত অভ্যন্তরীণ রেকর্ড পর্যন্ত অনুসরণ করা হয়েছে।
সাবমিশন যেখানে পৌঁছায় সেখান থেকেই শুরু করুন
ব্রাউজার একটি পাবলিক এন্ডপয়েন্টে পোস্ট করে, যা একটি নিয়ন্ত্রিত ইনটেক স্টোরে সারি লেখে এবং শুধু একটি স্বীকৃতির বেশি কিছু ফেরত দেয় না। ওই স্টোরই হস্তান্তরের জায়গা, এবং পাবলিক স্তর যেখানে লিখতে পারবে তা একমাত্র এটিই হওয়া উচিত। কাঁচা পেলোড সেখানে অপরিবর্তিত রাখুন, তার আগমনের সময় ও একটি স্থিতিশীল রেকর্ড শনাক্তকারীর সঙ্গে।
তারপর একটি প্রাইভেট ওয়ার্কার টানেলের মধ্য দিয়ে অপেক্ষমাণ সারিগুলো টেনে আনে এবং প্রতিটির কী করতে হবে তা ঠিক করে। এটি নিজের পরিচয়ের অধীনে চলে, সেটিই পরের অংশের বিষয়।
curl --silent --fail \
--cert /etc/importer/client.crt --key /etc/importer/client.key \
"https://intake.corp.internal/api/pending?limit=20" \
-o /var/lib/importer/pending.json
ইমপোর্টারকে শুধু প্রয়োজনীয় ক্ষমতাই দিন
পাবলিক ওয়েব প্রক্রিয়া এবং অভ্যন্তরীণ অ্যাপ্লিকেশনে লেখা পরিচয়—এই দুটি আলাদা প্রিন্সিপাল হওয়া উচিত। শুধু ফর্ম ডেটা পৌঁছে দিতে হয় বলে একটি পাবলিক সার্ভারের অভ্যন্তরীণ প্রশাসনের দরকার নেই, আর দুই দিকের জন্য একটি ভাগ করা অ্যাকাউন্ট যেকোনো ওয়েব বাগকে অভ্যন্তরীণ লেখায় পরিণত করে। ওয়ার্কারকে তার নিজের ক্রেডেনশিয়াল দিন, তা কেবল এই একটি আমদানি কাজে সীমাবদ্ধ করুন, এবং কোন প্রিন্সিপাল প্রতিটি আমদানি করেছে তা লিপিবদ্ধ করুন। এই বিচ্ছেদই টানেলের সীমান্তকে সাজসজ্জা নয়, অর্থবহ করে তোলে।
ওয়ার্কার কোন উৎস থেকে পড়তে পারবে তাও সীমাবদ্ধ করুন। যদি বাস্তবায়ন কোনো কিউ বা ট্রান্সফার সেবা ব্যবহার করে, সেই সেবা তার নিজস্ব প্রমাণীকরণ ও প্রবেশাধিকার নীতি রাখে, কারণ VPN পেলোডের ভেতরের কোনো কিছু প্রমাণীকৃত করে না।
স্বল্পস্থায়ী ফাংশনও একই পর্যালোচনা থেকে মুক্ত নয়। যতক্ষণ এটি চলে, তার নেটওয়ার্ক অবস্থান ও ক্রেডেনশিয়াল তখনো ক্ষমতা দেয়, আর ছোট আয়ু কেবল সময়ের জানালা সংকুচিত করে। কোন কাজ পরিচয় করতে পারবে তা ঠিক করার বিকল্প আয়ু নয়।
ভেতরে কিছু বদলানোর আগেই যাচাই করুন
পাবলিক ফর্মের ফিল্ড বিপরীত প্রমাণিত না হওয়া পর্যন্ত আক্রমণকারীর নিয়ন্ত্রিত টেক্সট, এবং OWASP-এর ইনপুট যাচাই নির্দেশিকা ঠিক এই কারণেই ব্যাকএন্ড ফিডকে অবিশ্বস্ত উৎসের মধ্যে গণ্য করে। এনক্রিপ্টেড স্থানান্তর বলে বাইটগুলো অক্ষত পৌঁছেছে, এই নয় যে সেগুলো একটি অনুমোদিত অনুরোধ বর্ণনা করে। যেকোনো বিশেষাধিকারপ্রাপ্ত ধাপের আগে পার্স ও যাচাই করুন, যাতে একটি খারাপ সারি কখনোই কাজ করতে সক্ষম কোড পথে না পৌঁছায়।
অনুমোদিত ফিল্ড, তাদের ফরম্যাট, তাদের আকার এবং যে ব্যবসায়িক নিয়ম মানতে হবে তা নির্ধারণ করুন। একটি তারিখ সঠিক গঠনের হতে পারে এবং তবুও অনুরোধকৃত কাজের জন্য ভুল হতে পারে, আর যে পেলোড কোনো অভ্যন্তরীণ অ্যাকাউন্ট বা অনুমোদনের অবস্থা উল্লেখ করে সে নিজেকে এর কোনোটিই দিতে পারবে না।
প্রত্যাখ্যাত সারিগুলো সংশোধন অনুমান করার বা শেল কিংবা কাঁচা ডেটাবেস ইন্টারফেসে পাঠানোর বদলে পর্যালোচনার ফলাফলে পাঠান। রেকর্ড শনাক্তকারী ও ব্যর্থ নিয়ম লিপিবদ্ধ করুন, আবেদনকারীর টাইপ করা প্রতিটি ফিল্ড নয়।
একটি কাজেই পুনরায় চেষ্টার বিন্দু তৈরি করুন
যদি submission-1042 রেকর্ড দুবার টানা হয় কারণ প্রথম স্বীকৃতি হারিয়ে গেছে, তাহলে ওয়ার্কারের উৎস রেকর্ড ও তার নিশ্চিত ফলাফল চেনার একটি টেকসই উপায় দরকার। কাজটি একবার চালানো কোনো সময়সূচি প্রমাণ করে না যে প্রতিটি সারি একবারই প্রয়োগ হয়েছে। নকল সরবরাহ স্বাভাবিক, তাই নকশাকে তা শোষণ করতে হবে।
অভ্যন্তরীণ অ্যাপ্লিকেশনের নিজস্ব লেনদেন ও নকল-ব্যবস্থাপনার ব্যবস্থা ব্যবহার করুন, এবং উৎস শনাক্তকারী, ফলাফল ও স্বীকৃতি একই সুসংগত ক্রমে রাখুন। উদ্দেশ্যপ্রণোদিত কাজ নিশ্চিত বা টেকসইভাবে বরাদ্দ হওয়ার পরেই স্বীকৃতি দিন, আর কেবল বাইট ডাউনলোড হয়েছে বলে ইনটেক সারি কখনো মুছবেন না।
তারপর তিনটি ফিক্সচার দিয়ে তা প্রমাণ করুন: একটি বৈধ সারি, একটি বিকৃত সারি, এবং একই নিয়ন্ত্রিত উৎস শনাক্তকারী দুবার সরবরাহ। প্রত্যেকটিই ওয়ার্কার যে এন্ডপয়েন্ট ব্যবহার করে সেটির মধ্য দিয়েই যায়।
for f in fixtures/valid-submission.json fixtures/bad-date.json; do
curl --silent --fail --cert /etc/importer/client.crt \
-X POST --data @"$f" https://intake.corp.internal/api/records
done
curl --silent --fail --cert /etc/importer/client.crt \
-X POST --data @fixtures/valid-submission.json https://intake.corp.internal/api/records
প্রথম দুই সারিকে ভিন্ন অভ্যন্তরীণ অবস্থায় শেষ হতে হবে, আর তৃতীয়টিকে ওই উৎস রেকর্ডের জন্য ইতিমধ্যে নিশ্চিত শনাক্তকারী ফেরত দিতে হবে, দ্বিতীয়টি তৈরি না করে। অন্য যেকোনো কিছু মানে আমদানি এখনো পুনরাবৃত্তিযোগ্য নয়।