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. Tumia mb_strlen() badala yake.

  • Maombi ya API Yasiyothibitishwa file_get_contents() inaweza kufeli bila kutoa taarifa. json_decode() inaweza kurudisha null. Daima kagua ikiwa jibu ni false na thibitisha json_last_error().

  • Kuki za Muda setcookie() bila tarehe ya mwisho huondoa kuki wakati kivinjari kinapofungwa. Weka muda wa mwisho na utumie bendera ya httponly kuzuia mashambulizi ya XSS.

  • Upakiaji wa Faili Usio Salama Kukagua viambishi (extensions) vya faili haitoshi. Wadukuzi huubadilisha jina shell.php kuwa shell.jpg. Tumia finfo_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 ite exit() 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. Tumia fopen() na fgets() kusoma faili mstari kwa mstari.

  • Makosa ya Hifadhidata Yasiyoonekana PDO inakaa kimya kwa kawaida. Makosa hurudisha false badala ya kurusha (throw) exceptions. Weka PDO::ATTR_ERRMODE kuwa PDO::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