আজ ওয়েবসাইট হ্যা*কিংয়ের কিছু ভিডিও দেখছিলাম। সেখানে HTML Injection সহ কিছু মেথড দেখাচ্ছিল। এটা অবশ্যই এলার্মিং একটি বিষয়।
কারন, ওয়েব ডেভেলপমেন্টে সিকিউরিটি খুবই গুরুত্বপূর্ণ। বিশেষ করে ইউজার ইনপুট হ্যান্ডলিংয়ে। ফর্ম ও বিভিন্ন ইনপুট মেথডের মাধ্যমে হ্যাকাররা ওয়েবসাইট XSS (Cross-Site Scripting) এটাক করতে পারে।
এটা থেকে বাঁচার উপায় খুঁজতে গিয়েই htmlspecialchars() এর সন্ধান পেলাম। এটি PHP এর একটি বিল্ট-ইন ফাংশন। আজকে এই ফাংশন নিয়েই আলোচনা করবো। আশাকরি পুরোটা পড়বেন।
htmlspecialchars() কী এবং এটি কীভাবে কাজ করে?
htmlspecialchars() একটি PHP ফাংশন, যা HTML স্পেশাল ক্যারেক্টারগুলোকে এস্কেপ করে। এতে ব্রাউজার সেগুলোকে HTML ট্যাগ হিসেবে ধরে না।
সহজ ভাষায় বললে, এটি HTML-এ ব্যবহৃত কিছু নির্দিষ্ট ক্যারেক্টারকে সাধারণ টেক্সটে কনভার্ট করে দেয়। ফলে কোনো স্ক্রিপ্ট বা ম্যালিশিয়াস কোড ব্রাউজারে এক্সিকিউট হতে পারে না।
একটা উদাহরণ দিলে বুঝতে সহজ হবে। যেমন,
$user_input = '<script>alert("Hacked!");</script>';
echo htmlspecialchars($user_input);
আউটপুট:
<script>alert("Hacked!");</script>
এতে ট্যাগকে সাধারন টেক্সটে কনভার্ট করা হয়েছে। ফলে XSS আক্রমণ প্রতিরোধ করা যায়। এটি না করলে সার্ভার থেকে প্রতিটি ইউজারের ব্রাউজারে “Hacked!” নামে একটি পপ-আপ চলে আসতো।
কেন htmlspecialchars() ব্যবহার করা জরুরি?
ইউজার ইনপুট সঠিকভাবে ফিল্টার না করলে হ্যাকাররা Cross-Site Scripting (XSS) আক্রমণ করতে পারে। ধরুন, আপনার একটি কমেন্ট সিস্টেম আছে, যেখানে ইউজাররা ইনপুট দিতে পারে।
সেখানে যদি উপরের মতো কোড ইনপুট দেওয়া শুরু করলে তাহলে সাইটের সিকিউরিটি ডাউন হয়ে যাবে। অর্থাৎ, বুঝতেই পারছেন এই ফাংশন ব্যবহার করা কতটা জরুরী। তবুও কয়েকটি বলি।
→ XSS (Cross-Site Scripting) আক্রমণ প্রতিরোধ করে
→ ইউজার ইনপুট সুরক্ষিত রাখতে সাহায্য করে
→ ওয়েবসাইটের নিরাপত্তা নিশ্চিত করে
এটি বিশেষভাবে দরকার যেখানে ইউজার ইনপুট HTML-এ রেন্ডার হয়, যেমন:
- কমেন্ট সিস্টেম
- চ্যাট অ্যাপ
- ফর্ম ইনপুট
- ইত্যাদি
htmlspecialchars() নাকি htmlentities() ?
এই ধরনের কোড ইঞ্জেকশন হ্যান্ডেল করার জন্য এই দুইটি পদ্ধতি আছে। এখন প্রশ্ন আসতে পারে কোনটা ভালো? কোনটা ব্যবহার করবো? তাই এখানে এই দুটোর মধ্যে কিছু পার্থ্যক তুলে ধরছি।
- ফাংশন → কাজ
- htmlspecialchars() → শুধুমাত্র স্পেশাল ক্যারেক্টার এনকোড করে
- htmlentities() → পুরো HTML এনকোড করে
অর্থাৎ, XSS প্রতিরোধের জন্য htmlspecialchars() যথেষ্ট।
সঠিকভাবে htmlspecialchars() ব্যবহার করার উপায়
ইনপুটের বিভিন্ন প্যারামিটারকে ভেঙ্গে সাধারণ ফন্টে পরিণত করে এই ফাংশনটি। তারপর সেটাকে সার্ভারে পাঠায়। নীচের টেবিলে বিস্তারিত তুলে ধরা হয়েছে,
এই ফাংশনটি বিভিন্ন প্রয়োজনে বিভিন্ন ভাবে লেখা যায়। যখন যেটা প্রয়োজন আরকি। যেমন,
সাধারণ ব্যবহার:
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
Quotes এনকোড করতে:
echo htmlspecialchars($user_input, ENT_QUOTES);
কোনো Quotes এনকোড না করতে:
echo htmlspecialchars($user_input, ENT_NOQUOTES);
সুতরাং,
এতটুকু পড়ে আমরা বুঝতে পারলাম,
→ htmlspecialchars() ইউজার ইনপুট সুরক্ষিত রাখে এবং XSS আক্রমণ প্রতিরোধ করে
→ সবসময় ইউজার ইনপুট ফিল্টার করে
→ ওয়েবসাইট সিকিউর রাখে
এখন থেকে ইউজারের ইনপুট নেয়ার সময় htmlspecialchars() ফাংশন ব্যবহার করার অভ্যাস করুন। এটি আমাদের সাইটকে নিরাপদ রাখবে।