পিএইচপি এসকিউএল ওয়ার্ডপ্রেস জাভাস্ক্রিপ্ট জেকুয়েরি এইচটিএমএল
লগইন
×

পিএইচপি টিউটোরিয়াল

হোম-HOME ইনস্টল-Install গঠনপ্রনালী-Syntax চলক-Variable পিএইচপি Echo / Print তথ্যের ধরণ-Data Types কনস্ট্যান্ট-Constant অপারেটর-Operator ফাংশন-Function সুপারগ্লোভাল-Superglobal

কন্ট্রোল স্টেটমেন্ট

if স্টেটমেন্ট if...Else স্টেটমেন্ট Switch স্টেটমেন্ট While লুপ DO...While লুপ For লুপ

পিএইচপি এ্যারে এবং স্ট্রিং

এ্যারে-Array এ্যারে সর্টিং -Array Sorting মাল্টি এ্যারে-Multi Array স্ট্রিং-String

পিএইচপি এডভান্স

তারিখ এবং সময় পিএইচপি include ফাইল হ্যান্ডলিং-File Handling ফাইল খোলা/পড়া ফাইল তৈরি/লিখা ফাইল আপলোড কুকি-Cookie সেশন-Session ফিল্টার-Filter এডভান্স ফিল্টার-Advance Filter এঁরর হ্যান্ডলিং-Error Handling এক্সেপশন হ্যান্ডেলিং-Exception Handling

পিএইচপি ফরম

ফরম হ্যান্ডলিং ফরম ভ্যালিডেশন আবশ্যক ফরম ফিল্ড ফরম URL/E-mail সম্পূর্ণ ফরম

MySQL ডেটাবেজ

MySQL ডেটাবেজ MySQL ডেটাবেজ সংযোগ MySQL ডেটাবেজ তৈরী MySQL টেবিল তৈরী MySQL তথ্য ইনসার্ট MySQL শেষ আইডি পান MySQL একাধিক তথ্য ইনসার্ট MySQL প্রিপেয়ার্ড স্টেটমেন্ট MySQL তথ্য সিলেক্ট MySQL তথ্য ডিলিট MySQL তথ্য আপডেট MySQL সীমিত তথ্য সিলেক্ট

পিএইচপি- এক্সএমএল

PHP XML Parser PHP SimpleXML Parser PHP XML Parser PHP SimpleXML - Get PHP XML Expat PHP XML Dom

পিএইচপি - এজাক্স

পিএইচপি AJAX পরিচিতি AJAX পিএইচপি AJAX ডেটাবেজ AJAX এক্সএমএল AJAX সারাসরি সার্চ AJAX RSS রির্ডার AJAX Poll

পিএইচপি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং(OOP)

OOP পরিচিতি OOP class তৈরী OOP objects তৈরী OOP $this কিওয়ার্ড OOP মেথড এবং প্রোপার্টি চেইনিং OOP অ্যাক্সেস মোডিফায়ার OOP ম্যাজিক মেথড এবং কন্সটেন্ট OOP ইনহেরিটেন্স OOP Abstract class এবং method OOP ইন্টারফেস OOP পলিমরফিজম OOP টাইপ হিন্টিং() OOP টাইপ হিন্টিনং ইন্টারফেস OOP স্ট্যাটিক মেথোড এবং প্রোপার্টি

পিএইচপি - রেফারেন্স

Array ফাংশন Calendar ফাংশন date/time ফাংশন Directory ফাংশন Error ফাংশন Filesystem ফাংশন Filter ফাংশন FTP ফাংশন HTTP ফাংশন libxml ফাংশন Mail ফাংশন Math ফাংশন Misc. ফাংশন MySQLi ফাংশন SimpleXML ফাংশন String ফাংশন XML Parser ফাংশন Zip File ফাংশন টাইমজোন Timezones
 

পিএইচপি ফর্ম ভ্যালিডেশন


