উত্তরায় একটা রিয়েল এস্টেট কোম্পানির ওয়ার্ডপ্রেস সাইট। এক ক্লায়েন্ট ফোন করে বললেন, 'আপনাদের সাইটে ঢুকলাম, দুই সেকেন্ড পর কোন এক জুয়ার সাইটে নিয়ে গেল।' কোম্পানির ম্যানেজার নিজের ল্যাপটপে খুলে দেখলেন — সব ঠিক আছে। ফোনে খুললেন — তা-ও ঠিক আছে। তিনি ধরে নিলেন ক্লায়েন্টের ফোনেই কোনো সমস্যা।
সমস্যা ক্লায়েন্টের ফোনে ছিল না। ম্যালওয়্যারটা চালাক ছিল। সেটা রিডাইরেক্ট করত শুধু তখনই, যখন ভিজিটর মোবাইলে, গুগল সার্চ থেকে এসেছেন, এবং আগে কখনো সাইটটায় আসেননি। ম্যানেজার যেহেতু সরাসরি URL লিখে ঢোকেন আর অ্যাডমিন হিসেবে লগইন করা থাকেন, তিনি কোনোদিনই ওটা দেখতেন না। দুই সপ্তাহ পর যখন Search Console-এ 'Deceptive site ahead' সতর্কবার্তা এলো আর অর্গানিক ট্রাফিক ৮০ শতাংশ পড়ে গেল, তখন টের পাওয়া গেল।
উৎস খুঁজে পাওয়া গেল wp-content/plugins-এর ভেতরে — একটা স্লাইডার প্লাগইন, যেটা সাইট বানানোর সময় ডেভেলপার একটা ফেসবুক গ্রুপ থেকে নামিয়েছিলেন। প্লাগইনটার আসল দাম ছিল ৩৯ ডলার। গ্রুপে ওটা 'ফ্রি প্রিমিয়াম' নামে পাওয়া গিয়েছিল, ZIP ফাইল হিসেবে, গুগল ড্রাইভ লিংকে। ডেভেলপার ভেবেছিলেন ক্লায়েন্টের সাড়ে চার হাজার টাকা বাঁচিয়ে দিলেন।
প্লাগইন জিনিসটা আসলে কী
এখানে একটা বড় ভুল ধারণা ঠিক করা দরকার। আমরা অনেকেই ভাবি প্লাগইন হলো মোবাইল অ্যাপের মতো কিছু — আলাদা একটা বাক্সে বন্দী, নিজের কাজটুকু করে চুপচাপ বসে থাকে। ওয়ার্ডপ্রেসে ব্যাপারটা মোটেও তা নয়। প্লাগইন হলো কতগুলো PHP ফাইল, যেগুলো ওয়ার্ডপ্রেস প্রতিটা রিকোয়েস্টে নিজের কোডের সঙ্গেই লোড করে নেয়, আর সেগুলো চলে ওয়ার্ডপ্রেসের সমান ক্ষমতা নিয়ে।
সমান ক্ষমতা মানে ঠিক কী? মানে একটা প্লাগইন চাইলে ডাটাবেসের যেকোনো টেবিল পড়তে ও লিখতে পারে — শুধু নিজের নয়, WooCommerce-এর অর্ডার টেবিলও। নতুন অ্যাডমিন ইউজার বানাতে পারে। সার্ভারে ফাইল লিখতে পারে। বাইরের যেকোনো সার্ভারে HTTP রিকোয়েস্ট পাঠাতে পারে — অর্থাৎ আপনার ডেটা বাইরে পাঠাতেও পারে। ব্যাকগ্রাউন্ডে ক্রন জব চালাতে পারে, নতুন REST API এন্ডপয়েন্ট খুলতে পারে, আর সাইটের যেকোনো আউটপুট পাল্টে দিতে পারে। ওয়ার্ডপ্রেস প্লাগইনকে কোনো স্যান্ডবক্সে আটকায় না, কোনো পারমিশন জিজ্ঞেস করে না।
আর একটা জিনিস আছে যেটা প্রায় কেউ জানে না: প্রতিটা প্রিমিয়াম প্লাগইন নিজেই ওয়ার্ডপ্রেসকে বলে দেয় সে কোথা থেকে আপডেট আনবে। WordPress.org-এর বাইরের প্লাগইনের আপডেট ওয়ার্ডপ্রেস আনে প্লাগইনের নিজের বলে দেওয়া সার্ভার থেকে। এখন ভাবুন, ক্র্যাক করা কপিতে ওই ঠিকানাটা কে বসিয়ে দিয়েছে। আজ প্লাগইনটা নিরীহ থাকলেও, তিন মাস পর একটা 'আপডেট' এসে আপনার সাইটে যা খুশি বসিয়ে দিতে পারে — এবং সেটা আসবে ওয়ার্ডপ্রেসের নিজের আপডেট বোতামের মধ্য দিয়েই।
প্লাগইন ইনস্টল করা মানে একটা সফটওয়্যার কেনা নয়। এটা কাউকে আপনার সাইটের চাবি দিয়ে বলা — 'তুমি যখন খুশি ঢুকতে পারো, আর দরকার হলে চাবিটা বদলেও নিতে পারো।'
'ফ্রি প্রিমিয়াম' প্লাগইন কেন আসলে সবচেয়ে দামি
এখানে একটা যুক্তি প্রায়ই শুনি: 'ওয়ার্ডপ্রেসের সব কোড তো GPL লাইসেন্সে, তাই বিলিয়ে দেওয়া বেআইনি না।' কথাটা আইনগতভাবে অনেকটাই ঠিক, আর সৎভাবে চলা কিছু GPL ক্লাব সত্যিই আছে। কিন্তু ফেসবুক গ্রুপে বা টেলিগ্রামে যে ZIP ফাইলটা ঘোরে, সেটা GPL বিতরণ নয় — সেটা 'nulled', অর্থাৎ কেউ কোড খুলে লাইসেন্স চেক করার অংশটা কেটে দিয়েছে।
প্রশ্নটা এখানেই। যে মানুষটা প্লাগইনের কোড খুলে ঘণ্টার পর ঘণ্টা কাটাছেঁড়া করে লাইসেন্স চেক সরালো, তারপর নিজের পয়সায় হোস্ট করে আপনাকে বিনামূল্যে দিল — সে এই খাটুনিটা কেন করল? মানবসেবার জন্য নয়। সে কোডের ভেতরে ছিল, তার সব ক্ষমতা ছিল, আর তার কোনো কারণ ছিল না ভদ্র থাকার। বেশিরভাগ ক্ষেত্রে লাইসেন্স চেকের সঙ্গে আরও একটা জিনিস যোগ হয়ে ফেরত আসে — এনকোড করা কয়েক লাইন কোড, যেটা পরে একটা লুকানো অ্যাডমিন ইউজার বানায়, স্প্যাম পেজ ঢোকায়, কিংবা ওই রিয়েল এস্টেট সাইটের মতো নিঃশব্দে ভিজিটর সরিয়ে নিয়ে যায়।
হিসাবটা মিলিয়ে দেখুন। প্লাগইনের লাইসেন্স বছরে সাড়ে চার হাজার টাকা। আর সংক্রমণের পর যা লাগল: ম্যালওয়্যার ক্লিনআপ, প্রতিটা প্লাগইন ও থিম ফাইল যাচাই, সব পাসওয়ার্ড বদল, Google Search Console-এ রিভিউ রিকোয়েস্ট দিয়ে ব্ল্যাকলিস্ট থেকে বেরোনোর অপেক্ষা, আর তারপর হারানো র্যাঙ্কিং ফিরে পেতে তিন-চার মাস। সাড়ে চার হাজার টাকা বাঁচাতে গিয়ে কয়েক লাখ টাকার লিড হারানো — এটাই আসল দাম।
ইনস্টলের আগে যে ছয়টা সংকেত দেখে নেবেন
WordPress.org-এ যেকোনো প্লাগইনের পাতায় দরকারি প্রায় সব তথ্যই খোলা থাকে, শুধু কেউ পড়ে না। তিন মিনিট সময় দিন:
- শেষ আপডেট কবে। ছয় মাসের বেশি হলে সতর্ক হোন, এক বছরের বেশি হলে বাদ দিন। অব্যবহৃত মানে 'স্থিতিশীল' নয়, অব্যবহৃত মানে পরিত্যক্ত — আগামী বছর এতে যে দুর্বলতা ধরা পড়বে, তার প্যাচ কেউ দেবে না।
- 'Tested up to' কোন ভার্সন। এটা যদি ওয়ার্ডপ্রেসের বর্তমান ভার্সনের চেয়ে দুই-তিন ধাপ পেছনে থাকে, ডেভেলপার আর নজর রাখছেন না।
- সাপোর্ট ফোরামের অবস্থা। পাতার ডানদিকে 'Support' ট্যাবে দেখুন গত দুই মাসে কয়টা থ্রেড খোলা হয়েছে আর কয়টার সমাধান হয়েছে। বিশটার মধ্যে দুটো সমাধান মানে ডেভেলপার আর আসেন না।
- চেঞ্জলগ কেমন। নিয়মিত ছোট ছোট রিলিজ (মাসে এক-দুবার) ভালো লক্ষণ। দুই বছরে একটা রিলিজ খারাপ লক্ষণ, আর ছয় মাস চুপ থেকে হঠাৎ একটা বিশাল রিলিজ তার চেয়েও খারাপ।
- পেছনে কে আছে। ডেভেলপারের প্রোফাইলে ক্লিক করুন। এটা কি একটা কোম্পানি, নাকি একজন মানুষ? ওই একই মানুষের আর কয়টা প্লাগইন আছে, আর সেগুলোর শেষ আপডেট কবে? সবগুলোই যদি দুই বছর ধরে চুপ, তাহলে এটাও তা-ই হবে।
- এক তারার রিভিউগুলো আগে পড়ুন। পাঁচ তারার রিভিউ কিছুই বলে না — ওগুলো লেখা হয় ইনস্টলের প্রথম দিনে, উৎসাহের ঝোঁকে। এক তারার রিভিউ লেখা হয় ছয় মাস পর, যখন কিছু একটা ভেঙেছে। আপনি ঠিক ওই তথ্যটাই খুঁজছেন।
প্লাগইন হাতবদল হয়, আর আপনি টেরও পান না
এটা ওয়ার্ডপ্রেস দুনিয়ার একটা কম আলোচিত বাস্তবতা। একজন ডেভেলপার বছরের পর বছর একটা ভালো ফ্রি প্লাগইন মেইনটেইন করেন, লাখখানেক সাইটে সেটা চলে, তারপর তিনি ক্লান্ত হয়ে পড়েন এবং প্লাগইনটা বিক্রি করে দেন। নতুন মালিক কে, সেটা কেউ জানে না। পরের আপডেটে হয়তো ট্র্যাকিং কোড ঢোকে, কিংবা অ্যাডমিন প্যানেল বিজ্ঞাপনে ভরে যায় — আর খারাপ ক্ষেত্রে আরও অনেক কিছু। আর গোটা ব্যাপারটা আপনার সাইটে পৌঁছে যায় নিয়মিত অটো-আপডেটের মধ্য দিয়ে, কোনো প্রশ্ন ছাড়াই।
ঠেকানোর উপায় নিখুঁত কিছু নয়, তবে সহজ: যে প্লাগইনগুলো আপনার সাইটে সত্যিকারের ক্ষমতা রাখে (পেমেন্ট, ফর্ম, সিকিউরিটি, ইউজার ম্যানেজমেন্ট), সেগুলোর চেঞ্জলগ আপডেটের আগে একবার চোখ বুলিয়ে নিন। একটা পরিচিত প্লাগইন হঠাৎ চরিত্র বদলাচ্ছে কি না — নতুন 'analytics' ফিচার, হঠাৎ বাইরের সার্ভারে কল, ডেভেলপারের নাম বদলে যাওয়া — এই লক্ষণগুলো চেঞ্জলগেই ধরা পড়ে।
যখন সাইট সাদা হয়ে যায়: 'There has been a critical error'
আরেকটা খুব চেনা দৃশ্য, আর এটা ম্যালওয়্যার নয় — নিছক অসামঞ্জস্য। হোস্টিং কোম্পানি সার্ভারের PHP ভার্সন ৭.৪ থেকে ৮.২-এ তুলল, আর আপনার একটা পুরোনো প্লাগইন এমন একটা ফাংশন ব্যবহার করছে যেটা PHP ৮-এ আর নেই। সাইট সাদা, অ্যাডমিন প্যানেলেও ঢোকা যাচ্ছে না।
আতঙ্কিত হওয়ার দরকার নেই, ধাপগুলো সোজা। প্রথমে wp-config.php ফাইলে WP_DEBUG আর WP_DEBUG_LOG চালু করুন — তাহলে wp-content/debug.log ফাইলে পরিষ্কার লেখা থাকবে কোন ফাইলের কোন লাইনে সমস্যা, অর্থাৎ কোন প্লাগইনটা দোষী। ড্যাশবোর্ডে ঢুকতে না পারলেও অসুবিধা নেই: cPanel-এর File Manager বা FTP দিয়ে wp-content/plugins/ ফোল্ডারে গিয়ে ওই প্লাগইনের ফোল্ডারের নামটা বদলে দিন (যেমন শেষে -off জুড়ে দিন)। ওয়ার্ডপ্রেস প্লাগইনটা খুঁজে না পেয়ে নিজে থেকেই সেটা নিষ্ক্রিয় করে দেবে, আর সাইট ফিরে আসবে। এরপর WP Rollback প্লাগইন দিয়ে আগের কাজ করা ভার্সনে ফিরে যেতে পারেন, কিংবা প্লাগইনটার আধুনিক বিকল্প খুঁজতে পারেন।
ডিলিট করলেও প্লাগইনের ডেটা থেকে যায়
এটা অনেকের কাছে অপ্রত্যাশিত। প্লাগইন ডিলিট করলে তার PHP ফাইলগুলো মুছে যায়, কিন্তু সে ডাটাবেসে যা রেখে গেছে সেটা বেশিরভাগ ক্ষেত্রেই থেকে যায় — নিজের বানানো টেবিল, আর wp_options-এ রেখে যাওয়া সেটিংস। কারণ ওয়ার্ডপ্রেস প্লাগইনকে গুছিয়ে বিদায় নিতে বাধ্য করে না, আর বেশিরভাগ প্লাগইন ইচ্ছে করেই ডেটা রেখে যায় (যদি আপনি আবার ইনস্টল করেন, এই যুক্তিতে)। ফলে দুই বছর আগে মুছে ফেলা একটা প্লাগইনের সেটিংস আজও প্রতিটা পেজ লোডে মেমরিতে উঠছে। phpMyAdmin-এ মাঝেমধ্যে উঁকি দিন — অচেনা প্রিফিক্সের টেবিল চোখে পড়লে বুঝবেন সেটা কোনো প্লাগইনের ভূত।
প্লাগইন নিয়ে চারটা অস্বস্তিকর প্রশ্ন
WordPress.org-এর প্লাগইনগুলো কি যাচাই করা? জমা দেওয়ার সময় একবার রিভিউ হয়, কিন্তু তারপর প্রতিটা আপডেট আর মানুষ দেখে না। তাই ওখানকার প্লাগইনেও নিরাপত্তা দুর্বলতা পাওয়া যায়, এমনকি লাখ লাখ ইনস্টল থাকা জনপ্রিয় প্লাগইনেও। পার্থক্যটা হলো, ওখানে দুর্বলতা ধরা পড়লে সেটা প্রকাশ্যে আসে এবং সাধারণত দ্রুত প্যাচ হয় — nulled কপিতে কেউ কিছু বলেও না, প্যাচও করে না।
থিমের সঙ্গে আসা বান্ডেল প্লাগইনগুলো আপডেট চায় না কেন? কারণ সেগুলো WordPress.org থেকে আসেনি, এসেছে থিমের ভেতরে ঢোকানো অবস্থায়। ওগুলোর আপডেট আসে থিমের আপডেটের সঙ্গে — আর থিম ডেভেলপার যদি অলস হন, আপনি বছরের পর বছর একটা পুরোনো, দুর্বল ভার্সন চালিয়ে যাবেন, বুঝতেও পারবেন না। থিম কেনার আগে দেখে নিন সে কী কী বান্ডেল করছে, আর সেই থিম কত ঘন ঘন আপডেট হয়।
সাইট হ্যাক হয়ে গেলে প্রথমেই কী করব? ব্যাকআপ থেকে রিস্টোর করাটা প্রথম কাজ নয় — কারণ ব্যাকআপেও সংক্রমণ থাকতে পারে, আর যে ফাঁক দিয়ে ঢুকেছিল সেটা তো খোলাই থাকল। ক্রমটা এরকম: সাইট মেইনটেন্যান্স মোডে নিন, সব পাসওয়ার্ড (অ্যাডমিন, FTP, cPanel, ডাটাবেস) বদলান, wp_users টেবিলে অচেনা অ্যাডমিন আছে কি না দেখুন, দুর্বল প্লাগইনটা খুঁজে বের করে সরান বা আপডেট করুন, তারপর পরিষ্কার ব্যাকআপ থেকে ফেরান। শেষে Search Console-এ রিভিউ চান।
লাইসেন্স কেনার বাজেট নেই, তাহলে উপায়? ফ্রি মানেই অনিরাপদ নয় — WordPress.org-এ ভালোভাবে মেইনটেইন করা অসংখ্য ফ্রি প্লাগইন আছে, আর প্রিমিয়ামের ফ্রি ভার্সনও সাধারণত পুরোপুরি কার্যকর। বাজেট না থাকলে ফিচার কমান, ফ্রি বিকল্প নিন, দরকার হলে কাজটা সাধারণ কোডে করুন। যেটা করবেন না সেটা হলো ক্র্যাক করা কপি বসানো — ওটা টাকা বাঁচানো নয়, ধার করা।
ইনস্টলের আগে ও পরে
- প্লাগইনটা WordPress.org বা সরাসরি ডেভেলপারের সাইট থেকে নামানো — ফেসবুক গ্রুপ বা ড্রাইভ লিংক থেকে নয়
- শেষ আপডেট ছয় মাসের ভেতরে, আর 'Tested up to' বর্তমান ওয়ার্ডপ্রেস ভার্সনের কাছাকাছি
- সাপোর্ট ফোরামে ডেভেলপার এখনো উত্তর দিচ্ছেন
- এক তারার রিভিউগুলো পড়া হয়েছে
- যে প্লাগইন টাকা বা ইউজার ডেটা ছোঁয়, তার লাইসেন্স কেনা আছে
- বড় আপডেটের আগে ব্যাকআপ, আর সম্ভব হলে স্টেজিংয়ে পরীক্ষা
- অব্যবহৃত প্লাগইন ডিলিট করা, আর তার রেখে যাওয়া টেবিল-অপশনও পরিষ্কার
ওই রিয়েল এস্টেট সাইট পরিষ্কার হতে চার দিন লেগেছিল, আর গুগলের সতর্কবার্তা উঠতে আরও নয় দিন। ট্রাফিক আগের জায়গায় ফিরতে লেগেছিল প্রায় পাঁচ মাস। যে স্লাইডার প্লাগইনটার লাইসেন্স কেনা হয়নি, সেটার দাম ছিল সাড়ে চার হাজার টাকা। Stack Alix-এ আমরা ওয়ার্ডপ্রেস সাইট পরিষ্কার করি, প্লাগইন ও থিমের নিরাপত্তা অডিট করি, আর সাইট হস্তান্তরের আগে দেখে দিই কোথায় কী লুকিয়ে আছে। আপনার সাইট নিয়ে সন্দেহ হলে বা কেউ অদ্ভুত কিছু রিপোর্ট করলে দেরি করবেন না — এই সমস্যাগুলো সময়ের সঙ্গে সস্তা হয় না, শুধু দামি হয়।

