PHP बग्स #२१ ते #३०: सामान्य चुका
PHP तुम्हाला कोणतीही चेतावणी न देता चुका करण्याची परवानगी देते. अनेकदा गोष्टी अयशस्वी होऊनही ते चालू राहते. यामुळे डेटाचे छुपे नुकसान (silent data corruption) किंवा सुरक्षा त्रुटी (security holes) निर्माण होऊ शकतात.
टाळण्यासारखे १० महत्त्वाचे बग्स खालीलप्रमाणे आहेत:
Multibyte Text
strlen()हे बाइट्स मोजते, अक्षरे नाही. यामुळे हिंदी किंवा इमोजी मजकूर खराब होऊ शकतो. त्याऐवजीmb_strlen()वापरा.Unvalidated API Calls
file_get_contents()शांतपणे (silently) अयशस्वी होऊ शकते.json_decode()हेnullपरत करू शकते. प्रतिसाद (response)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 प्रॉपर्टीज क्लासच्या असतात, ऑब्जेक्टच्या नाही. प्रत्येक इन्स्टन्स (instance) तोच डेटा शेअर करतो. वापरकर्त्याशी संबंधित डेटासाठी नियमित public प्रॉपर्टीज वापरा.
Redirects Without Exit
header("Location: ...")फक्त ब्राउझरला सूचना पाठवते. सर्व्हर स्क्रिप्ट चालवणे सुरूच ठेवतो. रिडायरेक्ट (redirect) केल्यानंतर नेहमीexit()कॉल करा.SQL Injection क्वेरी स्ट्रिंग्समध्ये थेट व्हेरिएबल्स वापरल्यामुळे हॅकर्स तुमच्या डेटाबेसवर नियंत्रण मिळवू शकतात. PDO सोबत prepared statements वापरा.
Memory Crashes
file_get_contents()संपूर्ण फाईल्स RAM मध्ये लोड करते. मोठ्या फाईल्समुळे यामुळे तुमचा सर्व्हर क्रॅश होऊ शकतो. फाईल्स ओळीने (line by line) वाचण्यासाठीfopen()आणिfgets()वापरा.Silent Database Errors PDO बाय डीफॉल्ट शांत राहते. त्रुटी (errors) एक्सेप्शन्स (exceptions) टाकण्याऐवजी
falseपरत करतात.PDO::ATTR_ERRMODEहेPDO::ERRMODE_EXCEPTIONवर सेट करा.
उपाय सोपा आहे: स्पष्ट राहा. प्रत्येक रिटर्न व्हॅल्यू तपासा. प्रत्येक इनपुट व्हॅलिडेट करा. एखादे फंक्शन काम केलेच असे कधीही गृहीत धरू नका.