এই অধ্যায় এবং পরবর্তী অধ্যায়ে আমরা পিএইচপি ফর্ম ভ্যালিডেশন(validation) নিয়ে আলোচনা করবো।


পিএইচপি ফর্ম ভ্যালিডেশন

আমরা কেন ফর্ম এর বৈধতা বা ভ্যালিডিটি যাচাই করি? সিকিউরিটির কথা মাথায় রেখেই আমরা মূলত পিএইচপি ফর্ম এর ভ্যালিডিটি যাচাই করি।

সিকিউরিটিকে প্রাধান্য দিয়ে কিভাবে ফর্ম ভ্যালিড করতে হয় এই অধ্যায়ে আমরা স্টেপ বাই স্টেপ দেখবো। হ্যাকার বা স্প্যামার থেকে ফর্মকে রক্ষা করার জন্য উপযুক্ত ফর্ম ভ্যালিডেশন আবশ্যক!

আমরা যে এইচটিএমএল ফর্ম নিয়ে কাজ করবো তার মধ্যে বিভিন্ন ইনপুট ফিল্ড রয়েছেঃ আবশ্যক এবং ঐচ্ছিক টেক্সট ফিল্ড, রেডিও বাটন এবং সাবমিট বাটন।

ফলাফল

উপরের ফর্মটি ভ্যালিডেশন করার রুলসগুলো নিম্নরুপঃ

ফিল্ড ভ্যালিডেশন রুলস
নাম আবশ্যক। এবং এতে শুধুমাত্র লেটার(letter) এবং whitespace থাকবে।
ই-মেইল আবশ্যক। একটি ভ্যালিড ইমেইল হতে হবে (@ এবং . সহ)।
লিঙ্গ আবশ্যক। কমপক্ষে একটি ফিল্ড অবশ্যই সিলেক্ট করতে হবে।
মেসেজ ঐচ্ছিক। মাল্টি-লাইন ইনপুট ফিল্ড(টেক্সট-এরিয়া)।

সর্বপ্রথম, আমরা ফর্ম থেকে প্লেইন এইচটিএমএল কোডগুলো লক্ষ্য করবোঃ


টেক্সট ফিল্ড

নাম এবং ই-মেইল হলো টেক্সট ইনপুট এলিমেন্ট এবং মেসেজ হলো টেক্সট-এরিয়া। এই তিনটি ইনপুট ফিল্ডের সমন্বয়ে গঠিত এইচটিএমএল কোডগুলো দেখতে এমনঃ

নামঃ <input type="text" name="name">
ই-মেইলঃ <input type="text" name="email">
মেসেজঃ <textarea name="messege" rows="5" cols="40"></textarea>

রেডিও(Radio) বাটন

লিঙ্গ নির্ধারণ করার ফিল্ডটি হলো রেডিও বাটন এবং এইচটিএমএল কোডগুলো দেখতে এমনঃ

লিঙ্গঃ <input type="radio" name="gender" value="male">পূরুষ
    <input type="radio" name="gender" value="female">মহিলা

ফর্ম এলিমেন্ট

ফর্ম এলিমেন্ট দেখতে এমনঃ

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <!--এইচটিএমএল ইনপুট ফিল্ড -->
</form>

যখন ফর্মটি সাবমিট করা হবে, ফর্মের ডাটাগুলো method="post" এর মাধ্যমে পাঠানো হবেঃ

$_SERVER["PHP_SELF"] ভ্যারিয়েবল কি?

$_SERVER["PHP_SELF"] একটি সুপারগ্লোবাল ভ্যারিয়েবল যা বর্তমানে সম্পাদিত স্ক্রিপ্ট এর নাম রিটার্ন করে। সুতরাং ফর্ম ডেটাকে প্রসেস করার জন্য অন্য পেজে না পাঠিয়ে একই(ফর্মটি যে পেজ থাকে) পেজ থেকে প্রসেস করতে হলে এই ভ্যারিয়েবলটি ব্যবহার করতে হয়।

