PHP ফিল্টার-ভার (filter_var() )
সারাংশ: সারাংশ: এই টিউটোরিয়ালে, আপনি শিখবেন কিভাবে PHP filter_var() ফাংশন ব্যবহার করে ডেটা স্যানিটাইজ এবং যাচাই করতে হয়।
PHP filter_var() ফাংশনের ভূমিকা
বাহ্যিক ডেটা নিয়ে কাজ করার সময়, আপনাকে নিরাপত্তার উদ্দেশ্যে এটিকে স্যানিটাইজ এবং যাচাই করতে হবে। বহিরাগত ডেটা ব্যবহারকারীর ইনপুট বা তৃতীয় পক্ষের API থেকে আসতে পারে।
থাম্বের একটি ভাল নিয়ম হল যে আপনি কখনই বাহ্যিক ডেটা বিশ্বাস করবেন না। এবং আপনার সর্বদা উচিত:
ডাটাবেসে সংরক্ষণ করার আগে ডেটা স্যানিটাইজ করুন এবং যাচাই করুন।
একটি ওয়েব পৃষ্ঠায় এটি প্রদর্শন করার আগে স্পেস ডেটা।
ধরুন, আপনার কাছে এমন একটি URL আছে যাতে একটি ক্যোয়ারী স্ট্রিং রয়েছে:
http://localhost:8080/index.php?id=10
এবং আপনি পৃষ্ঠায় $id প্রদর্শন করতে চান:
echo $_GET['id'];
এই ক্ষেত্রে, আপনি দেখতে পাচ্ছেন যে পৃষ্ঠাটি 10 নম্বরটি প্রদর্শন করে।
যাইহোক, একটি দূষিত হ্যাকার আইডির মান এইরকম কিছু কোডে পরিবর্তন করতে পারে:
%3Cscript%3Ealert(%27Hi%27)%3C/script%3E
এবং URL হবে:
http://localhost:8080/phptutorial/filter_var/index.php?id=%3Cscript%3Ealert(%27Hi%27)%3C/script%3E
এই ক্ষেত্রে, আপনি পরিবর্তে ওয়েব ব্রাউজারে একটি সতর্কতা দেখতে পাবেন। এই উদাহরণে, আইডির মান একটি সংখ্যা নয় বরং জাভাস্ক্রিপ্ট কোডের একটি অংশ যা একটি সতর্কতা দেখায়।
নিম্নলিখিত পরিস্থিতি কল্পনা করুন:
প্রথমত, একজন হ্যাকার একটি বৈধ ডোমেনে (https://www.mybank.com/login/?id=…) পৃষ্ঠার একটি লিঙ্ক তৈরি করে। একটি বৈধ নম্বরের পরিবর্তে দূষিত কোড ধারণ করে এমন একটি আইডি সহ। এবং দুর্ভাগ্যবশত, পৃষ্ঠাটি ইনপুটকে স্যানিটাইজ এবং যাচাই করে না।
দ্বিতীয়ত, হ্যাকার একটি ইমেলে লিঙ্কটি এম্বেড করে এবং mybank.com এর ব্যবহারকারীদের কাছে পাঠায়।
তৃতীয়ত, ব্যবহারকারীরা একটি বৈধ ডোমেনের সাথে লিঙ্কটি দেখতে পান এবং এটিতে ক্লিক করেন। যখন তারা পৃষ্ঠায় পৌঁছায়, তাদের একই চেহারা এবং অনুভূতি সহ হ্যাকারের ওয়েবসাইটে পুনঃনির্দেশিত করা হয় (https://www.mybank.on-a-malicious-domain.com/login/)।
অবশেষে, ব্যবহারকারীরা তাদের অ্যাকাউন্টে প্রবেশ করে এবং হ্যাকারের কাছে ব্যাঙ্কের শংসাপত্র হারায়।
এটি প্রতিরোধ করার জন্য, আপনাকে এটি প্রক্রিয়া করার আগে ডেটা স্যানিটাইজ এবং যাচাই করতে হবে।
স্যানিটাইজেশন এটি প্রক্রিয়া করার আগে ডেটা থেকে সম্ভাব্য দূষিত কোড নিষ্ক্রিয় করে।
বৈধতা নিশ্চিত করে যে ডেটা টাইপ, পরিসর এবং মান সম্পর্কিত ডেটা সঠিক বিন্যাসে রয়েছে।
PHP-এ filter_var() ফাংশন রয়েছে যা আপনাকে ডেটা স্যানিটাইজ এবং যাচাই করতে সহায়তা করে। এখানে filter_var() ফাংশনের সিনট্যাক্স রয়েছে:
filter_var ( mixed $value , int $filter = FILTER_DEFAULT , array|int $options = 0 ) : mixed
filter_var() নিম্নলিখিত পরামিতিগুলিকে কাজ করে:
$value হল মানটি ফিল্টার করা হবে।
$filter হল প্রয়োগ করার জন্য ফিল্টার আইডি। ফিল্টার আইডি নির্ধারণ করে কিভাবে filter_var() ফাংশন $value ফিল্টার করে।
$options হল বিকল্পগুলির একটি সহযোগী অ্যারে বা পাইপ অক্ষর (|) দ্বারা পৃথক করা পতাকার তালিকা।
filter() ফাংশন ফিল্টার করা মান প্রদান করে, অথবা ফিল্টার ব্যর্থ হলে মিথ্যা।
PHP ফিল্টার_ভার() ফাংশনের উদাহরণ
filter_var() ফাংশন ব্যবহার করার একটি উদাহরণ নেওয়া যাক।
1) ডেটা স্যানিটাইজ করতে PHP filter_var() ফাংশন ব্যবহার করে
নিম্নলিখিত উদাহরণটি একটি ক্যোয়ারী স্ট্রিং এর আইডি স্যানিটাইজ করতে filter_var() ফাংশন ব্যবহার করে:
<?php if (filter_has_var(INPUT_GET, 'id')) { // sanitize id $id = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); // show the id var_dump($id); } else { echo 'id is required.'; }
মনে রাখবেন যে filter_has_var() ফাংশনটি সত্য দেখায় যদি ক্যোয়ারী স্ট্রিংটিতে id প্যারামিটার থাকে।
আপনি যদি URL এ নেভিগেট করেন:
http://localhost:8080/index.php?id=10
আপনি নিম্নলিখিত মান দেখতে পাবেন:
string(2) "10"
FILTER_SANITIZE_NUMBER_INT ফিল্টার সহ filter_var() ফাংশন আইডি ভেরিয়েবল থেকে অঙ্ক, প্লাস এবং বিয়োগ চিহ্নগুলি ছাড়া সমস্ত অক্ষর মুছে ফেলবে৷ সমস্ত ফিল্টার আইডি দেখুন যা আপনি ডেটা স্যানিটাইজ করতে ব্যবহার করতে পারেন।
2) ডেটা যাচাই করতে PHP filter_var() ফাংশন ব্যবহার করে
ডেটা স্যানিটাইজ করার পাশাপাশি, আপনি ডেটা যাচাই করতে filter_var() ফাংশন ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:
<?php if (filter_has_var(INPUT_GET, 'id')) { // sanitize id $clean_id = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); // validate id $id = filter_var($clean_id, FILTER_VALIDATE_INT); // show the id if it's valid echo $id === false ? 'Invalid id' : $id; } else { echo 'id is required.'; }
এই উদাহরণে, আমরা $_GET অ্যারে থেকে filter_var() ফাংশনে id পাস করি এবং $_GET[‘id’] একটি পূর্ণসংখ্যা কিনা তা যাচাই করতে FILTER_VALIDATE_INT ফিল্টার আইডি ব্যবহার করি।
ফলাফল মিথ্যা হলে, এটি ‘অবৈধ আইডি’ বার্তা দেখায়। অন্যথায়, এটি আইডির মান ডাম্প করে। যদি আইডি একটি পূর্ণসংখ্যা হয়, উদাহরণস্বরূপ:
http://localhost:8080/index.php?id=10
…আপনি পর্দায় নিম্নলিখিত মান দেখতে পাবেন:
10
লক্ষ্য করুন যে filter_var() ফাংশনটি স্পষ্টভাবে স্ট্রিং ’10’ কে পূর্ণসংখ্যা 10 এ রূপান্তর করে। যদি আইডির মান একটি পূর্ণসংখ্যা ছাড়া অন্য কিছু হয়, আপনি বার্তাটি দেখতে পাবেন: অকার্যকর
Invalid id
কিছু ফিল্টার আইডি অতিরিক্ত বিকল্প সমর্থন করে। উদাহরণস্বরূপ, ফিল্টার ব্যর্থ হলে FILTER_VALIDATE_INT আপনাকে সর্বনিম্ন পরিসর, সর্বোচ্চ পরিসর এবং ডিফল্ট মান নির্দিষ্ট করতে দেয়৷
আইডির মান 10-এর থেকে বেশি তা নিশ্চিত করতে, আপনি filter_var() ফাংশনে $options আর্গুমেন্ট ব্যবহার করুন:
<?php if (filter_has_var(INPUT_GET, 'id')) { // sanitize id $clean_id = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT); if ($clean_id) { // validate id with options $id = filter_var($clean_id, FILTER_VALIDATE_INT, ['options' => [ 'min_range' => 10 ]]); // show the id if it's valid echo $id === false ? 'id must be at least 10' : $id; } else { echo 'id is invalid.'; } } else { echo 'id is required.'; }
ক্যোয়ারী স্ট্রিং এ আপনার আইডি না থাকলে, আপনি নিম্নলিখিত ত্রুটিটি পাবেন:
id is required.
আপনার যদি একটি আইডি থাকে যা নিম্নলিখিতগুলির মতো একটি পূর্ণসংখ্যা নয়:
index.php?id=abc
… আপনি নিম্নলিখিত ত্রুটি পাবেন
id is invalid.
যাইহোক, যদি আপনার কাছে এমন একটি আইডি থাকে যার মান এইরকম একটি পূর্ণসংখ্যাতে রূপান্তর করা যায় না:
index.php?id=123abc
…আপনি 123 মান সহ আইডি পাবেন কারণ FILTER_SANITIZE_NUMBER_INT ফিল্টারটি আইডি থেকে abc অক্ষরগুলি সরিয়ে দেয়৷ আপনার যদি 10 এর কম মান সহ একটি আইডি থাকে:
index.php?id=9
… আপনি নিম্নলিখিত বার্তা পাবে
id must be at least 10
সারসংক্ষেপ
বাহ্যিক তথ্য বিশ্বাস করা যাবে না. অতএব, আপনার সর্বদা বাহ্যিক ডেটা স্যানিটাইজ এবং যাচাই করা উচিত। ডেটা স্যানিটাইজ এবং যাচাই করতে PHP filter_var() ফাংশন ব্যবহার করুন।