ফর্ম ভ্যালিডেশন(Form validation)
পিএইচপি(PHP)টিউটোরিয়াল
আমরা কেন ফর্ম এর বৈধতা বা ভ্যালিডিটি যাচাই করি? সিকিউরিটির কথা মাথায় রেখেই আমরা মূলত পিএইচপি ফর্ম এর ভ্যালিডিটি যাচাই করি।সিকিউরিটিকে প্রাধান্য দিয়ে কিভাবে ফর্ম ভ্যালিড করতে হয় এই অধ্যায়ে আমরা স্টেপ বাই স্টেপ দেখবো। হ্যাকার বা স্প্যামার থেকে ফর্মকে রক্ষা করার জন্য উপযুক্ত ফর্ম ভ্যালিডেশন আবশ্যক
ফর্ম এলিমেন্ট
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<!--এইচটিএমএল ইনপুট ফিল্ড -->
</form>
পিএইচপি ফর্ম সিকিউরিটি
$_SERVER["PHP_SELF"] ভ্যারিয়েবলটি হ্যাকার কর্তৃক ব্যবহৃত হতে পারে!আপনি যদি আপনার ওয়েব পেজে PHP_SELF ব্যবহার করে থাকেন তাহলে একজন ইউজার আপনার পেজ লিঙ্কের শেষে একটি স্ল্যাশ(/) এবং এরপরে কিছু Cross Site Scripting(XSS) কমান্ড সম্পাদন করতে পারে।কম্পিউটারের একটি দুর্বল সিকিউরিটি হচ্ছে Cross-site scripting(XSS) যা সাধারনত ওয়েব অ্যাপ্লিকেশন এর ক্ষেত্রে দেখা যায়। Cross Site Scripting(XSS) ব্যবহার করে হ্যাকাররা একটি ওয়েব পেজের client-side script ইনজেক্ট করতে সক্ষম
পিএইচপি দ্বারা ফর্মের তথ্য যাচাই
প্রথমত, আমরা সকল ভ্যারিয়েবল এর ইনডেক্স ভ্যালু গুলোকে পিএইচপি htmlspecialchar() ফাংশনের মধ্যে দিয়ে অতিক্রম করাবো।যখন আমরা htmlspecialchars() ফাংশনটি ব্যবহার করবো, তখন যদি একজন ইউজার(হ্যাকার) নিম্নের কোড গুলো ফর্মের একটি টেক্স ফিল্ডে লিখে সাবমিট করার চেস্টা করেঃ
1.পিএইচপি trim() ফাংশনের মাধ্যমে আমরা ইউজার কর্তৃক ইনপুটকৃত তথ্য থেকে অপ্রয়োজনীয় ক্যারেক্টারসমূহ বাদ দিতে পারি। যেমন- extra space, tab, newline ইত্যাদি
2. পিএইচপি stripslashes() ফাংশনের মাধ্যমে আমরা ইউজার ইনপুটকৃত তথ্য থেকে ব্যাকস্ল্যাশ(\) গুলোকে সরিয়ে ফেলতে পারি।
পরবর্তী ধাপে আমরা এই ফাংশনগুলোর সমন্বয়ে একটি একক ফাংশন তৈরি করে নিব যার মাধ্যমে আমরা ফর্ম সম্পর্কিত সকল ধরনের যাচাই-বাছাই এক ফাংশন থেকেই করতে পারবো। এটি আমাদের কাজ অনেকটা সহজ করে দিবে এবং একই কোড আর বার বার লিখতে হবে না।আমরা ফাংশনটির নাম verify_input() দিলাম।
এখন আমরা প্রতিটি _POST ভ্যারিয়েবলকেverify_input() ফাংশন এর মাধ্যমে পরীক্ষা করবো এবং এই কোড নিম্নের ন্যায় দেখাবেঃ
উপরের প্রোগ্রামে লক্ষ্য করলে দেখবেন, আমরা প্রোগ্রাম এর শুরুতেই ফর্মটি $_SERVER["REQUEST_METHOD"] ব্যবহার করে সাবমিট হবে কিনা যাচাই করে নিয়েছি।
যদি REQUEST_METHOD টি POST হয় কেবল তখনই ফর্মটি সাবমিট হবে এবং verify_input() ফাংশনটি সাবমিটেড তথ্যসমূহ যাচাই করবে। আর যদি ফর্মটি সাবমিট না হয় সেক্ষেত্রে যাচাইয়ের পর্বটি এড়িয়ে যায় এবং একটি খালি ফর্ম প্রদর্শিত হবে।
উপরের উদাহরণের সকল ইনপুট ফিল্ড ঐচ্ছিক হওয়ায় ইউজার সকল ইনপুট ফিল্ডে কোন ডেটা ইনপুট না করলেও স্ক্রিপ্টটি সঠিকভাবে কাজ করবে।
পরবর্তী ধাপে আমরা ইনপুট ফিল্ড গুলোকে আবশ্যিক করবো এবং প্রয়োজন অনুসারে এরর মেসেজ তৈরি করবো।