আগের প্রতিটি পাঠের কোড উদাহরণ ইতিমধ্যে esc_html(), esc_attr(), আর esc_url() ব্যবহার করেছে সম্পূর্ণভাবে কেন তা ব্যাখ্যা না করেই। এই পাঠ সরাসরি কারণটি কাভার করে: escaping হলো সেই জিনিস যা একটি থিম আর একটি সত্যিকারের গুরুতর নিরাপত্তা ছিদ্রের মধ্যে দাঁড়িয়ে থাকে।
শেষ পর্যন্ত ইউজার ইনপুট থেকে আসা যেকোনো মান — একটি কাস্টম ফিল্ড, একটি কমেন্ট, একটি URL প্যারামিটার, কেউ এডিটরে টাইপ করা একটি title — তাত্ত্বিকভাবে সাধারণ টেক্সটের বদলে HTML বা JavaScript থাকতে পারে। Escape না করে এটি সরাসরি একটি পাতায় echo করুন, আর সেই কোড শুধু টেক্সট হিসেবে দেখা যায় না; এটি এক্সিকিউট হয়। এটি একটি Cross-Site Scripting (XSS) দুর্বলতা, আর এটি হাতে-লেখা WordPress থিমে একক সবচেয়ে সাধারণ নিরাপত্তা সমস্যা।
Escaping একটি মানকে এমন একটি রূপে রূপান্তর করে যা একটি নির্দিষ্ট প্রসঙ্গে দেখানোর জন্য সবসময় নিরাপদ — কোন ফাংশন ব্যবহার করবেন তা সম্পূর্ণভাবে নির্ভর করে মানটি কোথায় যাচ্ছে তার উপর:
| ফাংশন | যার জন্য ব্যবহার |
|---|---|
esc_html() | HTML ট্যাগের মাঝে সাধারণ টেক্সট — <p><?php echo esc_html( $x ); ?></p> |
esc_attr() | একটি HTML অ্যাট্রিবিউটের ভেতরে একটি মান — alt="<?php echo esc_attr( $x ); ?>" |
esc_url() | একটি URL, একটি href বা src-তে |
wp_kses_post() | কিছু HTML থাকার অনুমতি আছে এমন কন্টেন্ট (bold, লিংক, ইত্যাদি) — the_content()-এর মতো রিচ কন্টেন্টের জন্য ব্যবহৃত, যা এটি ইতিমধ্যে অভ্যন্তরীণভাবে সামলায় |
<a href="<?php echo esc_url( $link ); ?>" title="<?php echo esc_attr( $title ); ?>">
<?php echo esc_html( $label ); ?>
</a>এটাই শুরু থেকে প্যাটার্ন ছিল
এই ফাংশনগুলোর প্রতিটি এই সম্পূর্ণ অংশ জুড়ে প্রতিটি কোড উদাহরণে সঠিকভাবে ব্যবহার হয়েছে, ইচ্ছাকৃতভাবে — এটি মাথায় রেখে যেকোনোটি আবার দেখুন, আর প্যাটার্নটি (সবকিছু escape করুন, প্রসঙ্গ অনুযায়ী ফাংশন বেছে নিন) ইতিমধ্যে সেখানে, ডজন ডজন বার পুনরাবৃত্ত।
একটি সাধারণ ব্যতিক্রম: এমন মান যা আপনার নিজের কোড থেকে এসেছে, কোনো ধরনের ইনপুট থেকে কখনোই নয় — একটি হার্ডকোড করা string, count() থেকে একটি সংখ্যা। এগুলো escape করা ভুল নয়, শুধু অপ্রয়োজনীয়। একটি মান কোথা থেকে এসেছে তা নিয়ে সন্দেহ থাকলে, এটি escape করুন; একটি অপ্রয়োজনীয় esc_html() কলের খরচ কিছুই না, আর আসল ইউজার ইনপুটে একটি অনুপস্থিত কলের খরচ একটি নিরাপত্তা বাগ।
আউটপুট সুরক্ষিত হয়ে যাওয়ার পর, পরের পাঠ কয়েকটি ছোট, সত্যিই কাজের functions.php ইউটিলিটি সংগ্রহ করে যা প্রায় প্রতিটি আসল থিম বিল্ডে আসে।