PHP ফর্ম পরীক্ষা
- Previous Page PHP Form Handling
- Next Page PHP Required Form Fields
এই ধাপটি এবং পরবর্তী ধাপটি PHP ব্যবহার করে ফর্ম ডাটা পরীক্ষা করার কিভাবকে ব্যাখ্যা করে।
PHP ফর্ম পরীক্ষা
সুপারিশ:PHP ফর্ম প্রক্রিয়াকরণের সময় নিরাপত্তা গুরুত্বপূর্ণ!
এই পেজগুলো কিভাবে PHP ফর্ম নিরাপদভাবে হ্যাকার এবং স্প্যাম থেকে বিরত রাখা হবে দেখাবে। HTML ফর্ম ডাটা নিরাপদভাবে পরীক্ষা করা অত্যন্ত জরুরি!
আমরা পরে ব্যবহার করব এমন HTML ফর্ম এমন বহুলীভাবে ইনপুট ফিল্ড রয়েছে: অপশনাল এবং অপশনাল টেক্সট ফিল্ড, রেডিও বটন এবং সমর্থন বটন:
উপরোক্ত ফর্ম এমন পরীক্ষা নিয়ম ব্যবহার করে:
ফিল্ড | পরীক্ষা নিয়ম |
---|---|
Name | অপশনাল। অক্ষর এবং স্পেস থাকতে হবে。 |
অপশনাল। বৈধ ইমেইল ঠিকানা (যেমন @ এবং .) থাকতে হবে。 | |
Website | অপশনাল। যদি পূর্ণ করা হয়, তবে বৈধ URL থাকতে হবে。 |
Comment | অপশনাল। বহুলীভাবে ইনপুট ফিল্ড (টেক্সট বক্স)। |
Gender | অপশনাল। একটি বাছাই করতে হবে。 |
প্রথমে আমরা এই ফর্মের পরিমাণবিহীন HTML কোড দেখুন:
টেক্সট ফিল্ড
name, email এবং website হল টেক্সট ইনপুট ইলেকট্রন, comment ফিল্ড হল টেক্সট বক্স。
নাম: <input type="text" name="name"> ইমেইল: <input type="text" name="email"> ওয়েবসাইট: <input type="text" name="website"> কমেন্ট: <textarea name="comment" rows="5" cols="40"></textarea>
রেডিও বটন
gender ফিল্ড হল একটি রেডিও বটন, HTML কোড এইভাবে হয়:
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
ফর্ম ইলেকট্রন
ফর্মের HTML কোড এইভাবে হয়:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
এই ফর্ম সমর্থন করতে, method="post" দিয়ে ফর্ম ডাটা পাঠানো হয়。
$_SERVER["PHP_SELF"] ভেচরা কী আছে?
$_SERVER["PHP_SELF"] একটি সুপার গ্লোবাল ভেচরা, যা বর্তমানে এক্সিকিউটিং স্ক্রিপ্টের ফাইল নাম ফিরিয়ে দেয়。
তাই, $_SERVER["PHP_SELF"] ফর্ম ডাটা পেজকে পাঠায়, না অন্য পেজে জামানো হয়। এইভাবে, ব্যবহারকারী ফর্ম পেজে ত্রুটি সূচনা পাবেন。
htmlspecialchars() ফাংশন কী?
htmlspecialchars() ফাংশনটি বিশেষ চিহ্নকে HTML ইন্টারচিস্ট হিসাবে রূপান্তরিত করে। এই অর্থে, < এবং > জাতীয় HTML চিহ্নগুলি < এবং > হিসাবে রূপান্তরিত হবে। এইভাবে, হ্যাকারকে ফর্মে HTML বা JavaScript কোড (ক্রস-সাইট স্ক্রিপ্টিং হ্যাক) যোগ করার সুযোগ দেওয়া হবেনা。
PHP ফর্ম নিরাপত্তা সম্পর্কে গুরুত্বপূর্ণ পরামর্শ
$_SERVER["PHP_SELF"] ভেক্টরটি হ্যাকারকে ব্যবহার করা যায়!
যদি আপনার পাতা PHP_SELF ব্যবহার করছে, তবে ব্যবহারকারী হাইপনেশন করতে পারবেন এবং ক্রস-সাইট স্ক্রিপ্টিং (XSS) চালু করতে পারবেন。
সুপারিশ:ক্রস-সাইট স্ক্রিপ্টিং (Cross-site scripting, XSS) একটি কম্পিউটার নিরাপত্তা কোয়ালিটি, যা সাধারণত Web অ্যাপ্লিকেশনে দেখা যায়। XSS একটি হ্যাকারকে অন্য ব্যবহারকারীর ব্রাউজারে ক্লিয়েন্ট স্ক্রিপ্ট যোগ করার সুযোগ দেয়。
আমাদের "test_form.php" নামের একটি পাতায় এমন একটি ফর্ম আছে:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
এখন, যদি ব্যবহারকারী নিজস্ব URL ব্যবহার করেন যেমন: "http://www.example.com/test_form.php" তবে উপরের কোডটি এমনভাবে রূপান্তরিত হবে:
<form method="post" action="test_form.php">
এখন পর্যন্ত, সমস্ত সাধারণ
কিন্তু, যদি ব্যবহারকারী এমন একটি URL লিখেছেন যেমন:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
এই পরিস্থিতিতে, উপরের কোডটি এমনভাবে রূপান্তরিত হবে:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
এই কোড একটি স্ক্রিপ্ট এবং একটি টুইপ কমান্ড যোগ করেছে। এবং যখন এই পাতা লোড হয়, তখনই জেভাস্ক্রিপ্ট কোড চালু হবে (ব্যবহারকারীকে একটি টুইপ বাক্স দেখানো হবে)। এটি শুধুমাত্র PHP_SELF ভেক্টরের কিভাবে ব্যবহৃত হয়েছে একটি সহজ নিরীহ নমুনা।
আপনি মানবাগত হওয়ার কথা সম্ভব স্ক্রিপ্ট> ট্যাগের মধ্যে কোনোই জেভাস্ক্রিপ্ট কোড যোগ করা যায়! হাকার ব্যবহারকারীকে আরেকটি সার্ভারের কোনও ফাইলে পাঠাতে পারে, যেখানে কোনও কৃত্রিম কোড রয়েছে যা গ্লোবাল পরিবর্তানীকে পরিবর্তন করতে পারে বা ফর্মটি অন্য ঠিকানায় সমর্থন করে কাজ করে, ইত্যাদি।
কিভাবে $_SERVER["PHP_SELF"] ব্যবহার করা থেকে বিরত রাখা যায়?
htmlspecialchars() ফাংশনের মাধ্যমে যোগাযোগ করে $_SERVER["PHP_SELF"] ব্যবহার করা থেকে বিরত করা যায়。
ফর্ম কোডটি এই মতো হয়:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);>"
htmlspecialchars() ফাংশন বিশেষ অক্ষরগুলোকে HTML ইমজা হিসাবে রূপান্তর করে। এখন, যদি ব্যবহারকারী PHP_SELF পরিবর্তানীকে ব্যবহার করে:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
ব্যবহারযোগ্য নয়, কোন ক্ষতিকারক নয়!
PHP-র মাধ্যমে ফর্ম ডাটা পরীক্ষা করা
আমরা প্রথম কাজ হল সকল পরিবর্তানীকে PHP-র htmlspecialchars() ফাংশনের মাধ্যমে পাঠানো।
আমরা htmlspecialchars() ফাংশনের মাধ্যমে যদি ব্যবহারকারী টেক্সট ফিল্ডে নিচের কিছু প্রবেশ করে:
<script>location.href('http://www.hacked.com')</script>
- কোডটি চালায় না, কারণ এটা ইসকেপড কোড হিসাবে সংরক্ষিত হবে, এমনকি এই মতো:
<script>location.href('http://www.hacked.com')</script>
এখন এই কোডটি পৃষ্ঠা এবং e-mail-এ নিরাপদে প্রদর্শিত হবে
ব্যবহারকারী ফর্মটি জমা দিলে, আমরা দুটি কাজ করতে হবে:
- (PHP trim() ফাংশনের মাধ্যমে)ব্যবহারকারীর প্রবেশকৃতির মধ্যে অপ্রয়োজনীয় অক্ষরগুলো (অতিরিক্ত স্পেস, ট্যাব, নিশ্চলক) সরিয়ে দিন
- (PHP stripslashes() ফাংশনের মাধ্যমে)ব্যবহারকারীর প্রবেশকৃতির মধ্যে ডবল স্ক্রোল নিষ্ক্রিয় করুন
এখন আমরা একটি পরীক্ষা ফাংশন তৈরি করব, (কারণ এটা পুনরাবৃত্তি করা কোডকে সরল করে কাজ করে)।
আমরা ফাংশনটিকে test_input() নাম দিই।
এখন, আমরা test_input() ফাংশনের মাধ্যমে প্রত্যেক $_POST পরিবর্তানীকে পরীক্ষা করতে পারি, স্ক্রিপ্ট এই মতো হয়:
উদাহরণ
<?php // পরিবর্তানীগুলোকে নিচ্ছে এবং খালি মানে সংজ্ঞায়িত করুন $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Please note that at the beginning of the script, we checked whether the form was submitted using $_SERVER["REQUEST_METHOD"]. If REQUEST_METHOD is POST, then the form has been submitted - and it should be validated. If not submitted, skip validation and display a blank form.
However, in the above example, all input fields are optional. Even if the user does not enter any data, the script can still work normally.
The next step is to create required input fields and create error messages to be used when needed.
- Previous Page PHP Form Handling
- Next Page PHP Required Form Fields