PHP Form বা PHP ফরম হল একটি ওয়েব ফর্ম, যা ব্যবহারকারীর ইনপুট ডেটা গ্রহণ করে এবং সেই ডেটা সার্ভার সাইডে PHP দিয়ে প্রক্রিয়া করে। ওয়েব ডেভেলপমেন্টে, ফরমগুলো ব্যবহারকারীদের কাছ থেকে ইনপুট নেওয়ার জন্য খুবই গুরুত্বপূর্ণ। PHP ফরমের মাধ্যমে ডেটা যেমন টেক্সট, নাম, ইমেল, পাসওয়ার্ড ইত্যাদি গ্রহণ করা যায় এবং সেই ইনপুট সার্ভারে প্রক্রিয়া করা হয়।
PHP ফরম তৈরি করার মূল বিষয়:
- HTML ফরম: প্রথমে HTML ফর্ম তৈরি করা হয়, যেখানে ব্যবহারকারীরা তাদের ইনপুট দেবেন।
- PHP স্ক্রিপ্ট: ফরম সাবমিট হওয়ার পর, PHP স্ক্রিপ্টের মাধ্যমে ইনপুট ডেটা প্রক্রিয়া করা হয়।
- Data Validation: ফরম ডেটার সঠিকতা যাচাই করা, যেমন, ফিল্ডটি পূর্ণ, সঠিক ইমেইল ফরম্যাট ইত্যাদি।
- Data Sanitization: ইউজারের ইনপুটকে নিরাপদ এবং পরিষ্কার করা, যাতে SQL ইনজেকশন বা অন্যান্য নিরাপত্তা সমস্যা এড়ানো যায়।
Basic PHP Form Example
এখানে একটি সহজ HTML ফরম এবং PHP স্ক্রিপ্টের উদাহরণ দেওয়া হলো:
Step 1: HTML Form
PHP Form Example
Contact Us
action="process_form.php": ফরম সাবমিট করার পর, ডেটাprocess_form.phpপৃষ্ঠায় পাঠানো হবে।method="POST": এটি ফরম ডেটা POST পদ্ধতিতে সার্ভারে পাঠাবে। আপনি GET পদ্ধতিও ব্যবহার করতে পারেন, তবে POST বেশি নিরাপদ।
Step 2: PHP Script to Process the Form (process_form.php)
Form Submitted Successfully!";
echo "Name: $name
";
echo "Email: $email
";
echo "Message: $message
";
}
} else {
echo "Form not submitted.";
}
?>
ব্যাখ্যা:
$_POST['field_name']: ফরমের ইনপুট ফিল্ডের মান পাওয়ার জন্য POST পদ্ধতি ব্যবহার করা হয়েছে।htmlspecialchars(): এই ফাংশনটি ইনপুট ডেটা থেকে কোনো বিশেষ ক্যারেক্টার যেমন<,>,&ইত্যাদি পরিবর্তন করে, যা HTML বা JavaScript ইনজেকশন প্রতিরোধে সাহায্য করে।- Validation: যদি কোনো ইনপুট ফিল্ড খালি থাকে, তাহলে একটি ত্রুটি বার্তা দেখানো হয়।
- Sanitization:
htmlspecialchars()ফাংশনটি ইনপুট স্যানিটাইজেশন করতে ব্যবহৃত হয়েছে, যাতে ব্যবহারকারীর ইনপুট থেকে সঠিক HTML চিহ্নগুলি রূপান্তরিত করা যায় এবং সেগুলি নিরাপদ থাকে।
PHP ফরমের জন্য নিরাপত্তা ব্যবস্থা:
- Data Validation: ফরমের ডেটা সঠিক কিনা যাচাই করতে হবে। যেমন: ইমেল ঠিকমতো দেওয়া হয়েছে কিনা, নাম বা মেসেজ খালি না থাকে।
- Data Sanitization: SQL Injection বা XSS আক্রমণ থেকে রক্ষা পেতে ইনপুট স্যানিটাইজেশন করা প্রয়োজন।
- CSRF Protection: Cross-Site Request Forgery (CSRF) আক্রমণ থেকে রক্ষা পেতে একটি CSRF token ব্যবহার করা যেতে পারে। এটি সুরক্ষা নিশ্চিত করবে যে ফরমটি সঠিকভাবে একটি নির্দিষ্ট ব্যবহারকারী দ্বারা সাবমিট করা হয়েছে।
CSRF Protection Example:
// CSRF token generation
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32)); // Generate a random token
}
// Form HTML with CSRF token
// CSRF token validation in PHP
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST['token']) && $_POST['token'] === $_SESSION['token']) {
// Process the form
} else {
echo "Invalid CSRF token!";
}
}
PHP ফরম ব্যবহারকারী ইন্টারফেস (UI) এবং ব্যবহারিক দিক:
- Feedback Messages: ফরম সাবমিট করার পর সফল বা ত্রুটিপূর্ণ বার্তা ব্যবহারকারীকে দেওয়া উচিত।
- Input Types: বিভিন্ন ধরনের ইনপুট ফিল্ড যেমন
text,email,password,textareaইত্যাদি ব্যবহার করা উচিত। - Styling: ফরমটি সুন্দরভাবে ডিজাইন করতে CSS বা Bootstrap ব্যবহার করা যেতে পারে।
PHP ফরম ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনের ব্যবহারকারী থেকে ডেটা সংগ্রহ করতে পারেন। এই ডেটা ফরমের মাধ্যমে PHP স্ক্রিপ্টে প্রক্রিয়া করা হয়। ফরমের ডেটার ভ্যালিডেশন, স্যানিটাইজেশন, এবং নিরাপত্তা নিশ্চিত করার মাধ্যমে আপনি সুরক্ষিত এবং কার্যকরী ফরম তৈরি করতে পারেন।
ফর্ম এর মাধ্যমে তথ্য সংগ্রহের জন্য পিএইচপি সুপার গ্লোবাল ভ্যারিয়েবল $_GET এবং $_POST ব্যবহার করা হয়।
পিএইচপিতে সাধারণ এইচটিএমএল ফর্ম
নিচের উদাহরণে তিনটি ইনপুট ফিল্ড এবং একটি সাবমিট বাটনসহ একটি সাধারণ এইচটিএমএল ফর্ম এর উদাহরণ দেখানো হলঃ
kt_satt_skill_example_id=334
যখন কোনো ইউজার উপরের ফর্মটি পূরণ করে সাবমিট বাটনে ক্লিক করে তখন ফর্ম এর ডেটাগুলোকে প্রসেস করার জন্য "guest_post.php" ফাইলের কাছে পাঠানো হয়। এখানে ফর্ম ডেটাকে পোস্ট মেথডের মাধ্যমে পাঠানো হয়েছে।
ফর্ম ডেটাকে প্রদর্শনীর জন্য ভ্যারিয়েবল এর পূর্বে echo ব্যবহার করা হয়।
"guest_post.php" ফাইলটি দেখতে নিচের মতঃ
kt_satt_skill_example_id=338
HTTP GET মেথড ব্যবহার করেও একই ফলাফল পাওয়া যায়।
kt_satt_skill_example_id=340
এবং "guest_get.php" ফাইলটি দেখতে নিচের মতঃ
kt_satt_skill_example_id=343
লক্ষ্য করলে দেখবেন, উপরের কোডগুলো একেবারেই সহজ। কিন্তু এখানে খুবই গুরত্বপূর্ণ একটি বিষয় বাদ পড়েছে সেটা হলো আপনার স্ক্রিপ্টকে খারাপ কোড(malicious code) থেকে রক্ষা করার জন্য ফর্ম ডেটার বৈধতা(validity) চেক করা হয় নি।
পিএইচপি ফর্ম প্রসেস করার সময় সিকিউরিটির কথাও মাথায় রাখতে হবে!
আমাদের এই পেজে ফর্ম ভ্যালিডেশন সম্মন্ধে কিছুই বলা হয় নাই। এইচটিএমএল ফর্ম এর মাধ্যমে কিভাবে তথ্য(data) পাঠানো এবং পুনরুদ্ধার করা যায় এই অধ্যায়ে শুধু তাই দেখানো হয়েছে।
যাইহোক, সিকিউরিটির কথা মাথায় রেখে কিভাবে পিএইচপি ফর্মকে প্রসেস করা হয় তা পরবর্তী অধ্যায়ে দেখানো হয়েছে। হ্যাকার এবং স্পামার থেকে ফর্মকে নিরাপদ রাখার জন্য ফর্ম ডেটার উপযুক্ত ভ্যালিডেশন এর বিকল্প নাই!
GET বনাম POST
GET এবং POST উভয়েই একটি associative array তৈরি করে। যেমন-
kt_satt_skill_example_id=344
GET এবং POST যেহেতু associative array তাই এই array এর মধ্যে key:value জোড়ায় জোড়ায় থাকে। যেখানে key হচ্ছে ফর্ম এ ব্যবহৃত name এবং value হচ্ছে ইউজার কর্তৃক ইনপুট ডেটা।
GET এবং POST উভয়কেই $_GET এবং $_POST হিসাবে বিবেচনা করা হয়। এগুলো সুপার গ্লোবাল হওয়ার কারণে যেকোনো স্কোপ(scope) থেকেই এগুলোকে এক্সেস(access) করা যায়। অর্থাৎ যেকোনো ফাংশন, ক্লাস অথবা ফাইল থেকে কোনো অতিরিক্ত কোড না লিখেই এক্সেস করা যায়।
$_GET হচ্ছে চলমান স্ক্রিপ্ট এর URL প্যারামিটার এর মাধ্যমে পাঠানো ভ্যারিয়েবলের array।
$_POST হচ্ছে চলমান স্ক্রিপ্ট এর HTTP POST মেথডের মাধ্যমে পাঠানো ভ্যারিয়েবলের array।
কখন GET ব্যবহার করবেন?
GET মেথডের মাধ্যমে পাঠানো তথ্য সবার কাছেই দৃশ্যমান হয়। অর্থাৎ সকল ভ্যারিয়েবলের name এবং value, URL-এর মধ্যে দেখায়।
GET মেথডের মাধ্যমে তথ্য পাঠানোর ক্ষেত্রে সীমাবদ্ধতাও আছে। GET এর মাধ্যম প্রায় 2000 ক্যারেক্টার পাঠানো যায়।
যাইহোক যেহেতু ভ্যারিয়েবলগুলো URL এর মধ্যে দেখায়, সেহেতু পেজকে বুকমার্ক ও করা যায়। সর্বোপরি কিছু কিছু ক্ষেত্রে এটার উপকারিতাও আছে।
GET এর মাধ্যমে নন-সেনসিটিভ তথ্য পাঠানো হয়।
সতর্কতাঃ পাসওয়ার্ড বা অন্য কোনো সেনসিটিভ তথ্য GET এর মাধ্যমে কখনোই পাঠানো উচিৎ নয়!
কখন POST ব্যবহার করবেন?
POST মেথডের মাধ্যমে পাঠানো তথ্য কারো কাছে দৃশ্যমান হয় না। অর্থাৎ সকল ভ্যারিয়েবলের name এবং value, HTTP request-এর body এর মধ্য দিয়ে সম্প্রসারিত হয় এবং তথ্য পাঠানোর ক্ষেত্রে পরিমাণের উপর কোনো সীমাবদ্ধতা নাই।
সার্ভারে ফাইল আপলোড এর জন্য POST মেথড অতিরিক্ত সুযোগ-সুবিধা দিয়ে থাকে। যেমন- এতে multi-part binary input সাপোর্ট করে।
যাইহোক যেহেতু ভ্যারিয়েবলগুলো URL এর মধ্যে দেখায় না, সেহেতু পেজকে বুকমার্কও করা যায় না।
ডেভেলপাররা POST মেথডকেই বেশি প্রাধান্য দেয়।
পরবর্তী অধ্যায়ে দেখবেন, কিভাবে নিরাপদের সাথে ফর্ম ডেটাকে প্রসেস করা যায়!
এই অধ্যায় এবং পরবর্তী অধ্যায়ে আমরা পিএইচপি ফর্ম ভ্যালিডেশন(validation) নিয়ে আলোচনা করবো।
পিএইচপি ফর্ম ভ্যালিডেশন
আমরা কেন ফর্ম এর বৈধতা বা ভ্যালিডিটি যাচাই করি? সিকিউরিটির কথা মাথায় রেখেই আমরা মূলত পিএইচপি ফর্ম এর ভ্যালিডিটি যাচাই করি।
সিকিউরিটিকে প্রাধান্য দিয়ে কিভাবে ফর্ম ভ্যালিড করতে হয় এই অধ্যায়ে আমরা স্টেপ বাই স্টেপ দেখবো। হ্যাকার বা স্প্যামার থেকে ফর্মকে রক্ষা করার জন্য উপযুক্ত ফর্ম ভ্যালিডেশন আবশ্যক!
আমরা যে এইচটিএমএল ফর্ম নিয়ে কাজ করবো তার মধ্যে বিভিন্ন ইনপুট ফিল্ড রয়েছেঃ আবশ্যক এবং ঐচ্ছিক টেক্সট ফিল্ড, রেডিও বাটন এবং সাবমিট বাটন।
উপরের ফর্মটি ভ্যালিডেশন করার রুলসগুলো নিম্নরুপঃ
| ফিল্ড | ভ্যালিডেশন রুলস |
|---|---|
| নাম | আবশ্যক। এবং এতে শুধুমাত্র লেটার(letter) এবং whitespace থাকবে। |
| ই-মেইল | আবশ্যক। একটি ভ্যালিড ইমেইল হতে হবে (@ এবং . সহ)। |
| লিঙ্গ | আবশ্যক। কমপক্ষে একটি ফিল্ড অবশ্যই সিলেক্ট করতে হবে। |
| মেসেজ | ঐচ্ছিক। মাল্টি-লাইন ইনপুট ফিল্ড(টেক্সট-এরিয়া)। |
সর্বপ্রথম, আমরা ফর্ম থেকে প্লেইন এইচটিএমএল কোডগুলো লক্ষ্য করবোঃ
টেক্সট ফিল্ড
নাম এবং ই-মেইল হলো টেক্সট ইনপুট এলিমেন্ট এবং মেসেজ হলো টেক্সট-এরিয়া। এই তিনটি ইনপুট ফিল্ডের সমন্বয়ে গঠিত এইচটিএমএল কোডগুলো দেখতে এমনঃ
kt_satt_skill_example_id=350
রেডিও(Radio) বাটন
লিঙ্গ নির্ধারণ করার ফিল্ডটি হলো রেডিও বাটন এবং এইচটিএমএল কোডগুলো দেখতে এমনঃ
kt_satt_skill_example_id=351
ফর্ম এলিমেন্ট
ফর্ম এলিমেন্ট দেখতে এমনঃ
kt_satt_skill_example_id=353
যখন ফর্মটি সাবমিট করা হবে, ফর্মের ডাটাগুলো method="post" এর মাধ্যমে পাঠানো হবেঃ
$_SERVER["PHP_SELF"]ভ্যারিয়েবল কি?$_SERVER["PHP_SELF"]একটি সুপারগ্লোবাল ভ্যারিয়েবল যা বর্তমানে সম্পাদিত স্ক্রিপ্ট এর নাম রিটার্ন করে। সুতরাং ফর্ম ডেটাকে প্রসেস করার জন্য অন্য পেজে না পাঠিয়ে একই(ফর্মটি যে পেজ থাকে) পেজ থেকে প্রসেস করতে হলে এই ভ্যারিয়েবলটি ব্যবহার করতে হয়।
htmlspecialchars()ফাংশন কি?htmlspecialchars()ফাংশনটি বিশেষ বিশেষ ক্যারেক্টারসমূহকে এইচটিএমএল এনটিটি(entity) তে রূপান্তর করে। সুতরাং এটি এইচটিএমএল ক্যারেক্টার যেমন- < এবং > কে যথাক্রমে < এবং > দিয়ে রিপ্লেস করে। এটি হ্যাকার কর্তৃক এইচটিএমএল এবং জাভাস্ক্রিপ্ট কোডের ইনজেকশন (Cross-site Scripting attacks) দ্বারা ফর্ম কোডকে ধ্বংশের হাত থেকে রক্ষা করে।
পিএইচপি ফর্ম সিকিউরিটি
$_SERVER["PHP_SELF"] ভ্যারিয়েবলটি হ্যাকার কর্তৃক ব্যবহৃত হতে পারে!
আপনি যদি আপনার ওয়েব পেজে PHP_SELF ব্যবহার করে থাকেন তাহলে একজন ইউজার আপনার পেজ লিঙ্কের শেষে একটি স্ল্যাশ(/) এবং এরপরে কিছু Cross Site Scripting(XSS) কমান্ড সম্পাদন করতে পারে।
কম্পিউটারের একটি দুর্বল সিকিউরিটি হচ্ছে Cross-site scripting(XSS) যা সাধারনত ওয়েব অ্যাপ্লিকেশন এর ক্ষেত্রে দেখা যায়। Cross Site Scripting(XSS) ব্যবহার করে হ্যাকাররা একটি ওয়েব পেজের client-side script ইনজেক্ট করতে সক্ষম হয়।
ধরুন, নিচের ফর্মটি "test_form.php" পেজ রয়েছেঃ
kt_satt_skill_example_id=354
এখন যদি একজন ইউজার তার ব্রাউজারের ঠিকানা অংশে সাধারন URL প্রবেশ করায় যেমনঃ "http://www.example.com/test_form.php" তাহলে উপরের কোড নিম্নের কোডে রূপান্তরিত হবেঃ
kt_satt_skill_example_id=355
এখন পর্যন্ত সবই ঠিক আছে।
যাইহোক, ধরুন একজন ইউজার নিম্নের URL টি তার ব্রাউজারের ঠিকানা অংশে প্রবেশ করালোঃ
kt_satt_skill_example_id=358
এই অবস্থায় উপরের কোড টুকু নিম্নের কোডে রূপান্তরিত হবেঃ
kt_satt_skill_example_id=359
এই কোডটি এলার্ট কমান্ড যুক্ত একটি script ট্যাগ যোগ করবে। আর যখন পেজটি সম্পূর্ণ লোড হবে তখন জাভাস্ক্রিপ্ট কোডটি সম্পাদিত হবে এবং ইউজার একটি সতর্ক বার্তা পাবে। এটি একটি অতি সাধারন এবং ক্ষতি বিহীন উদাহরণ যা আপনাকে বুঝতে সাহায্য করবে কিভাবে PHP_SELF ভ্যারিয়েবলটির অপব্যবহার করা যায়।
সুতরাং সর্বদা সচেতন থাকতে হবে কারন
আপনি আমাকে যেকোনো প্রশ্ন করতে পারেন, যেমনঃ Are you sure to start over?Hi, আমি SATT AI!