htmlspecialchars() ফাংশন কি?

htmlspecialchars() ফাংশনটি বিশেষ বিশেষ ক্যারেক্টারসমূহকে এইচটিএমএল এনটিটি(entity) তে রূপান্তর করে। সুতরাং এটি এইচটিএমএল ক্যারেক্টার যেমন- < এবং > কে যথাক্রমে &lt; এবং &gt; দিয়ে রিপ্লেস করে। এটি হ্যাকার কর্তৃক এইচটিএমএল এবং জাভাস্ক্রিপ্ট কোডের ইনজেকশন (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" পেজ রয়েছেঃ

<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>

এই কোডটি এলার্ট কমান্ড যুক্ত একটি script ট্যাগ যোগ করবে। আর যখন পেজটি সম্পূর্ণ লোড হবে তখন জাভাস্ক্রিপ্ট কোডটি সম্পাদিত হবে এবং ইউজার একটি সতর্ক বার্তা পাবে। এটি একটি অতি সাধারন এবং ক্ষতি বিহীন উদাহরণ যা আপনাকে বুঝতে সাহায্য করবে কিভাবে PHP_SELF ভ্যারিয়েবলটির অপব্যবহার করা যায়।

সুতরাং সর্বদা সচেতন থাকতে হবে কারন <script> ট্যাগের মধ্যে যে কোনো জাভাস্ক্রিপ্ট কোড লেখা যেতে পারে! উদাহরণ স্বরূপ, একজন হ্যাকার এটি ব্যবহার করে একজন ইউজারকে অন্য সার্ভারে রিডাইরেক্ট করে দিতে পারে এবং ঐ ফাইলটিতে ক্ষতিকারক কোড থাকতে পারে যা গ্লোবাল ভ্যারিয়েবলকে পরিবর্তন করে ফর্মের তথ্য গুলোকে অন্য ঠিকানায় জমা করতে পারে।


কিভাবে $_SERVER["PHP_SELF"] কে নিরাপদ করবেন?

$_SERVER["PHP_SELF"] কে নিরাপদ করার জন্য htmlspecialchars() ফাংশনটি ব্যবহার করুন।

ফর্ম কোড নিম্নের মত দেখাবেঃ

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() ফাংশনটি বিশেষ ক্যারেকটারসমূহকে এইচটিএমএল এন্টিটিতে রূপান্তর করে। এখন যদি কোনো হ্যাকার PHP_SELF ভ্যারিয়েবলের অপব্যবহার করতে চায়, তাহলে তা নিম্নের মত ফলাফল দেখাবেঃ

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

অপব্যবহারের প্রক্রিয়া ব্যার্থ হয়েছে এবং কোন ক্ষতি সম্পন্ন হয়নি!


পিএইচপি দ্বারা ফর্মের তথ্য যাচাই

প্রথমত, আমরা সকল ভ্যারিয়েবল এর ইনডেক্স ভ্যালু গুলোকে পিএইচপি htmlspecialchars() ফাংশনের মধ্যে দিয়ে অতিক্রম করাবো।

যখন আমরা htmlspecialchars() ফাংশনটি ব্যবহার করবো, তখন যদি একজন ইউজার(হ্যাকার) নিম্নের কোড গুলো ফর্মের একটি টেক্স ফিল্ডে লিখে সাবমিট করার চেস্টা করেঃ

<script>location.href('http://www.hacked.com')</script>

- তাহলে কোড সম্পাদিত(execution) হবে না, কারন এটি সংশ্লিষট ভ্যারিয়েবলে নিম্নের মত এইচটিএমএল এনটিটি কোড আকারে জমা হয়ঃ

&lt;script&gt;location.href('http://www.hacked.com')&lt;/script&gt;

এখন এই কোড একটি পেইজ বা একটি ই-মেইলের মধ্যে নিরাপদের সাথে প্রর্দশিত হবে।

ইউজার কর্তৃক ফর্ম সাবমিট করার সময় অধিক নিরাপত্তার জন্য আমরা আরো দুটি কাজ করতে পারিঃ

  1. পিএইচপি trim() ফাংশনের মাধ্যমে আমরা ইউজার কর্তৃক ইনপুটকৃত তথ্য থেকে অপ্রয়োজনীয় ক্যারেক্টারসমূহ বাদ দিতে পারি। যেমন- extra space, tab, newline ইত্যাদি।
  2. পিএইচপি stripslashes() ফাংশনের মাধ্যমে আমরা ইউজার ইনপুটকৃত তথ্য থেকে ব্যাকস্ল্যাশ(\) গুলোকে সরিয়ে ফেলতে পারি।

পরবর্তী ধাপে আমরা এই ফাংশনগুলোর সমন্বয়ে একটি একক ফাংশন তৈরি করে নিব যার মাধ্যমে আমরা ফর্ম সম্পর্কিত সকল ধরনের যাচাই-বাছাই এক ফাংশন থেকেই করতে পারবো। এটি আমাদের কাজ অনেকটা সহজ করে দিবে এবং একই কোড আর বার বার লিখতে হবে না।

আমরা ফাংশনটির নাম verify_input() দিলাম।

এখন আমরা প্রতিটি _POST ভ্যারিয়েবলকে verify_input() ফাংশন এর মাধ্যমে পরীক্ষা করবো এবং এই কোড নিম্নের ন্যায় দেখাবেঃ

উদাহরণ
<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>

<?php
// খালি মান সহ ভ্যারিয়েবল গুলো ডিফাইন করি
$name = $email = $gender = $messege = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = verify_input($_POST["name"]);
    $email = verify_input($_POST["email"]);
    if (isset($_POST["gender"])) {
        $gender = verify_input($_POST["gender"]);
    }
    $messege = verify_input($_POST["messege"]);
}

