নমস্কার! সুপ্রভাত! স্বাগত নতুন ব্লগে। গত পর্বে আমরা দেখেছিলাম, ওয়ার্ডপ্রেসে কিভাবে ডেটা Sanitizing করতে হয়। আজকের ব্লগে আমরা কথা বলব ওয়ার্ডপ্রেসে ডেটা Escaping নিয়ে। গত পর্ব মিস করে থাকলে এখানে ক্লিক করে পড়ে নেওয়া যাবে।
ওয়ার্ডপ্রেসে ডেটা Escaping
সংক্ষেপে বলতে গেলে ডেটা Escaping হল সিকিউর ভাবে আউটপুট দেখানো। XSS অ্যাটাক প্রতিরোধ করতে এটা ব্যবহার করতে হয়। এই পদ্ধতির মাধ্যমে এইচটিএমএলের স্পেশাল ক্যারেক্টারকে আলাদা ক্যারেক্টার সেটে এনকোড করা হয়। আর আউটপুটে তা এক্সিউটের পরিবর্তে ডিকোড করে দেখানো হয়। যেমন < চিহ্নকে escaping করলে তা এনকোড হয়ে < হয়ে যাবে।
ওয়ার্ডপ্রেসে বিভিন্ন ধরণের ডেটা Escaping এর জন্য আলাদা আলাদা ফাংশন রয়েছে। চলুন এবার উদাহরণ সহ কোডিং এ চলে যাওয়া যাক।
esc_html()
এই ফাংশন নির্দিষ্ট কিছু এইচটিএমএল ক্যারেক্টারকে escape করে আলাদা ক্যারেক্টার সেটে এনকোড করে ফেলে। কোডিং সহ উদাহরণঃ
<?php echo esc_html("<html>HTML</html>"); ?>
উপরের কোডটুকু রান করালে আউটপুট আসবে।
//Output
“<html>HTML</html>”
লক্ষ্য করলে দেখা যাবে < > চিহ্ন গুলোকে esc_html() ফাংশন এনকোড করে < > করে ফেলেছে।
esc_textarea()
এই ফাংশন esc_html() ফাংশনের মতই। স্পেশালিটি হল এটির এনকোডিং সিস্টেম ডাবল লেয়ারের এবং <textarea> ট্যাগের মধ্যে যখন কোন ডেটা দেখানো হয় তখন এই ফাংশন ব্যবহার করা হয়।
esc_attr()
<
,>
, &
, "
এবং '
ক্যারেক্টার গুলোকে এই ফাংশন এনকোড করে। এইচটিএমএল ট্যাগের attribute ভ্যালু escaping এর জন্য এই ফাংশন ব্যবহার করা হয়। জেনে রাখা ভাল যে এই ফাংশন কোন স্ট্যাটিক টেক্সের জন্য ব্যবহার করবার প্রয়োজন নেই। ডাইনামিক এবং জেনারেটেড টেক্সের জন্য ব্যবহার করা হয়। কোডিং সহ উদাহরণঃ
<?php $style = "__Some generated text from database or user input__"; echo '<label><input type="checkbox" id="custom_header" name="custom_header" value="1" '. $checked .' style="' . esc_attr($style) . '"> Activate Custom Header</label>'; ?>
esc_url()
একটি ইউআরএল এ কিন্তু জাভাক্রিপ্ট কোড থাকতেই পারে এবং তা <a> ট্যাগের href attribute মাধ্যমে এক্সিকিউট করা সম্ভব। তাই একটি ইউআরএল তথা একটি লিংককে href attribute এর মাধ্যমে প্রকাশ করবার আগে তা escaping করে নেওয়া অবশ্যই প্রয়োজন নতুবা আপনার এপ্লিকেশন XSS অ্যাটাকের সম্মুখীন হতে পারে। কোডিং সহ উদাহরণঃ
<?php $url = "javascript:alert('Hello')"; ?> <a href="<?php echo esc_url($url);?>">Text</a>
উপরের কোড রান করলে কিন্তু জাভাক্রিপ্ট কোড এক্সিকিউট হবেনা। কারণ আমরা escape করে নিয়েছি। esc_url() ফাংশন ছাড়া কোডটা রান করিয়ে দেখতে পারেন। একটা জাভাক্রিপ্ট এলার্ট দেখাবে।
esc_url_raw()
ডেটাবেজে কোন ইউআরএল সংরক্ষণ করবার আগে এই ফাংশন ব্যবহার করে তা escape করে নিতে হয়। esc_url_raw() ফাংশন একটি ভ্যালিড ইউআরএল রিটার্ন করে।
antispambot()
ইন্টারনেটে প্রচুর ইমেইল বট রয়েছে যাদের কাজ হল ইমেইল এড্রেস সংগ্রহ করা। আমরা নিশ্চয় চাইবোনা ফ্রন্টএন্ডে প্রদর্শিত কোন ইমেইল এড্রেস ইউজার ব্যাতিত বটের হাতে পড়ুক। এই কাজের জন্য রয়েছে antispambot() নামে একটি ফাংশন। এটি ইমেইল এড্রেস কে আলাদা ক্যারেক্ট সেটে ইনকোড করে। কোডিং সহ উদাহরণঃ
<?php echo antispambot("joy2012bd@gmail.com"); ?>
উপরের কোড রান করালে আউটপুট আসবে।
//Output
“narayanprusty@sitepoint.com”
ওয়ার্ডপ্রেসে ডেটা Escaping নিয়ে এটায় ছিল আজকের ব্লগ। একজন ভাল মানের ওয়েব ডেভেলপার হতে গেলে আপনাকে অবশ্যই সিকিউরিটির বিষয় টা অতি গুরুত্বের সাথে বিবেচনা করতে হবে। আমরা হয়ত এটা বলতে পারবোনা যে আমাদের এপ্লিকেশন হ্যাক করা সম্ভব না। সব এপ্লিকেশনের দূর্বল পয়েন্ট থাকে। কিন্তু আমরা সর্বোচ্চ সিকিউরিটি লেবেল তো প্রদান করতে পারি।
যেকোন ধরণের এপ্লিকেশনে ডেটা Sanitizing, escaping এবং Validation খুবই গুরুত্বপূর্ণ। এগুলোতে কখনই অবহেলা করা ঠিক না। ওয়ার্ডপ্রেসে ডেটা Sanitizing কিভাবে করতে হয় জানতে এই লেখাটি পড়তে পারেন।
আজ এপর্যন্ত। ভাল থাকবেন। কথা হবে পরবর্তী ব্লগে। ফেসবুকে আমাকে পাবেন এখানে। হ্যাপি কোডিং।