PHP Bugs #21 hadi #30: Makosa ya Kawaida
PHP inakuruhusu kufanya makosa bila onyo. Mara nyingi inaendelea kufanya kazi hata pale mambo yanapofeli. Hii husababisha uharibifu wa data usioonekana au mianya ya kiusalama.
Hapa kuna makosa (bugs) 10 muhimu ya kuepuka:
Maandishi ya Multibyte
strlen()huhesabu byte, siyo herufi. Hii huharibu maandishi ya Kihindi au emoji. Tumiamb_strlen()badala yake.Maombi ya API Yasiyothibitishwa
file_get_contents()inaweza kufeli bila kutoa taarifa.json_decode()inaweza kurudishanull. Daima kagua ikiwa jibu nifalsena thibitishajson_last_error().Kuki za Muda
setcookie()bila tarehe ya mwisho huondoa kuki wakati kivinjari kinapofungwa. Weka muda wa mwisho na utumie bendera yahttponlykuzuia mashambulizi ya XSS.Upakiaji wa Faili Usio Salama Kukagua viambishi (extensions) vya faili haitoshi. Wadukuzi huubadilisha jina
shell.phpkuwashell.jpg. Tumiafinfo_file()kukagua aina halisi ya MIME.Hesabu kwa Kutumia Maandishi Yaliyopangwa PHP huacha kusoma namba kwenye mkato (comma). "1,299.00" inakuwa 1. Ondoa mikato kwa kutumia
str_replace()kabla ya kufanya hesabu. Hifadhi namba ghafi (raw numbers) kwenye hifadhidata yako.Sifa za Kistatiki Zinazoshirikiwa Sifa za kistatiki (static properties) ni za darasa (class), siyo ya kitu (object). Kila nakala (instance) inashiriki data ile ile. Tumia sifa za kawaida za umma (public properties) kwa data maalum za mtumiaji.
Uhamishaji (Redirects) Bila Exit
header("Location: ...")hutuma maelekezo tu kwenye kivinjari. Seva inaendelea kuendesha skripti. Daima iteexit()baada ya uhamishaji.SQL Injection Kuweka vigezo (variables) moja kwa moja kwenye maandishi ya hoja (query strings) kunaruhusu wadukuzi kudhibiti hifadhidata yako. Tumia prepared statements kwa kutumia PDO.
Mishituko ya Kumbukumbu (Memory Crashes)
file_get_contents()hupakia faili nzima kwenye RAM. Hii husababisha seva yako kuzima (crash) unapotumia faili kubwa. Tumiafopen()nafgets()kusoma faili mstari kwa mstari.Makosa ya Hifadhidata Yasiyoonekana PDO inakaa kimya kwa kawaida. Makosa hurudisha
falsebadala ya kurusha (throw) exceptions. WekaPDO::ATTR_ERRMODEkuwaPDO::ERRMODE_EXCEPTION.
Suluhisho ni rahisi: kuwa wazi. Kagua kila thamani inayorudishwa. Thibitisha kila ingizo. Usichukulie kamwe kuwa kazi (function) imefanya kazi.
Makala kamili: https://dev.to/bikkisingh/php-bugs-21-to-30-common-mistakes-every-php-developer-must-knowpublished-5hbp