// ফর্ম এর তথ্য যাচাই
function verify_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

    <h2>পিএইচপি ফর্ম ভ্যালিডেশন উদাহরণ</h2>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        নামঃ <input type="text" name="name">
        <br><br>
        ই-মেইলঃ <input type="text" name="email">
        <br><br>
        লিঙ্গঃ <input type="radio" name="gender" value="male">পুরুষ
            <input type="radio" name="gender" value="female">মহিলা
        <br><br>
        মেসেজঃ <textarea name="messege" rows="5" cols="40"></textarea>
        <br><br>
        <input type="submit" name="submit" value="Submit">
    </form>

<?php
echo "<h2>আপনার ইনপুটকৃত তথ্যঃ</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $gender;
echo "<br>";
echo $messege;
?>

    </body>
</html>


ফলাফল

উপরের প্রোগ্রামে লক্ষ্য করলে দেখবেন, আমরা প্রোগ্রাম এর শুরুতেই ফর্মটি $_SERVER["REQUEST_METHOD"] ব্যবহার করে সাবমিট হবে কিনা যাচাই করে নিয়েছি।

যদি REQUEST_METHOD টি POST হয় কেবল তখনই ফর্মটি সাবমিট হবে এবং verify_input() ফাংশনটি সাবমিটেড তথ্যসমূহ যাচাই করবে। আর যদি ফর্মটি সাবমিট না হয় সেক্ষেত্রে যাচাইয়ের পর্বটি এড়িয়ে যায় এবং একটি খালি ফর্ম প্রদর্শিত হবে।

উপরের উদাহরণের সকল ইনপুট ফিল্ড ঐচ্ছিক হওয়ায় ইউজার সকল ইনপুট ফিল্ডে কোন ডেটা ইনপুট না করলেও স্ক্রিপ্টটি সঠিকভাবে কাজ করবে।

পরবর্তী ধাপে আমরা ইনপুট ফিল্ড গুলোকে আবশ্যিক করবো এবং প্রয়োজন অনুসারে এরর মেসেজ তৈরি করবো।