PHP বাগ #২১ থেকে #৩০: সাধারণ ভুলসমূহ
PHP আপনাকে কোনো সতর্কতা ছাড়াই ভুল করার সুযোগ দেয়। কোনো কিছু ব্যর্থ হলেও এটি প্রায়শই চলতে থাকে। এর ফলে নিঃশব্দে ডেটা নষ্ট হওয়া (data corruption) বা সিকিউরিটি হোল তৈরি হতে পারে।
এখানে এড়ানোর মতো ১০টি গুরুত্বপূর্ণ বাগ দেওয়া হলো:
Multibyte Text
strlen()বাইট গণনা করে, ক্যারেক্টার নয়। এটি হিন্দি বা ইমোজি টেক্সটকে নষ্ট করে দেয়। এর পরিবর্তেmb_strlen()ব্যবহার করুন।Unvalidated API Calls
file_get_contents()নিঃশব্দে ব্যর্থ হতে পারে।json_decode()nullরিটার্ন করতে পারে। সবসময় চেক করুন রেসপন্সটিfalseকি না এবংjson_last_error()যাচাই করুন।Temporary Cookies এক্সপায়ারি ডেট ছাড়া
setcookie()ব্যবহার করলে ব্রাউজার বন্ধ করার সাথে সাথে কুকিটি মুছে যায়। একটি এক্সপায়ারি টাইম সেট করুন এবং XSS অ্যাটাক প্রতিরোধ করতেhttponlyফ্ল্যাগ ব্যবহার করুন।Unsafe File Uploads শুধুমাত্র ফাইলের এক্সটেনশন চেক করা যথেষ্ট নয়। হ্যাকাররা
shell.phpফাইলটির নাম পরিবর্তন করেshell.jpgকরে দিতে পারে। প্রকৃত MIME টাইপ চেক করতেfinfo_file()ব্যবহার করুন।Math with Formatted Strings PHP কমা (comma) দেখলে সংখ্যা পড়া বন্ধ করে দেয়। ফলে "1,299.00" হয়ে যায় 1। গণনা করার আগে
str_replace()দিয়ে কমা সরিয়ে ফেলুন। আপনার ডেটাবেসে র (raw) নম্বর সংরক্ষণ করুন।Shared Static Properties Static properties ক্লাসের অন্তর্ভুক্ত, অবজেক্টের নয়। প্রতিটি ইনস্ট্যান্স একই ডেটা শেয়ার করে। ইউজার-নির্দিষ্ট ডেটার জন্য সাধারণ public properties ব্যবহার করুন।
Redirects Without Exit
header("Location: ...")শুধুমাত্র ব্রাউজারকে একটি নির্দেশ পাঠায়। সার্ভার স্ক্রিপ্টটি চালানো চালিয়ে যায়। রিডাইরেক্ট করার পর সবসময়exit()কল করুন।SQL Injection কোয়েরি স্ট্রিং-এ সরাসরি ভেরিয়েবল ব্যবহার করলে হ্যাকাররা আপনার ডেটাবেস নিয়ন্ত্রণ করতে পারে। PDO-এর সাথে prepared statements ব্যবহার করুন।
Memory Crashes
file_get_contents()পুরো ফাইলটি RAM-এ লোড করে। বড় ফাইলের ক্ষেত্রে এটি আপনার সার্ভার ক্র্যাশ করতে পারে। ফাইল লাইন বাই লাইন পড়ার জন্যfopen()এবংfgets()ব্যবহার করুন।Silent Database Errors ডিফল্টভাবে PDO নীরব থাকে। এররগুলো exception থ্রো করার পরিবর্তে
falseরিটার্ন করে।PDO::ATTR_ERRMODEকেPDO::ERRMODE_EXCEPTIONহিসেবে সেট করুন।
সমাধানটি সহজ: সুনির্দিষ্ট হোন। প্রতিটি রিটার্ন ভ্যালু চেক করুন। প্রতিটি ইনপুট যাচাই করুন। কোনো ফাংশন কাজ করেছে বলে কখনোই ধরে নেবেন না।
সম্পূর্ণ নিবন্ধ: https://dev.to/bikkisingh/php-bugs-21-to-30-common-mistakes-every-php-developer-must-knowpublished-5hbp