Sources បានពិនិត្យនៅថ្ងៃទី 22 ខែតុលា ឆ្នាំ 2026។ Audience: PHP ប្រតិបត្តិករកម្មវិធី អ្នកឆ្លើយតបសុវត្ថិភាព និងវិស្វករដែលរក្សា PHP builds.

អត្ថបទនេះសង្ខេបអំពីមូលហេតុ វិសាលភាពនៃផលប៉ះពាល់ ដំណើរការជួសជុលផ្លូវការ វិធានការកាត់បន្ថយបណ្តោះអាសន្ន និងការអនុវត្តបំណះផ្លូវការនៃភាពងាយរងគ្រោះ PHP2Shell ។ អត្ថបទចម្បងត្រូវបានដកស្រង់ដោយប្រើលេខដូចជា S1; តំណប្រភពទាំងអស់ត្រូវបានរាយក្នុងឧបសម្ព័ន្ធនៅចុងបញ្ចប់នៃអត្ថបទ។ បំណែកនៃការកំណត់រចនាសម្ព័ន្ធគឺជាគំរូនៃការដាក់ពង្រាយ ដែលត្រូវការកែតម្រូវដោយផ្អែកលើកំណែជាក់ស្តែង សមត្ថភាពអាជីវកម្ម និងទំនាក់ទំនងមរតកនៃការកំណត់រចនាសម្ព័ន្ធ។

TL;DR៖ ជំហានជួសជុល និងសំណូមពរ

  1. ធ្វើឱ្យប្រសើរឡើង PHP ពេលដំណើរការ ៖ ធ្វើឱ្យប្រសើរឡើងនូវសាខាពាក់ព័ន្ធយ៉ាងហោចណាស់ 8.2.35 , 8.3.36 , 8.4.27 ឬ 8.5.12 . សម្រាប់កញ្ចប់ចែកចាយ សូមប្រើកំណែកញ្ចប់ពេញលេញដែលអ្នកលក់បញ្ជាក់ថាជួសជុល CVEs ទាំងពីរ។ S1 S10
  2. ជំនួសដំណើរការចាស់ទាំងអស់៖ ចាប់ផ្តើមឡើងវិញ ឬវិលជុំវិញរាល់ PHP worker សេវាបង្ហោះ និងកុងតឺន័របន្ទាប់ពីការអាប់ដេត ហើយបញ្ជាក់ថាវត្ថុចាស់ៗបានចាកចេញ។
  3. ផ្ទៀងផ្ទាត់តាមរយៈផ្លូវសំណើ Web ពិតប្រាកដ៖ ពិនិត្យមើល Web SAPI កំណែកញ្ចប់ពេញលេញ និងដំណើរការឧទាហរណ៍។ ការពិនិត្យមើល php -v តែម្នាក់ឯងមិនបញ្ជាក់ថាសេវាបន្តផ្ទាល់ត្រូវបានជួសជុលទេ។
  4. Run ត្រួតពិនិត្យការតំរែតំរង់អាជីវកម្ម និងស្ដារថវិកាធនធានធម្មតា៖ សាកល្បងការចូល ការគ្រប់គ្រងសម័យ ការបង្ហោះ ការនាំចូល និងការដោះស្រាយកំហុស។ ប្រសិនបើដែនកំណត់អង្គចងចាំ PHP ត្រូវបានដកចេញជាបណ្ដោះអាសន្ន សូមស្ដារថវិកាកំណត់សមស្របមួយឡើងវិញបន្ទាប់ពីការបំណះ។
  5. ប្រសិនបើការអាប់ដេតភ្លាមៗគឺមិនអាចទៅរួច៖ ដាក់កម្រិតចរាចរណ៍ដែលមិនគួរឱ្យទុកចិត្ត មុនពេលវាទៅដល់ PHP ។ វាយតម្លៃការបិទដំណើរការការអាប់ឡូត និងដានដ៏គ្រោះថ្នាក់ PHP 8.5 ដូចដែលបានពិពណ៌នានៅក្នុងផ្នែកទី 5។ ការបន្ធូរបន្ថយការកំណត់រចនាសម្ព័ន្ធ និងច្បាប់ WAF មានកម្រិតគ្របដណ្តប់ និងមិនអាចជំនួសការធ្វើឱ្យប្រសើរឡើងបានទេ។ S1S2S3

1. ទិដ្ឋភាពទូទៅនៃភាពងាយរងគ្រោះ និងការវិនិច្ឆ័យហានិភ័យ

PHP2Shell នៅក្នុងអត្ថបទនេះសំដៅទៅលើភាពងាយរងគ្រោះកម្រិត Critical ចំនួនពីរដែលត្រូវបានបង្ហាញជាផ្លូវការដោយ PHP កាលពីថ្ងៃទី 21 ខែតុលា ឆ្នាំ 2026។ ទាំងពីរនេះទាក់ទងទៅនឹងអង្គចងចាំ និងស្នើសុំការគ្រប់គ្រងវដ្តជីវិតរបស់ម៉ាស៊ីន PHP ដែលបង្កហានិភ័យនៃការកាត់កូដពីចម្ងាយ។ S1S2S3

គម្រោងCVE-2026-109618CVE-2026-109619
ឈ្មោះផ្លូវការRCE via OOM corruptionRCE via stale global state
បញ្ហាស្នូលការ​ចងចាំ​មិន​គ្រប់គ្រាន់​បណ្តាល​ឱ្យ​លោត​ខុស​ប្រក្រតី ដោយ​បន្សល់​ទុក​នូវ​ស្ថានភាព​ដែល​មិន​ទាន់​បញ្ចប់​ការ​ចាប់ផ្តើម។ស្ថានភាពសកលដែលនៅសេសសល់ក្នុងកម្មករចង្អុលទៅអង្គចងចាំសំណើដែលបានចេញផ្សាយ។
ពេលវេលាកើតឡើងធម្មតា។ការចាប់ផ្តើម ការប្រតិបត្តិ ឬដំណើរការសម្អាតនៃសំណើបច្ចុប្បន្នសំណើពីមុនទុកស្ថានភាព ហើយសំណើបន្តបន្ទាប់ប្រើប្រាស់វាជាមុន។
តើ OOM ជាលក្ខខណ្ឌចាំបាច់មែនទេ?ជាកម្មសិទ្ធិរបស់យន្តការកេះស្នូលនៃភាពងាយរងគ្រោះទេ កំហុសធ្ងន់ធ្ងរផ្សេងទៀត និងការសម្អាតក្រោយការធ្វើរោគវិនិច្ឆ័យក៏អាចពាក់ព័ន្ធផងដែរ។
ទិសដៅជួសជុលមូលដ្ឋានដោះស្រាយការបរាជ័យក្នុងការបែងចែក និងការស្នើសុំការបញ្ចប់ដោយសុវត្ថិភាពជួសជុលភាពជាម្ចាស់របស់រដ្ឋ ពេលវេលាសម្អាត និងការចាប់ផ្ដើមដំបូង
តម្រូវការការចោលត្រូវតែជួសជុលត្រូវតែជួសជុលក្នុងពេលតែមួយ

មូលដ្ឋាន៖ ព្រឹត្តិបត្រសុវត្ថិភាពផ្លូវការចំនួនពីរ និងជួសជុលការដាក់ស្នើ។ S2S3S4

1.1 ការយល់ដឹងអំពីការដាក់ពង្រាយដែលរងផលប៉ះពាល់

PHP ពិចារណាជាផ្លូវការ ទាំងអស់។ PHP ការគ្រប់គ្រងការដាក់ពង្រាយ Web សំណើ ហានិភ័យ រួមទាំង PHP-FPM , Apache mod_php , php-cgi , FrankenPHP , និង LiteSpeed . បានបង្ហាញ mod_php ការវាយប្រហារអាចកើតឡើងមុនពេលដំណើរការកូដកម្មវិធី ដូច្នេះការត្រួតពិនិត្យការចូល បណ្តាញកណ្តាលនៃក្របខ័ណ្ឌ និងសុពលភាពនៃការបង្ហោះកម្មវិធីមិនអាចគ្របដណ្តប់ផ្លូវនោះបានទេ។ S1

វាចាំបាច់ក្នុងការបែងចែករវាង “ការដាក់ពង្រាយត្រូវតែជួសជុល” និង “ខ្សែសង្វាក់ការវាយប្រហារជាក់លាក់មួយត្រូវបានបញ្ជាក់ទាំងស្រុង” ។ សេចក្តីប្រកាសរបស់ CVE-2026-109618៖ FPM នឹងចេញពីដំណើរការកុមារបន្ទាប់ពីការចាប់ផ្តើមសំណើរបរាជ័យ ដោយរារាំងផ្លូវសម្អាតដែលត្រូវគ្នានៃ mod_php បន្ទាប់ពីបរាជ័យនៃការចាប់ផ្តើម។ ទោះយ៉ាងណាក៏ដោយ ផ្លូវ OOM បន្ទាប់ពីការចាប់ផ្តើមជោគជ័យនៅតែមានហានិភ័យ។ សេចក្តីប្រកាសក៏បានកត់សម្គាល់ផងដែរថាការកេងប្រវ័ញ្ច FPM ពេញលេញសម្រាប់ CVE នេះមិនទាន់ត្រូវបានបង្ហាញនៅឡើយទេ។ ការរឹតបន្តឹងនេះមិនអាចប្រើដើម្បីសន្និដ្ឋានថា FPM មានសុវត្ថិភាពទេ ជាពិសេស CVE-2026-109619 មិនអាចមិនអើពើបានទេ។ S2S3

ព្រំដែននៃការអនុញ្ញាតភ្លាមៗសម្រាប់ការកេងប្រវ័ញ្ចដោយជោគជ័យអាស្រ័យលើអត្តសញ្ញាណនៃដំណើរការដែលបង្ហោះ PHP និងធនធានដែលវាមាន។ ជាទូទៅ ការយកចិត្តទុកដាក់គួរត្រូវបានបង់ទៅកូដគេហទំព័រ ថតផ្ទុកឡើង អត្តសញ្ញាណប័ណ្ណទិន្នន័យ សញ្ញាសម្ងាត់សេវាកម្ម និងសមត្ថភាពចូលប្រើបណ្តាញខាងក្នុង។ “ការប្រតិបត្តិលេខកូដពីចម្ងាយ” មិនមានន័យថាទទួលបានសិទ្ធិជា root ទេ។ ការវិនិច្ឆ័យលទ្ធផលនៅទីនេះគឺផ្អែកលើគំរូការអនុញ្ញាតដំណើរការ ហើយផលប៉ះពាល់ជាក់ស្តែងចាំបាច់ត្រូវវាយតម្លៃដោយភ្ជាប់ជាមួយការអនុញ្ញាតសម្រាប់ដាក់ពង្រាយ។

ស្គ្រីប CLI តែមួយដងធម្មតា មិនមានធាតុ HTTP ដូចគ្នាទេ។ ប៉ុន្តែដំណើរការដែលគ្រប់គ្រងកិច្ចការខាងក្រៅសម្រាប់រយៈពេលដ៏យូរនៅក្នុង CLI ឬរបៀបបង្កប់គួរតែនៅតែត្រូវបានបញ្ចូលក្នុងបញ្ជីសារពើភណ្ឌរយៈពេលដំណើរការ និងវដ្តជីវិត។ មានតែភាពអាស្រ័យ CMS ក្របខ័ណ្ឌ ឬ Composer ប៉ុណ្ណោះដែលត្រូវបានធ្វើបច្ចុប្បន្នភាព ហើយម៉ាស៊ីន PHP មូលដ្ឋានមិនត្រូវបានជំនួសដោយស្វ័យប្រវត្តិទេ។

2. ការវិភាគមូលហេតុ

2.1 ដំបូងយល់អំពីវដ្តជីវិតទាំងពីរ

PHP worker ជារឿយៗដោះស្រាយសំណើជាច្រើនជាបន្តបន្ទាប់។ អង្គចងចាំដែលបានបែងចែកកំឡុងពេលសំណើអាចត្រូវបានបញ្ចេញឱ្យស្មើគ្នានៅចុងបញ្ចប់នៃសំណើនេះ ខណៈពេលដែលកម្មករខ្លួនឯង និងផ្នែកសកលមួយចំនួនរបស់វានៅតែបន្តកើតមាន។

ដូច្នេះ​ម៉ាស៊ីន​ត្រូវ​រក្សា​នូវ​ឧបសគ្គ​ពីរ៖

  • កម្រិតចាប់ផ្ដើម៖ ទិន្នន័យដែលអាចមើលឃើញដោយលេខកូដផ្សេងទៀតត្រូវតែស្ថិតក្នុងស្ថានភាពដែលអាចអាន ឆ្លងកាត់ និងបំផ្លាញដោយសុវត្ថិភាព។
  • Lifecycle constraint៖ នៅពេលដែលការស្នើសុំអង្គចងចាំត្រូវបានដោះលែង វាលដែលរស់នៅបានយូរមិនត្រូវបន្តព្យាបាលអាសយដ្ឋាននៅក្នុងអង្គចងចាំនោះជាស្ថានភាពត្រឹមត្រូវនោះទេ។

ឧបសគ្គទាំងពីរនេះត្រូវគ្នាទៅនឹងរបៀបបរាជ័យចម្បងនៃក្រុមភាពងាយរងគ្រោះទាំងពីរ។ ដំណើរការខាងក្រោមគឺជាការពិពណ៌នាអំពីយន្តការដែលរួមបញ្ចូលការប្រកាស និងការចងក្រងបំណះ។ វាមិនមានន័យថា រាល់ការដាក់ពង្រាយមានផ្លូវដែលអាចទៅដល់បានដូចគ្នានោះទេ។ S2S3S5

2.2 CVE-2026-109618៖ OOM បានរំខានការអាប់ដេតស្ថានភាពដែលមិនទាន់បានបញ្ចប់

ការអនុវត្តចាស់ប្រើការលោតមិនមែនក្នុងស្រុកនៃប្រភេទ longjmp() ដើម្បីដោះស្រាយ OOM ហើយផ្លូវដែលពាក់ព័ន្ធនឹងចេញពីបរិបទប្រតិបត្តិបច្ចុប្បន្នតាមរយៈ zend_bailout() ។ គ្រោះថ្នាក់គឺថាបំណែកនៃលេខកូដ C ប្រហែលជាបានបោះពុម្ពវត្ថុថ្មី អារេ ឬស្ថានភាពស្នើសុំទៅកាន់កូដផ្សេងទៀត ប៉ុន្តែមិនទាន់បានបញ្ចប់ការចាប់ផ្ដើមវាលទាំងអស់នៅឡើយទេ។ នៅពេលនេះ ការបរាជ័យក្នុងការបែងចែកណាមួយនៅពេលពាក់ព័ន្ធអាចបណ្តាលឱ្យជំហានបិទធម្មតាត្រូវបានរំលង។ S2

ដំណើរការបរាជ័យអាចចែកចេញជាបួនជំហាន៖

  1. បង្កើត ឬធ្វើបច្ចុប្បន្នភាពរចនាសម្ព័ន្ធផ្ទៃក្នុងសំណើ និងធ្វើឱ្យវាអាចចូលដំណើរការបាន។
  2. ការបែងចែកអង្គចងចាំជាបន្តបន្ទាប់បរាជ័យ ហើយ OOM ត្រូវបានកេះ។
  3. លំហូរការប្រតិបត្តិលោតចេញពីមុខងារបច្ចុប្បន្ន ហើយកូដដែលប្រើដំបូងដើម្បីបញ្ចប់ការចាប់ផ្តើម ឬស្ដារស្ថានភាពមិនត្រូវបានប្រតិបត្តិទេ។
  4. សំណើសម្អាតបន្តដំណើរការរចនាសម្ព័ន្ធទាំងនេះ ហើយចាត់ទុកខ្លឹមសារមិនត្រឹមត្រូវជាវាល ឬអាសយដ្ឋានត្រឹមត្រូវ។

បញ្ហាគឺមិនមែនថាការអស់អង្គចងចាំតែងតែបណ្តាលឱ្យ RCE នោះទេ។ ផ្ទុយទៅវិញ ការហត់នឿយ memory ផ្លាស់ប្តូរលំហូរនៃការគ្រប់គ្រង និងរំលោភលើការសន្មត់របស់ម៉ាស៊ីនអំពីរចនាសម្ព័ន្ធត្រឹមត្រូវ ។ តម្រូវការការបែងចែកដែលបរាជ័យមិនជាប់ពាក់ព័ន្ធដោយផ្ទាល់នូវរចនាសម្ព័ន្ធដែលត្រូវបានអានមិនត្រឹមត្រូវ។ S2

ហេតុអ្វីបានជាសំណើតូចៗក៏អាចអស់អង្គចងចាំដែរ។

ចំនួនបៃនៅក្នុងតួសំណើ និងការប្រើប្រាស់ heap បន្ទាប់ពីការញែកគឺមិនដូចគ្នាទេ។ វាល A អាច​ត្រូវ​គ្នា​នឹង​ខ្សែ​ច្រើន ធាតុ​អារេ និង​វត្ថុ​ទិន្នន័យ​មេតា​នៅ​ក្នុង PHP; ភាពស្មុគស្មាញនៃរចនាសម្ព័ន្ធបញ្ចូលនឹងប៉ះពាល់ដល់កម្រិតនៃការពង្រីកអង្គចងចាំ។

បញ្ហាជាមួយពហុផ្នែកដែលបានរាយក្នុងសេចក្តីប្រកាសជាផ្លូវការរួមមានៈ គម្លាតពិនិត្យទំហំដំបូង នៅពេលដែលប្រវែងការប្រកាសដែលអាចប្រើបានត្រូវបានបាត់ ចំនួនបឋមកថាសម្រាប់ផ្នែកតែមួយមិនមានកម្រិតគ្រប់គ្រាន់ទេ ហើយការគ្រប់គ្រងឯកសារទទេនៅតែបង្កើតទិន្នន័យមេតា ដោយមានឈ្មោះដាក់បញ្ចូលបន្ថែមនូវបន្ទុកការងារអារេ។ ការដោះសោ ការឌិកូដ ឬការចាត់ចែងបញ្ចូលឡើងវិញរបស់កម្មវិធីក៏អាចជាប្រភពនៃ OOM ផងដែរ។ S2

ការសន្និដ្ឋានការពារពីរអាចត្រូវបានដកចេញពីនេះ:

  • សំណើររឹតបន្តឹងរាងកាយត្រូវតែអនុវត្តឱ្យបានច្រើនតាមតែអាចធ្វើទៅបាន មុនពេលបញ្ចូល PHP ហើយប្រវែងអានពិតប្រាកដ និងភាពស្មុគស្មាញនៃរចនាសម្ព័ន្ធត្រូវតែយកមកពិចារណា។
  • ការកំណត់ទំហំឯកសារ ចំនួនឯកសារ ឬបិទវិបផតថលបង្ហោះតែមួយមិនអាចគ្របដណ្តប់ប្រភព OOM ទាំងអស់បានទេ។

ហេតុអ្វីបានជាការផ្ទៀងផ្ទាត់កម្មវិធីអាចយឺតពេល

នៅក្នុង mod_php តួសំណើអាចត្រូវបានញែកដោយស្វ័យប្រវត្តិក្នុងអំឡុងពេលដំណាក់កាលចាប់ផ្តើមសំណើ។ ទោះបីជាការចាប់ផ្ដើមបរាជ័យក៏ដោយ ការសម្អាតសំណើដែលពាក់ព័ន្ធនឹងនៅតែត្រូវបានអនុវត្ត។ ដូច្នេះ​ផ្លូវ​វាយ​ប្រហារ​ដែល​បាន​បញ្ជាក់​អាច​កើត​ឡើង​មុន​នឹង​កូដ​កម្មវិធី។ ដើម្បីកាត់បន្ថយការប៉ះពាល់នៅដំណាក់កាលនេះ ការរឹតបន្តឹងចាំបាច់ត្រូវដាក់នៅប្រូកស៊ីបញ្ច្រាស ម៉ាស៊ីនមេ Web ឬព្រំដែនផ្សេងទៀតដែលមុនដំណើរការសំណើ PHP ។ S1S2

2.3 CVE-2026-109619៖ អង្គចងចាំសំណើត្រូវបានចេញផ្សាយ ឯកសារយោងសកលនៅតែមានជីវិត

បញ្ហានេះពាក់ព័ន្ធនឹងបញ្ហា សម័យ វត្ថុ ឬស្ថានភាពផ្នែកបន្ថែម៖ វាលត្រូវបានរក្សាទុកក្នុងទីតាំងចូលប្រើប្រាស់រយៈពេលវែងរបស់កម្មករ ប៉ុន្តែទិន្នន័យដែលយោងដោយវាលនេះជាកម្មសិទ្ធិរបស់សំណើតែមួយ។ ដរាបណាឯកសារយោងមិនត្រូវបានសម្អាតឲ្យបានត្រឹមត្រូវ មុនពេលដែលកញ្ចប់សំណើត្រូវបានចេញផ្សាយ សំណើជាបន្តបន្ទាប់អាចជួបប្រទះនឹងស្ថានភាព dangling បង្កើតជាការប្រើប្រាស់បន្ទាប់ពីឥតគិតថ្លៃ។ S3

ការវិភាគជាផ្លូវការបែងចែកលក្ខខណ្ឌនៃការកេងប្រវ័ញ្ចទៅជា “អ្នកផលិត” និង “អ្នកប្រើប្រាស់”៖

តួនាទី ឬលក្ខខណ្ឌអត្ថន័យផលប៉ះពាល់សម្រាប់ការការពារ
អ្នកផលិតរដ្ឋដាក់រដ្ឋដែលជាកម្មសិទ្ធិដោយសំណើនេះទៅក្នុងទីតាំងដែលនៅតែអាចចូលបាននៅពេលក្រោយដើម្បីពិនិត្យមើលថាតើការសម្អាតដែលត្រូវគ្នាត្រូវបានបញ្ចប់បន្ទាប់ពីការចេញក្រៅមិនប្រក្រតី
ស្ថានភាពនៅតែមានវា​មិន​ត្រូវ​បាន​ជម្រះ​ឬ​វា​ត្រូវ​បាន​ជម្រះ​ហើយ​បន្ទាប់​មក​បំពេញ​ដោយ​ប្រតិបត្តិការ​យឺត។គ្រាន់តែសម្អាតម្តងនៅដំណាក់កាលបិទមុនប្រហែលជាមិនគ្រប់គ្រាន់ទេ។
កម្មករប្រើឡើងវិញកម្មករដដែលបន្តដំណើរការសំណើជាបន្តបន្ទាប់បុគ្គលិកច្រើននាក់គ្រាន់តែជាភាពខុសគ្នានៃការកំណត់ពេល មិនមែនជាការធានាសុវត្ថិភាពនៃការចងចាំនោះទេ។
អតិថិជនជឿនលឿនអាន ចេញផ្សាយ ឬកំណត់តម្លៃដែលនៅសល់ មុនពេលស្ថានភាពដែលត្រូវគ្នាត្រូវបានចាប់ផ្តើមជាធម្មតា។ត្រូវតែពិនិត្យមើល INI វគ្គ និងផ្លូវផ្សេងទៀតមុនពេលចាប់ផ្តើម

លក្ខខណ្ឌទាំងនេះចាំបាច់ត្រូវបំពេញក្នុងការរួមបញ្ចូលគ្នា; កំណត់ហេតុកំហុសណាមួយដោយខ្លួនឯងមិនបង្ហាញថាភាពងាយរងគ្រោះត្រូវបានទាញយកដោយជោគជ័យនោះទេ។ S3

វាមិនតម្រូវឱ្យមាន OOM ជាតម្រូវការជាមុនចាំបាច់នោះទេ។

កំហុសធ្ងន់ធ្ងរអាចរំខានការបោះពុម្ព និងការស្តាររដ្ឋដែលបានផ្គូផ្គង។ ការបរាជ័យក្នុងការចងក្រង ឬញែក កំហុសដែលមិនអាចចាប់បាន ការបរាជ័យ require និងការអស់ពេលនៃការអនុវត្តអាចទុកឱ្យរដ្ឋជាក់លាក់នៅពីក្រោយ។ ការ​ធ្វើ​រោគវិនិច្ឆ័យ​មិន​បណ្ដាល​ឱ្យ​ស្លាប់​យឺតយ៉ាវ​ក្នុង​ការ​សម្អាត​ក៏​អាច​បញ្ចូល​ព័ត៌មាន​កំហុស​ដែល​ត្រូវ​បាន​សម្អាត​រួច​មក​វិញ​ដែរ។ S3

ដូច្នេះ ការផ្លាស់ប្តូរ memory_limit ទៅជាគ្មានដែនកំណត់ មិនគ្របដណ្តប់លើសំណុំនៃភាពងាយរងគ្រោះនេះទេ។

“មុនពេលចាប់ផ្តើម” ចាំបាច់ត្រូវព្យាបាលដោយឡែកពីគ្នា។

ពេលវេលានៃអ្នកប្រើប្រាស់ទាំងពីរប្រភេទដែលបានបញ្ជាក់គឺខុសគ្នា៖

  • Early INI diagnostics៖ ការកំណត់រចនាសម្ព័ន្ធមួយចំនួនបានអនុវត្តលើបញ្ហាស្នើសុំការព្រមាន ការជូនដំណឹង ឬការបដិសេធមុនពេលចាប់ផ្តើមដំណើរការធម្មតារបស់ប្រតិបត្តិករ ហើយដំណើរការវិនិច្ឆ័យអាចចូលប្រើស្ថានភាពកំហុសចាស់។
  • session upload progress៖ វគ្គអាចត្រូវបានដំណើរការជាមុនក្នុងអំឡុងពេលដំណើរការញែកតួសំណើ ប៉ុន្តែម៉ូឌុលធម្មតា RINIT មិនទាន់ត្រូវបានបញ្ចប់នៅឡើយទេ។ វាមិនអាចត្រូវបានសន្និដ្ឋានថាផ្លូវមិនមានទេពីព្រោះកម្មវិធីមិនហៅ session_start() ច្បាស់លាស់។ S3

មិនមែនទាំងអស់ទេ។ INI ការកំណត់រចនាសម្ព័ន្ធមានពេលវេលាហានិភ័យដូចគ្នា។ ការកំណត់រចនាសម្ព័ន្ធកម្រិតថត mod_php និង PHP_VALUE / PHP_ADMIN_VALUE ឆ្លងកាត់ដោយ FPM ផ្នែកខាងមុខត្រូវតែសម្គាល់ពីធម្មតា។ php.ini , FPM pool ការកំណត់រចនាសម្ព័ន្ធចាប់ផ្តើម និង FPM .user.ini . អ្នកក្រោយៗទៀតមានពេលវេលាកំណត់រចនាសម្ព័ន្ធខុសៗគ្នា ហើយមិនអាចហៅថាជាអ្នកប្រើប្រាស់ដំបូងដូចគ្នាបានទេ។ S3

ការបិទ display_errors, log_errors កាត់បន្ថយ error_reporting ឬការប្រើ @ ប៉ះពាល់តែភាពមើលឃើញនៃការធ្វើរោគវិនិច្ឆ័យ។ ស្ថានភាពខាងក្នុងដែលពាក់ព័ន្ធអាចត្រូវបានចូលប្រើ មុនពេលសម្រេចចិត្តថាតើត្រូវបញ្ចេញកំណត់ហេតុ។ S3

3. ជួសជុលកំណែ និងការជ្រើសរើសបំណះ

3.1 ខ្សែបន្ទាត់ជួសជុលខាងលើផ្លូវការ

សាខា PHP បច្ចុប្បន្នកំណែដំបូងដែលរួមបញ្ចូលការជួសជុលផ្លូវការនេះ។ការណែនាំ
8.28.2.35ដំឡើងកំណែទៅកំណែនេះ ឬកំណែបន្តបន្ទាប់ដែលមានការជួសជុលដូចគ្នា។
8.38.3.36ដូច​គ្នា​ខាង​លើ
8.48.4.27ដូច​គ្នា​ខាង​លើ
8.58.5.12ដូច​គ្នា​ខាង​លើ
8.1 និងកំណែមុន។ការ​គាំទ្រ​ទូទៅ​ខាង​លើ​ត្រូវ​បាន​បញ្ចប់ផ្តល់អាទិភាពដល់ការធ្វើចំណាកស្រុកទៅកាន់សាខាដែលគាំទ្រ។ ការចេញផ្សាយការត្រួតពិនិត្យរយៈពេលខ្លី ឬ LTS អ្នកផលិត backport

កំណែ និងស្ថានភាពគាំទ្រគឺផ្អែកលើការប្រកាសជាផ្លូវការរបស់ PHP ហើយពេលវេលាមូលដ្ឋានគឺថ្ងៃទី 22 ខែតុលា ឆ្នាំ 2026។ S1

ទាំងនេះគឺជា កម្រិតកំណែដែលបានជួសជុលសម្រាប់សាខានីមួយៗ។ ពួកវាមិនអាចជំនួសដោយសេចក្តីថ្លែងការណ៍ដែលគ្រប់កំណែខាងក្រោម 8.5.12 ងាយរងគ្រោះទេ៖ កំណែដូចជា 8.2.35 និង 8.4.27 នៅក្នុងសាខាផ្សេងទៀតមានការជួសជុលរួចហើយ។

3.2 ពិនិត្យមើលកំណែកញ្ចប់ចែកចាយពេញលេញ

Distros តែងតែបន្ថែមការកែសុវត្ថិភាពដោយផ្អែកលើកំណែអាប់ដេតចាស់។ ការទទួលយកគួរតែពិនិត្យមើលកំណែចេញផ្សាយ ប្រភពឃ្លាំង កំណែកញ្ចប់ពេញលេញ និងព្រឹត្តិបត្រសុវត្ថិភាព។

ឧទាហរណ៍ កំណែកញ្ចប់ជួសជុល Ubuntu 24.04 LTS ដែលបានរាយបញ្ជីសម្រាប់ Ubuntu USN-8948-1 គឺ៖

8.3.6-0ubuntu0.24.04.13

ផ្នែកខាងលើរបស់វានៅតែជា 8.3.6 ប៉ុន្តែកំណែកញ្ចប់ពេញលេញនៃការចែកចាយនោះត្រូវបានរួមបញ្ចូលនៅក្នុងការប្រកាសជួសជុលនេះ។ ការសន្និដ្ឋាននេះអនុវត្តតែចំពោះប្រភពនៃការចែកចាយ និងកញ្ចប់ដែលត្រូវគ្នាប៉ុណ្ណោះ ហើយមិនអាចធ្វើជាទូទៅចំពោះការសាងសង់ណាមួយដែលបង្ហាញ 8.3.6 ផងដែរ។ S10

3.3 ការជ្រើសរើសបំណះត្រឹមត្រូវ។

កន្លែងកើតហេតុផែនការអាទិភាពចំណុចសំខាន់សម្រាប់ការទទួលយក
ការប្រើប្រាស់កញ្ចប់ចែកចាយ PHPដំឡើងបច្ចុប្បន្នភាពសុវត្ថិភាពដែលចេញផ្សាយដោយក្រុមហ៊ុនផលិតសេចក្តីប្រកាសគ្របដណ្តប់ទាំង CVE; កំណែកញ្ចប់ពេញលេញគឺត្រឹមត្រូវ។
ប្រើកុងតឺន័រ PHP ផ្លូវការ ឬរូបភាពដែលបង្កើតដោយខ្លួនឯង។ធ្វើបច្ចុប្បន្នភាពរយៈពេលដំណើរការមូលដ្ឋាន បង្កើតឡើងវិញ និងដាក់ឱ្យប្រើប្រាស់វត្ថុដែលកំពុងដំណើរការប្រើរូបភាពថ្មី; ច្បាប់ចម្លងចាស់ទាំងអស់ត្រូវបានដកចេញ
សាខាដែលគាំទ្រដោយចងក្រងដោយខ្លួនឯង។ប្រើកំណែសុវត្ថិភាពផ្លូវការនៃសាខានេះ ឬសំណុំបំណះផ្លូវការពេញលេញការផ្គូផ្គងសាខា ការបញ្ចប់ភាពអាស្រ័យ ភាពឆបគ្នានៃផ្នែកបន្ថែម និងការឆ្លងកាត់ការតំរែតំរង់
ប្រធានបទ 7.4, 8.0, 8.1ផ្តល់អាទិភាពដល់អ្នកផ្គត់ផ្គង់ backport; វាយតម្លៃសាខាប្រភពកូដអាសន្នផ្លូវការប្រសិនបើចាំបាច់កំណត់អត្តសញ្ញាណការផ្លាស់ប្តូរអាកប្បកិរិយា និងកំណត់ពេលផ្លាស់ប្តូរទៅជាកំណែដែលគាំទ្រ

បំណះផ្លូវការត្រូវបានចេញផ្សាយ ហើយការជួសជុលជាក់ស្តែងគួរតែចាប់ផ្តើមពីបំណះទាំងនេះ។ អត្ថបទកូដនៅក្នុងផ្នែកទី 6 គឺមានបំណងបង្ហាញការរចនា និងពិនិត្យមើលការរំលេច ហើយមិនបង្កើតបំណះពេញលេញដែលអាចត្រូវបានអនុវត្តដោយឯករាជ្យ។ S1S4S6

4. ដំណើរការជួសជុលជាផ្លូវការ

4.1 សារពើភ័ណ្ឌនៃពេលវេលាដំណើរការដែលពិតជាដោះស្រាយសំណើ

វាត្រូវបានណែនាំឱ្យបង្កើតសៀវភៅកត់ត្រាខ្លីៗ ដើម្បីកត់ត្រាយ៉ាងហោចណាស់៖

  • បញ្ចូលឈ្មោះដែន ឬសេវាកម្ម ប្រូកស៊ី backend បញ្ច្រាស PHP SAPI ។
  • សាខា PHP កំណែកញ្ចប់ពេញលេញ ឬរូបភាពសង្ខេប ប្រភពបង្កើត។
  • FPM pool, អង្គភាពសេវាកម្មជាក់ស្តែង, កុងតឺន័រ ឬ Pod, ចំនួននៃការចម្លង។
  • ផ្នែកបន្ថែម ការកំណត់រចនាសម្ព័ន្ធចម្បង និងឯកសារកំណត់រចនាសម្ព័ន្ធបន្ថែមត្រូវបានផ្ទុក។
  • តើមានកំណែ PHP ផ្សេងទៀត ច្បាប់ចម្លងនៃការដាក់ពង្រាយចាស់ ឬវិបផតថលដើមដែលអាចចូលប្រើដោយផ្ទាល់បានទេ?

ទាំងនេះគឺជាការណែនាំអំពីការអនុវត្ត ដូច្នេះ “ធ្វើឱ្យប្រសើរឡើង” អាចឆ្លើយតបទៅនឹងធាតុចូលចរាចរណ៍ជាក់ស្តែងនីមួយៗ។ ជាពិសេសពិនិត្យមើលថាតើបន្ទាត់ពាក្យបញ្ជា PHP និង Web PHP ប្រើកំណែផ្សេងគ្នា រូបភាពត្រូវបានសាងសង់ ប៉ុន្តែកុងតឺន័រចាស់នៅតែដំណើរការ ផ្នែកនៃអាង ឬច្បាប់ចម្លងមិនត្រូវបានជំនួស។ល។

4.2 ជ្រើសរើស និងដាក់ពង្រាយការអាប់ដេតត្រឹមត្រូវ។

បញ្ជាក់កំណែជួសជុលតាមផ្នែកទី 3 និយមដោយប្រើប្រភពកញ្ចប់ដែលទុកចិត្តដែលមានស្រាប់ ឬខ្សែសង្វាក់សាងសង់ដែលបានគ្រប់គ្រង។ វិសាលភាពនៃការអាប់ដេតគួរតែរួមបញ្ចូលធាតុផ្សំដែលពិតជារៀបចំសំណើ ដូចជាកញ្ចប់ FPM ម៉ូឌុល Apache PHP គោលពីរ CGI ឬសេវាកម្មបង្កើតដែល PHP ត្រូវបានបង្កប់។

មុនពេលដំឡើងកំណែ សូមរក្សាការកំណត់រចនាសម្ព័ន្ធ និងបញ្ជីកញ្ចប់ ហើយផ្ទៀងផ្ទាត់ការចាប់ផ្តើម និងសេវាកម្មសំខាន់ៗនៅក្នុងបរិយាកាសស្រដៀងគ្នាទៅនឹងការផលិត។ សម្រាប់ផ្នែកបន្ថែមដែលរក្សាដោយខ្លួនឯង សូមពិនិត្យមើលការស្ថាបនា និងដំណើរការភាពឆបគ្នាដែលត្រូវគ្នានឹងកំណែ PHP ។ គ្រាន់តែជ្រើសរើសការប្តេជ្ញាចិត្តដែលហាក់ដូចជាពាក់ព័ន្ធពីសាខាមួយផ្សេងទៀត មិនធានាថាការដោះស្រាយទាំងអស់ត្រូវបានអនុវត្តនោះទេ។

4.3 ចាប់ផ្តើមឡើងវិញ ឬរំកិលលើករណីដែលកំពុងដំណើរការ

ការដំឡើងឯកសារ និងផ្ទុកកូដថ្មីទៅក្នុងដំណើរការគឺជារឿងពីរផ្សេងគ្នា។ សេវាកម្មដែលត្រូវគ្នាគួរតែត្រូវបានចាប់ផ្តើមឡើងវិញ ឬការជំនួសរំកិលគួរតែត្រូវបានបញ្ចប់ ហើយកម្មករចាស់ និងកុងតឺន័រចាស់គួរតែត្រូវបានបញ្ជាក់ថាបានចាកចេញ។

សម្រាប់ mod_php ចាប់ផ្តើមដំណើរការ Apache ដែលបង្ហោះម៉ូឌុលឡើងវិញ។ សេវាកម្មដែលបង្កប់ PHP ត្រូវការដំណើរការបង្ហោះរបស់ពួកគេជំនួស។ សម្រាប់ FPM ការឈូសឆាយ OPcache មិនជំនួសការធ្វើបច្ចុប្បន្នភាពរយៈពេលដំណើរការ និងការចូលនិវត្តន៍របស់កម្មករចាស់នោះទេ។

នៅពេលប្រើការប្តូរដ៏ប្រណិត អ្នកត្រូវពិនិត្យមើលថាតើដំណើរការជំនាន់ចាស់នៅតែដោះស្រាយការភ្ជាប់ដ៏យូរ ឬសំណើដែលមិនទាន់សម្រេច។ កំណត់ត្រាទទួលយកគួរតែរួមបញ្ចូលសេវាកម្មជាក់ស្តែង កំណែដាក់ឱ្យប្រើប្រាស់ ផ្លាស់ប្តូរពេលវេលាបញ្ចប់ និងលទ្ធផលចេញនៃវត្ថុចាស់។

4.4 ផ្ទៀងផ្ទាត់តាមរយៈសំណើ Web ពិតប្រាកដ

វាត្រូវបានផ្ដល់អនុសាសន៍ឱ្យបញ្ចូលគ្នានូវបំណែកនៃភស្តុតាងខាងក្រោមជាជាងការពឹងផ្អែកតែលើពាក្យបញ្ជាកំណែតែមួយ៖

ភស្តុតាងអ្វីដែលអាចបញ្ជាក់បាន។មិនអាចបញ្ជាក់អ្វីតែម្នាក់ឯងបានទេ។
កម្មវិធីគ្រប់គ្រងកញ្ចប់ ឬទិន្នន័យមេតារូបភាពប្រភពនៃការដំឡើង និងការកសាងពេញលេញចរាចរណ៍ត្រូវបានប្តូរទៅករណីនេះ។
ដំណើរការ និងស្ថានភាពនៃការដាក់ពង្រាយកម្មករ ឬកុងតឺន័របញ្ចប់ការជំនួសច្រកចូលខាងក្រៅត្រូវតែឆ្លងកាត់វា។
លទ្ធផល​វិនិច្ឆ័យ​ដែល​បាន​ដាក់​កំហិត​បាន​ចូល​ប្រើ​តាម​វិបផតថល​ពិតWeb SAPI ពិតប្រាកដ និងការកំណត់រចនាសម្ព័ន្ធដែលកំពុងដំណើរការថាតើការចេញផ្សាយ backport គ្របដណ្តប់ CVE ពីរ
ការប្រកាសរបស់អ្នកលក់ ឬកំណត់ត្រាបំណះពេញលេញការជួសជុលកំហុសនេះត្រូវបានរួមបញ្ចូលនៅក្នុងការបង្កើតនេះ។ការចម្លងទាំងអស់ត្រូវបានដាក់ពង្រាយ

PHP_VERSION, PHP_SAPI, ឯកសារកំណត់រចនាសម្ព័ន្ធដែលបានផ្ទុក និងការកំណត់រចនាសម្ព័ន្ធសង្គ្រោះបន្ទាន់អាចត្រូវបានពិនិត្យតាមរយៈសមត្ថភាពវិនិច្ឆ័យខាងក្នុងដែលមានស្រាប់ ឬវិបផតថលវិភាគបណ្តោះអាសន្ន និងគ្រប់គ្រងការចូលប្រើ។ ត្រូវប្រាកដថាសំណើមិនត្រូវបានបញ្ជូនមកវិញដោយផ្ទាល់ដោយ CDN ឬឃ្លាំងសម្ងាត់ទំព័រ។ ដកធាតុវិនិច្ឆ័យបណ្តោះអាសន្ននៅពេលបញ្ចប់។

php -v ជាធម្មតាបង្ហាញតែលេខគោលពីរ CLI បច្ចុប្បន្នដែលត្រូវបានជ្រើសរើសដោយសែល។ ពាក្យបញ្ជាដូចជា php-fpm -i មិនស្មើនឹងការផ្ទៀងផ្ទាត់កម្មករដែលមានស្រាប់ដែលកំពុងទទួលចរាចរណ៍នោះទេ។ កុំបង្ហាញទំព័រ phpinfo() ពេញលេញទៅបណ្តាញសាធារណៈក្នុងរយៈពេលយូរ។

4.5 ពិនិត្យការតំរែតំរង់ធុរកិច្ច និងដកចេញការកំណត់គ្រាអាសន្ន

ផ្ទៀងផ្ទាត់ការចូលធម្មតា ការអាន និងសរសេរវគ្គ ទម្រង់ និងការបង្ហោះ ការនាំចូល ការគ្រប់គ្រងកំហុស និងស្ថេរភាពរបស់កម្មករជុំវិញមុខងារដែលរងផលប៉ះពាល់ដោយការផ្លាស់ប្តូរនេះ។ ពិនិត្យមើលថាតើអត្រាកំហុស ការពន្យាពេលការឆ្លើយតប កម្រិតនៃការចងចាំ ការចាកចេញពីដំណើរការ និងប្រេកង់បង្កើតឡើងវិញគឺខុសប្រក្រតី។

ប្រសិនបើ memory_limit=-1 ត្រូវបានកំណត់ជាបណ្ដោះអាសន្ន ថវិកាមានកំណត់ដែលត្រូវគ្នានឹងសមត្ថភាពអាជីវកម្មនឹងត្រូវបានស្ដារឡើងវិញ បន្ទាប់ពីបំណះផ្លូវការចូលជាធរមាន។ ប្រសិនបើ pm.max_requests=1 ត្រូវបានកំណត់ ការកំណត់រចនាសម្ព័ន្ធវដ្តជីវិតដែលវាយតម្លៃសមត្ថភាពនឹងត្រូវបានស្ដារឡើងវិញ បន្ទាប់ពីការជួសជុលត្រូវបានបញ្ជាក់។ ដែនកំណត់ទំហំបញ្ចូល និងការគ្រប់គ្រងការចូលប្រើប្រភពអាចត្រូវបានរក្សាទុក ដោយសារតម្រូវការអាជីវកម្មកំណត់។

ប្រសិនបើបញ្ហាភាពឆបគ្នាកើតឡើងកំឡុងពេលដំឡើងកំណែ អាទិភាពគួរតែត្រូវបានផ្តល់ទៅឱ្យការផ្អាកវិបផតថលដែលរងផលប៉ះពាល់ ការដាក់កម្រិតការចូលប្រើខាងក្រៅរបស់វា ឬកែតម្រូវកម្មវិធីមុនពេលត្រលប់មកវិញ។ ការអនុញ្ញាតឱ្យពេលវេលាដំណើរការដែលមិនបានជួសជុលដោយផ្ទាល់ដើម្បីបម្រើបណ្តាញសាធារណៈម្តងទៀតនឹងបើកហានិភ័យដើមឡើងវិញ។

5. វិធានការកាត់បន្ថយនៅពេលដែលការធ្វើឱ្យប្រសើរឡើងជាបន្ទាន់គឺមិនអាចធ្វើទៅបាន

ផ្នែកនេះត្រូវបានបម្រុងទុកសម្រាប់ការកាត់បន្ថយរយៈពេលខ្លីនៃការប៉ះពាល់ ឬកែលម្អភាពអាចរកបាន។ វិធានការនីមួយៗគ្របដណ្តប់តែផ្លូវជាក់លាក់មួយប៉ុណ្ណោះ ហើយការរួមផ្សំនៃវិធានការជាច្រើនមិនស្មើនឹងការជួសជុលពេញលេញនោះទេ។ S1S2S3

5.1 ផ្តល់អាទិភាពដល់ការគ្រប់គ្រងចរាចរណ៍មុន PHP

ប្រសិនបើសេវាកម្មអនុញ្ញាត សូមដាក់កម្រិតជាបណ្ដោះអាសន្ននូវចំណុចបញ្ចប់ដ៏រសើបចំពោះប្រភពដែលអាចទុកចិត្តបាន ឬពង្រឹងការគ្រប់គ្រងការចូលប្រើមុនពេល PHP ។ សម្រាប់ការផ្ទុកការងារ កំណត់ទំហំការស្នើសុំ - តួខ្លួន ចំនួនវាល ចំនួនផ្នែក បឋមកថាក្នុងមួយផ្នែក និងជម្រៅសំបុក។ សេវាកម្មដែលមិនត្រូវការពហុផ្នែកអាចបដិសេធវានៅផ្នែកខាងមុខ។ S2

ការរឹតបន្តឹងទាំងនេះគឺដើម្បីគ្របដណ្តប់ច្រកចូលទាំងអស់ទៅកាន់ PHP ។ មានតែការស្ទាក់ចាប់ URL ដែលមានឈ្មោះថា “ផ្ទុកឡើង” នឹងខកខានធាតុផ្សេងទៀតដែលនៅតែត្រូវបានញែកដោយស្វ័យប្រវត្តិដោយ PHP នៅក្នុងផ្នែកសំណើ។ សម្រាប់ករណីដូចជាការផ្ទេរកំណាត់ ការខ្វះខាតប្រវែងដែលបានប្រកាស។ល។ ដែនកំណត់គួរតែផ្អែកលើទំហំដែលបានអានពិតប្រាកដ។ កម្មវិធីក៏គួរតែមានថវិកាទំហំលទ្ធផលរបស់វាដែរ នៅពេលបង្រួម ឬពង្រីកមាតិកាម្តងទៀត។

គំរូកំណត់រចនាសម្ព័ន្ធ 5.2 FPM pool

ដាក់ការកំណត់ខាងក្រោមនៅក្នុងផ្នែកកំណត់រចនាសម្ព័ន្ធ FPM pool ដែលពិតជាបម្រើសំណើ មិនមែនជាពាក្យសំដីនៅក្នុង php.ini ទេ។ តម្លៃ 8M និង 4M គឺជាឧទាហរណ៍ដើម្បីកែតម្រូវសម្រាប់បន្ទុកការងារ។ ទុកកន្លែងសម្រាប់វាលទម្រង់ និងព្រំដែនពហុផ្នែក នៅពេលកំណត់សំណើ POST ទាំងមូល។ S11S12

; Temporary mitigation: evaluate capacity before applying.
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
php_admin_value[upload_max_filesize] = 4M
php_admin_flag[session.upload_progress.enabled] = off

PHP 8.5 តែប៉ុណ្ណោះ បូក៖

php_admin_flag[fatal_error_backtraces] = off

មុខងារ និងព្រំដែននីមួយៗមានដូចខាងក្រោម៖

ការកំណត់រចនាសម្ព័ន្ធប្រសិទ្ធិភាពរំពឹងទុកការពិពណ៌នាអំពីការរឹតបន្តឹងដែលត្រូវតែរក្សាទុក
memory_limit=-1ដកលក្ខខណ្ឌដែលអាចព្យាករណ៍បាន PHP ស្នើសុំអង្គចងចាំខាងលើវាមិនការពារការបរាជ័យនៃការបែងចែកមូលដ្ឋានទេ។ ការលុបចោលថវិកាដើមអាចបង្កើនហានិភ័យនៃការអស់ការចងចាំ និងការរំខានសេវាកម្ម។
post_max_size តូចជាងកាត់បន្ថយទំហំនៃទិន្នន័យដែលចូលក្នុងដំណើរការញែកឧបករណ៍ញែកមិនកំណត់បានស្គាល់គម្លាត; ការពង្រីកអង្គចងចាំមិនអាចរារាំងដោយឯករាជ្យបានទេ។
upload_max_filesize < post_max_sizeកំណត់ទំហំឯកសារតែមួយ ហើយស្នើសុំទំហំផ្ទុកលើសមិនដាក់កម្រិតលើវាលទាំងអស់ ទិន្នន័យមេតា ឬការបែងចែកក្នុងកម្មវិធីទេ។
បិទដំណើរការផ្ទុកឡើងរារាំងផ្លូវដែលទាក់ទងនឹងវគ្គដែលបានបញ្ជាក់មិនគ្របដណ្តប់វ៉ារ្យ៉ង់រដ្ឋសកលផ្សេងទៀត។
PHP 8.5 បិទដានក្រោយស្លាប់រារាំងអ្នកផលិតស្ថានភាពដែលពាក់ព័ន្ធដែលបានបញ្ជាក់មិនគ្របដណ្តប់ផ្លូវផ្សេងទៀតដូចជាវគ្គ

ព្រំដែនរង្វាស់បានមកពីការប្រកាសជាផ្លូវការ; សម្រាប់​វាក្យសម្ព័ន្ធ​រួម និង​ការ​កំណត់​រចនាសម្ព័ន្ធ​កម្រិត​នៃ​ការ​គ្រប់គ្រង​ន័យ​វិទ្យា សូមមើល​សៀវភៅដៃ PHP ។ S1S2S3S11

ការកំណត់ php_admin_* កម្រិតគ្រប់គ្រងមិនអាចបដិសេធដោយកម្មវិធីតាមរយៈ ini_set() ទេ។ រាល់ការដាក់បញ្ចូល កម្រិតថត និងការកំណត់ចូលខាងមុខគួរតែនៅតែត្រូវបានពិនិត្យឡើងវិញ ដើម្បីបញ្ជាក់ថាតម្លៃនៅលើសំណើពិតប្រាកដគឺដូចការរំពឹងទុក។ បន្ទាប់ពីការកែប្រែ បង្កើតកម្មករទាំងអស់ឡើងវិញ ដើម្បីការពារដំណើរការដែលមានស្រាប់ពីការបន្តរក្សាសភាពចាស់។

ប្រសិនបើអ្នកជ្រើសរើសកែប្រែ php.ini ដោយផ្ទាល់ វាក្យសម្ព័ន្ធគួរតែត្រូវបានប្តូរទៅជា៖

memory_limit = -1
post_max_size = 8M
upload_max_filesize = 4M
session.upload_progress.enabled = Off

មិនដូច php_admin_value នៅក្នុងអាងទេ គ្រាន់តែកំណត់ memory_limit=-1 នៅក្នុង php.ini មិនរារាំងកម្មវិធីពីការកែប្រែវាម្តងទៀតទេ។ ក្របខ័ណ្ឌ កូដកម្មវិធី និងការកំណត់រចនាសម្ព័ន្ធផ្សេងទៀតគួរតែត្រូវបានពិនិត្យ ដើម្បីមើលថាតើពួកគេបានកំណត់តម្លៃដែលបានកំណត់ឡើងវិញឬអត់។ នៅពេលដែលតម្រូវឱ្យមានការអនុវត្ត ប្រើការកំណត់កម្រិតគ្រប់គ្រងដែលសមរម្យសម្រាប់ SAPI បច្ចុប្បន្ន ហើយពិនិត្យមើលតម្លៃជាក់ស្តែង។ S11S12

បន្ថែម fatal_error_backtraces = Off សម្រាប់ PHP 8.5 ប៉ុណ្ណោះ។ កុំប្រើកម្រិតកម្មវិធី ini_set() ជាដំណោះស្រាយសម្រាប់បិទដំណើរការដំណើរការផ្ទុកឡើង ហើយកុំពឹងផ្អែកលើ FPM .user.ini ដើម្បីធ្វើឱ្យវាមានប្រសិទ្ធភាពមុនពេលស្នើសុំការញែក។ S1S3

5.3 គ្រប់គ្រងការចំណាយលើការដកដែនកំណត់អង្គចងចាំ PHP

memory_limit=-1 គឺជាការបន្ធូរបន្ថយផ្លូវបណ្តោះអាសន្នសម្រាប់បរិស្ថានដែលមិនបានជួសជុល ហើយមិនគួរត្រូវបានចម្លងជាការកំណត់លំនាំដើមរយៈពេលវែងនោះទេ។ នៅពេលដែលកម្មវិធី ឬសំណើរមិនអាចគ្រប់គ្រងបាន វាអាចប្រើប្រាស់អង្គចងចាំរបស់ម៉ាស៊ីនបានកាន់តែច្រើន។ ដូច្នេះមុននឹងប្រើប្រាស់ អ្នកគួរតែវាយតម្លៃចំនួននៃការស្របគ្នា បុគ្គលិកតែមួយកំពូល និងសមត្ថភាពសេវាកម្មសរុប ហើយដាក់ពង្រាយដែនកំណត់នៃការបញ្ចូលផ្នែកខាងមុខ។ S2

ដែនកំណត់នៃអង្គចងចាំក្នុងកុងតឺន័រ ឬ cgroup អាចផ្តល់នូវព្រំដែនភាពអាចរកបាន ប៉ុន្តែកុំធានាថាការបែងចែកនឹងមិនបរាជ័យឡើយ។ កុងតឺន័រទាំងមូល មេ និងកម្មករទាំងអស់ក៏អាចនឹងត្រូវបានបញ្ចប់ផងដែរ នៅពេលដែលដែនកំណត់ត្រូវបានកេះ។ ភាពឯកោនៃភាពឯកោ និងយុទ្ធសាស្ត្របញ្ចប់ចាំបាច់ត្រូវវាយតម្លៃដោយភ្ជាប់ជាមួយនឹងការដាក់ពង្រាយ ហើយមិនអាចត្រូវបានគេហៅថាការការពារពេញលេញសម្រាប់ CVE ទាំងពីរនេះទេ។ S2

កុំជំនួសយុទ្ធសាស្រ្តខាងលើជាមួយ RLIMIT_AS, RLIMIT_DATA ឬដំណើរការដែលត្រូវគ្នាការរឹតបន្តឹងចន្លោះអាសយដ្ឋាន។ ពួកគេអាចបណ្តាលឱ្យការបែងចែកមូលដ្ឋានដោយផ្ទាល់មិនចូលទៅក្នុងផ្លូវ OOM ដែលកំពុងមានបញ្ហា។ S2

ឧទាហរណ៍នៃការកំណត់រចនាសម្ព័ន្ធ 5.4 Nginx

អនុវត្តចំពោះការដាក់ពង្រាយដែល Nginx បញ្ជូនបន្តសំណើទៅ PHP-FPM ។ វាអាចត្រូវបានកំណត់នៅកម្រិតកំណត់រចនាសម្ព័ន្ធនៃសេវាកម្មបង្ហោះពិតប្រាកដ៖

client_max_body_size 8m;
fastcgi_request_buffering on;

client_max_body_size កំណត់ទំហំរាងកាយសំណើ។ fastcgi_request_buffering on អនុញ្ញាតឱ្យ Nginx អានអត្ថបទសំណើពេញលេញជាមុន ហើយបន្ទាប់មកផ្ញើវាទៅផ្នែកខាងក្រោយ FastCGI ។ ថាតើវាមានប្រសិទ្ធិភាពនៅក្នុង server ឬ location ជាក់លាក់ដែរឬទេ ចាំបាច់ត្រូវពិនិត្យដោយភ្ជាប់ជាមួយទំនាក់ទំនងមរតក និងគ្របដណ្តប់ដែលមានស្រាប់។ S13S14

Onតែនៅពេលដែលអាជីវកម្មមិនត្រូវការ multipart អ្នកអាចបន្ថែមច្បាប់បដិសេធទៅច្រកចូលសេវាកម្មដែលត្រូវគ្នា៖

if ($http_content_type ~* "multipart/form-data") {
    return 403;
}

នេះគឺជាគំរូការរឹតបន្តឹងការចូលសាមញ្ញដោយប្រើ if និង return មិនមែនជាច្បាប់តម្រងទូទៅសម្រាប់ភាពងាយរងគ្រោះផ្នែកញែកទេ។ ផ្ទៀងផ្ទាត់វាក្យសម្ព័ន្ធនៃការកំណត់រចនាសម្ព័ន្ធ និងសំណើធម្មតាមុនពេលដាក់ឱ្យប្រើប្រាស់ ហើយពិនិត្យមើលថាតើ error_page ផ្ទាល់ខ្លួនបញ្ជូនបន្តសំណើ 403 ទៅ PHP ដែរឬទេ។ ការផ្គូផ្គងខ្សែអក្សរមិនផ្តល់ការធានាពេញលេញលើភាពខុសគ្នានៃការវិភាគទាំងអស់ទេ។ S15

លើសពីនេះ ការកំណត់រចនាសម្ព័ន្ធទាំងនេះមិនកំណត់ដោយស្វ័យប្រវត្តិនូវចំនួនទិន្នន័យ ចំនួនវាល ឬចំនួនវត្ថុ PHP ដែលអាចបង្រួមបានដោយកម្មវិធី។ អាជីវកម្មដែលត្រូវការផ្ទុកឡើងគួរតែប្រើការរឹតបន្តឹងបន្ថែមដែលយល់ពីរចនាសម្ព័ន្ធនៃសំណើរបស់ពួកគេ។

5.5 ការបន្ធូរបន្ថយជាជម្រើស៖ សំណើមួយសម្រាប់បុគ្គលិក FPM

សម្រាប់ការដាក់ពង្រាយ FPM ដែលអាចចំណាយប្រាក់លើស ការដំឡើងរយៈពេលខ្លីអាចត្រូវបានវាយតម្លៃ៖

pm.max_requests = 1

និងកសាងកម្មករដែលមានស្រាប់ឡើងវិញ។ វារារាំងខ្សែសង្វាក់សំណើឆ្លងដែលបានពិពណ៌នានៅកម្រិតប្រើឡើងវិញរបស់កម្មករ ប៉ុន្តែនឹងបង្កើនការបង្កើតដំណើរការ និងការចាប់ផ្តើមដំបូង។ ក្នុងពេលជាមួយគ្នានេះ វាមិនអាចជួសជុលសំណើដូចគ្នា OOM និងបញ្ហាសម្អាត CVE-2026-109618 បានទេ។ នៅពេលដែលតម្លៃតូចជាង ប៉ុន្តែធំជាង 1 វានៅតែមានបង្អួចស្នើសុំប្រើឡើងវិញ។ S3S11

ដែនកំណត់គ្របដណ្តប់ 5.6 WAF និង Cloudflare

Cloudflare បានប្រកាសពីការរៀបចំដាក់ពង្រាយសម្រាប់ការការពារប្រឆាំងនឹង PHP2Shell រួមទាំងផែនការ Free ។ នៅពេលប្រើប្រាស់សេវាកម្មរបស់វា អ្នកគួរតែពិនិត្យមើលថាតើចរាចរណ៍ពិតប្រាកដឆ្លងកាត់ប្រូកស៊ី ថាតើច្បាប់ការពារមានសុពលភាពដែរឬទេ និងថាតើគេហទំព័រដើមអាចត្រូវបានឆ្លងកាត់ដោយផ្ទាល់ដែរឬទេ។ សម្រាប់គម្រោងបង់ប្រាក់ អ្នកក៏ត្រូវពិនិត្យមើលការកំណត់រចនាសម្ព័ន្ធ និងការលើកលែងនៃច្បាប់គ្រប់គ្រងដែលត្រូវគ្នា។ S16

ការរកឃើញមួយចំនួនដែលត្រូវបានពិពណ៌នាដោយអ្នកលក់ប្រើប្រាស់សញ្ញាឆ្លើយតប ដូច្នេះការការពារទាំងអស់មិនអាចបកស្រាយថា “រាល់ការវាយប្រហារត្រូវបានរារាំងមុនពេលឈានដល់ PHP” ។ WAF អាចជួយកាត់បន្ថយការបង្ហាញ និងផ្តល់ព័ត៌មានសង្កេត ប៉ុន្តែការបន្តដំឡើងកំណែទៅ PHP គឺនៅតែចាំបាច់។ S16

5.7 ហេតុអ្វីបានជាវិធានការទូទៅមិនគ្រប់គ្រាន់

វិធានការ ឬការវិនិច្ឆ័យកង្វះខាត
បិទ file_uploads ប៉ុណ្ណោះ។មិនអាចគ្របដណ្តប់ដំណើរការពហុផ្នែកទាំងអស់ និងអនុវត្តផ្លូវ OOM ផ្ទាល់របស់វា។
ការកំណត់ enable_post_data_reading=Offផ្លាស់ប្តូរឥរិយាបថនៃការបំពេញដោយស្វ័យប្រវត្តិ POST/FILES; ពាក្យស្នើសុំនៅតែអាចអានបានដោយកម្មវិធី ហើយអាចរំខានដល់អាជីវកម្មធម្មតា។
បិទការបង្ហាញកំហុស កត់ត្រា ឬប្រើ @ដំណើរការរោគវិនិច្ឆ័យខាងក្នុងនៅតែអាចចូលប្រើស្ថានភាព dangling
បង្កើនបរិមាណកម្មករកុំបង្កើតយន្តការសម្អាតរដ្ឋប្រកបដោយសុវត្ថិភាព ឬលុបបំបាត់ការប្រើឡើងវិញនូវកម្មករតែមួយ
កំណត់រចនាសម្ព័ន្ធតែ disable_functions ឬ open_basedirដែនកំណត់ទាំងនេះមិនជួសជុលអង្គចងចាំស្រទាប់ម៉ាស៊ីន C ខូចទេ។
ពិនិត្យកំណែ ឬច្បាប់ចម្លងតែមួយដងប៉ុណ្ណោះ។វាមិនអាចបញ្ជាក់បានទេថា ច្រកចូល និងករណីដែលកំពុងដំណើរការទាំងអស់ត្រូវបានជំនួស
គ្មាន​កំណត់​ហេតុ​លើក​លែង​ត្រូវ​បាន​គេ​មើល​ឃើញ​ទេ។វាមិនអាចបង្ហាញថាភាពងាយរងគ្រោះមិនមាន ឬថាវាមិនត្រូវបានកេងប្រវ័ញ្ចពីមុនមកនោះទេ។

ក្នុងចំណោមពួកគេ មូលដ្ឋានយន្តការនៃការកំណត់រចនាសម្ព័ន្ធ និងភាពងាយរងគ្រោះនៃ PHP អាចត្រូវបានរកឃើញនៅក្នុង S2S3S12; ការវិនិច្ឆ័យអំពីការគ្របដណ្តប់ ការទទួលយក និងការអនុញ្ញាតគឺផ្អែកលើការផ្តល់យោបល់លើការអនុវត្តដែលដាក់ចេញដោយយន្តការទាំងនេះ។

6. គំនិតនៃការអនុវត្ត និងចំណុចពិនិត្យឡើងវិញនៃបំណះផ្លូវការ

6.1 ប្រើការជួសជុលពេញលេញសម្រាប់សាខាត្រឹមត្រូវ។

ការបញ្ជូនជាផ្លូវការតំណាងសម្រាប់ PHP 8.5 គឺ៖

31c0ea7d7ff1d1fccb6492e52dab544011628065
Avoid state corruption via bailout

ការប្តេជ្ញាចិត្តភ្ជាប់ CVEs ពីរយ៉ាងច្បាស់លាស់ ទាំងការកែតម្រូវយន្តការចេញ OOM និងដើម្បីជួសជុលស្ថានភាពសកលដែលអាចចូលប្រើបានក្នុងដំណាក់កាលចាប់ផ្តើម។ ដាក់ស្នើទំព័រជាមួយនឹងភាពខុសគ្នាពេញលេញសូមមើល S4S5 ។ សាខាផ្សេងទៀតគួរតែប្រើការចេញផ្សាយសុវត្ថិភាពផ្លូវការរបស់ពួកគេផ្ទាល់ ឬបំណះដែលត្រូវគ្នា ហើយវាមិនអាចត្រូវបានសន្មត់ថាការផ្លាស់ប្តូរទៅ 8.5 អាចត្រូវបានអនុវត្តដោយផ្ទាល់ទៅកំណែចាស់ណាមួយឡើយ។

6.2 OOM ជួសជុល៖ ស្ដារស្ថានភាពដែលអាចដំណើរការបានជាមុនសិន ហើយបន្ទាប់មកបញ្ចប់សំណើ

ការអនុវត្តជាផ្លូវការណែនាំពីរកម្រិតនៃការដំណើរការ OOM ទន់ និងរឹង៖ នៅពេលដែលកម្រិតទន់ត្រូវបានឈានដល់ ស្ថានភាពដែលមិនទាន់សម្រេចត្រូវបានកត់ត្រា ហើយការចាកចេញដែលគ្រប់គ្រងត្រូវបានអនុវត្តនៅទីតាំងសុវត្ថិភាពដូចជា VM ។ ចំណុចប្រទាក់ការបែងចែកដែលបរាជ័យអនុញ្ញាតឱ្យអ្នកហៅទូរស័ព្ទដោះស្រាយការបរាជ័យយ៉ាងច្បាស់លាស់។ សម្រាប់ការបែងចែកដែលមិនអាចត្រឡប់ការបរាជ័យដោយផ្ទាល់ ប្រសិនបើកម្រិតរឹងខ្ពស់ជាងត្រូវបានគេរំពឹងថានឹងលើសពីនោះ ដំណើរការនឹងត្រូវបានបញ្ចប់ដោយផ្ទាល់ ដើម្បីជៀសវាងការបន្តដំណើរការសំណើក្នុងស្ថានភាពមធ្យមដែលមិនមានសុវត្ថិភាព។ S2S5

ខាងក្រោមនេះគឺជាការដកស្រង់នៃកូដគន្លឹះនៅក្នុង 8.5 diff ដែលប្រើដើម្បីសម្គាល់ OOM ដែលមិនទាន់សម្រេច៖

EG(delayed_oom).state = ZEND_OOM_STATE_PENDING;
zend_atomic_bool_store_ex(&EG(vm_interrupt), true);

VM រំខានការគ្រប់គ្រង និងទីតាំងសុវត្ថិភាពផ្សេងទៀត ហៅទូរសព្ទទៅ zend_handle_delayed_oom() ជាបន្តបន្ទាប់។ បរិបទប្រតិបត្តិកូដអ្នកប្រើប្រាស់របស់វាប្រើផ្លូវ unwind ដែលបានគ្រប់គ្រង។ ផ្លូវ OOM ពិបាកហៅ _exit(137) ។ S5

តាមទស្សនៈនៃការរចនា ការផ្លាស់ប្តូរសំខាន់ៗគឺ៖ avoids ឆ្លងកាត់ជង់ការហៅ C តាមអំពើចិត្ត នៅពេលដែលរចនាសម្ព័ន្ធស្ថិតនៅក្នុងស្ថានភាពមធ្យម ហើយដាក់ច្រកចេញនៅទីតាំង ដែលអាចរក្សាកម្រិតនៃរដ្ឋ។ បន្ទាប់ពីដែនកំណត់ទន់ត្រូវបានកេះ អង្គចងចាំបន្ថែមអាចត្រូវបានទាមទារដើម្បីបញ្ចប់ដំណើរការ ដូច្នេះកម្រិតទន់ថ្មីមិនអាចយល់បានថាជាដែនកំណត់ខាងលើដាច់ខាតសម្រាប់អង្គចងចាំសរុបនៃដំណើរការនោះទេ។

វាក៏មិនអាចសង្ខេបថា “PHP បានលុប zend_bailout() ទាំងអស់”។ បំណះនៅតែប្រើយន្តការពាក់ព័ន្ធក្នុងបរិបទជាក់លាក់។ អ្វី​ដែល​ត្រូវ​បាន​ជួសជុល​នោះ​គឺ​ការ​កំណត់​ពេល​ចេញ​ចេញ​ដ៏​គ្រោះថ្នាក់ និង​ការ​គ្រប់គ្រង​រដ្ឋ​ដែល​អម​ជាមួយ។ S5

6.3 អាប់ដេតអ្នកហៅចូលបែងចែក និងការញែកពហុផ្នែកជាមួយគ្នា

ប្រសិនបើអ្នកគ្រាន់តែផ្លាស់ប្តូរមុខងារបែងចែកទៅ “ត្រឡប់ NULL លើការបរាជ័យ” ហើយអ្នកហៅដើមនៅតែសន្មត់ថាទ្រនិចត្រឹមត្រូវតែងតែត្រលប់មកវិញ អ្នកនឹងណែនាំការចូលប្រើទ្រនិច null ថ្មី ឬការសម្អាតមិនពេញលេញ។ ចំណុចប្រទាក់ការបែងចែកដែលបរាជ័យនៅក្នុងបំណះត្រូវពិនិត្យឡើងវិញរួមជាមួយនឹងការត្រួតពិនិត្យអ្នកហៅចូល និងការផ្សព្វផ្សាយករណីលើកលែង។ S5

ការជួសជុលដែលទាក់ទងគ្នាច្រើនផ្នែកក៏រួមបញ្ចូលផងដែរនូវការត្រួតពិនិត្យការប្រមូលដោយផ្អែកលើបរិមាណអានជាក់ស្តែង កាត់បន្ថយដំណើរការនៃបឋមកថាដែលគ្មានប្រយោជន៍ ឬស្ទួន និងការទទួលយកតក្កវិជ្ជាការចាកចេញស្របគ្នា និងការសម្អាតនៅពេលដែល OOM កំពុងរង់ចាំ។ ការផ្លាស់ប្តូរទាំងនេះទាំងពីរកាត់បន្ថយការពង្រីកធនធាន និងធ្វើឱ្យអ្នកញែកអនុលោមតាមពិធីការ OOM ថ្មី។ S5

សម្រាប់​ក្រុម​ដែល​រក្សា​សាខា​របស់​ពួកគេ​បាន​ត្រូវ​ផ្ដល់​អនុសាសន៍​ថា​បញ្ហា​ខាង​ក្រោម​គឺ​ជា​ការ​ផ្តោត​លើ​ការ​ពិនិត្យ​កូដ​៖

  • តើ​រដ្ឋ​អាច​មើល​ឃើញ​ដល់​ពិភព​ខាងក្រៅ​មុន​ពេល​ដែល​វា​ត្រូវ​បាន​គេ​ចាប់​ផ្ដើម​ពេញ​លេញ​ឬ?
  • បន្ទាប់​ពី​ការ​បែងចែក​បរាជ័យ ឬ​ការ​លើក​លែង​ការ​ហៅ​ត្រឡប់​វិញ តើ​កម្មសិទ្ធិ​នៅ​តែ​មាន​លក្ខណៈ​ពិសេស និង​មិន​ច្បាស់​លាស់​ទេ?
  • តើ​អ្នក​អាច​ឈាន​ដល់​ច្រក​ចេញ​នៃ​ការ​សម្អាត​រួម​គ្នា​បាន​ទេ ប្រសិន​បើ​អ្នក​បរាជ័យ​ពាក់​កណ្តាល​ផ្លូវ?
  • តើ​មុខងារ​សម្អាត​អាច​ទទួល​ស្គាល់​វាល​ដែល​មិន​បាន​បង្កើត​ឡើង ឬ​បាន​ដោះលែង​ទេ?
  • តើថវិកាវិភាគផ្អែកលើបរិមាណដំណើរការជាក់ស្តែង មិនមែនគ្រាន់តែជាការអះអាងនៃសំណើការជឿទុកចិត្តទេ?
  • តើតម្លៃត្រឡប់ការបរាជ័យថ្មីត្រូវបានដោះស្រាយដោយអ្នកហៅចូលទាំងអស់ទេ?

ទាំងនេះគឺជាសំណួរពិនិត្យឡើងវិញដែលសង្ខេបដោយផ្អែកលើយន្តការជួសជុល ហើយមិនមែនជាការសន្និដ្ឋាននៃសវនកម្មដែលបានបញ្ចប់សម្រាប់មូលដ្ឋានកូដដែលមិនបានផ្ដល់ឱ្យនោះទេ។

6.4 ការជួសជុលសំណើឆ្លងកាត់៖ ការចាប់ផ្ដើមមុន ការសម្អាតចុងក្រោយនៅពេលក្រោយ

ដែលត្រូវគ្នាទៅនឹង CVE-2026-109619 បំណះនេះកែតម្រូវព្រំដែននៃវដ្តជីវិតជាច្រើនក្នុងពេលតែមួយ។ ឯកសារ និងប្រតិបត្តិការដែលបានរាយខាងក្រោមយក PHP 8.5 ខុសគ្នាជាឧទាហរណ៍។ S5

ទីតាំងផ្លាស់ប្តូរទិសដៅបញ្ហាត្រូវបានដោះស្រាយ
Zend/zend_execute_API.c ជាដើម។កំណត់ស្ថានភាពប្រតិបត្តិឡើងវិញដូចជា កំហុស ករណីលើកលែង អ្នកគ្រប់គ្រង វត្ថុ ។ល។បន្ទាប់ពីសំណើបញ្ចប់ វានៅតែមានឯកសារយោងចាស់ៗដែលអាចចូលប្រើបានដោយសំណើបន្ទាប់។
ផ្លូវចាប់ផ្តើមនៃ main/main.cហៅ php_basic_early_rinit() មុនពេល SAPI ត្រូវបានធ្វើឱ្យសកម្មនៅពេលដែលអ្នកប្រើប្រាស់ដំបូងកើតឡើង ស្ថានភាពមូលដ្ឋានដែលពាក់ព័ន្ធមិនទាន់ត្រូវបានចាប់ផ្តើមនៅឡើយ។
ផ្លូវបិទ main/main.cបំផ្លាញ HTTP globals ហើយសម្គាល់វាថាមិនបានកំណត់តម្លៃដែលបានចេញផ្សាយនៅតែត្រូវបានចាត់ទុកថាជាវត្ថុត្រឹមត្រូវ។
មុនពេលសំណើត្រូវបានដោះលែងសម្អាតសារកំហុសចុងក្រោយម្តងទៀតការ​វិភាគ​ការ​សម្អាត​យឺត​នឹង​បង្កើត​ឡើង​វិញ​នូវ​ស្ថានភាព​បញ្ហា
ext/session/session.cដំណើរការផ្ទុកឡើង ផ្លូវដំបូងត្រូវបានចាប់ផ្តើមសម័យដំបូងជាសកលម៉ូឌុលធម្មតា RINIT ពីមុនបានចូលប្រើស្ថានភាពចាស់
លេខ​កូដ​ដែល​ទាក់ទង​នឹង​សៀរៀលកំណត់ការញែកថ្នាក់ និងការហៅត្រឡប់មកវិញរបស់អ្នកប្រើក្នុងដំណើរការដំបូងប្រតិបត្តិកូដអ្នកប្រើប្រាស់បន្ថែម នៅពេលដែលការចាប់ផ្តើមមិនទាន់បានបញ្ចប់

ឧទាហរណ៍ លំដាប់នៃការចាប់ផ្តើមរួមមានៈ

zend_activate();
php_basic_early_rinit();
sapi_activate();

បន្ទាប់ពី HTTP globals ត្រូវបានបំផ្លាញ បន្ថែមសញ្ញាបរាជ័យនៃស្ថានភាព៖

zval_ptr_dtor(&PG(http_globals)[i]);
ZVAL_UNDEF(&PG(http_globals)[i]);

ការដកស្រង់ទាំងនេះបង្ហាញពីគោលការណ៍ពីរ៖ initialize មុនពេលអ្នកប្រើប្រាស់ដែលអាចធ្វើបានមុនគេបំផុត និងធ្វើការសម្អាតចុងក្រោយបន្ទាប់ពីប្រតិបត្តិការចុងក្រោយដែលអាចបង្កើតស្ថានភាពឡើងវិញ។ កំណត់ទ្រនិចឡើងវិញតែក្នុងអំឡុងពេលធម្មតា RINIT ឬដំណាក់កាលបិទមុននេះ។ អាចខកខានការចូលប្រើមុន ឬក្រោយ។ S5

6.5 ហេតុអ្វីបានជាវាមិនត្រូវបានណែនាំអោយធ្វើ “ការជួសជុលមួយខ្សែ” ដោយខ្លួនឯង?

ការជំនួស zend_bailout() ទាំងអស់ជាមួយ _exit() ឬគ្រាន់តែបន្ថែមការពិនិត្យមើលទ្រនិចទទេនៅធាតុជាក់លាក់មួយនឹងពង្រីកបរិបទប្រតិបត្តិផ្សេងៗគ្នាជាច្រើន។ ពួកគេអាចនឹងលុបចោលវាលស្ថានភាពផ្សេងទៀត ឬពួកគេអាចផ្លាស់ប្តូរការបំផ្លិចបំផ្លាញ ពង្រីកការហៅត្រឡប់មកវិញ ដំណើរការបង្ហោះ និងស្នើសុំបញ្ចប់អត្ថន័យ។

សម្រាប់កំណែដែលបានគាំទ្រ ការជួសជុលពេញលេញដែលត្រូវបានចេញផ្សាយរួចហើយមានអាទិភាព។ ការធ្វើចំណាកស្រុកនៃសាខាផ្ទាល់ខ្លួនគួរតែកត់ត្រាប្រភពនៃបំណះ ខ្សែបន្ទាត់មូលដ្ឋានដែលអាចអនុវត្តបាន ការដោះស្រាយជម្លោះ និងការផ្លាស់ប្តូរអាកប្បកិរិយា ហើយប្រើប្រាស់ករណីប្រើប្រាស់តំរែតំរង់ចរន្តដែលត្រូវគ្នា និងការផ្ទៀងផ្ទាត់ដំណើរការអាជីវកម្មនេះ។ ការផ្ដល់យោបល់នៅទីនេះបានមកពីការវិភាគលើវិសាលភាពនៃបំណះនៅទូទាំងអ្នកបែងចែក VM វគ្គ និងសំណើការផ្លាស់ប្តូរវដ្តជីវិត។ S4S5

7. ច្រកក្រោយសង្គ្រោះបន្ទាន់នៃ PHP 7.4, 8.0, 8.1

PHP ផ្តល់ជាផ្លូវការនូវប្រភពកូដប្រភពអប្បបរមានៃសាខាចាស់ចំនួនបីដោយផ្អែកលើភាពធ្ងន់ធ្ងរ។ ឈ្មោះសាខាគឺ៖

PHP-7.4-CVE-2026-109618-109619
PHP-8.0-CVE-2026-109618-109619
PHP-8.1-CVE-2026-109618-109619

សម្រាប់តំណភ្ជាប់សាខា សូមមើល S7S8S9 ។ ទាំងនេះគឺជាការចែកចាយបន្ទាន់សម្រាប់ភាពងាយរងគ្រោះនេះ ហើយមិនតំណាងឱ្យការវិលត្រឡប់ទៅកាន់ការគាំទ្រជាប្រចាំសម្រាប់សាខាចាស់នោះទេ ហើយក៏មិនជំនួសការធ្វើបច្ចុប្បន្នភាពសុវត្ថិភាពផ្សេងទៀតដែរ។ S1

7.1 យក PHP 8.1 backport ជាឧទាហរណ៍

ការដាក់ស្នើដែលពាក់ព័ន្ធសម្រាប់ PHP 8.1 គឺ៖

1d7dec178a094e6e75b229ce22754045f8c6070a

យុទ្ធសាស្រ្តរបស់វាអនុគ្រោះដល់ការបរាជ័យយ៉ាងឆាប់រហ័ស៖ ការហៅទូរស័ព្ទទៅ _exit(1) បន្ទាប់ពីចេញលទ្ធផលរោគវិនិច្ឆ័យនៅក្នុងផ្លូវ OOM ដែលត្រូវគ្នា និងរួមទាំងស្ថានភាពសកល និងការកែតម្រូវដែលពាក់ព័ន្ធផ្សេងទៀត។ ខណៈពេលដែលខាងក្នុងបិទដំណើរការដែលត្រូវគ្នានៃដំណើរការផ្ទុកឡើងវគ្គ។ សម្រាប់ការដាក់ស្នើកូដប្រភពដែលពាក់ព័ន្ធ សូមមើល S6 ។

នេះគឺជាភាពខុសគ្នានៃអាកប្បកិរិយាពីការរចនា OOM ដែលបានពន្យារពេលពេញលេញនៅក្នុងសាខាដែលគាំទ្រ។ ដោយសារតែការកំណត់រចនាសម្ព័ន្ធនៅតែបង្ហាញថាដំណើរការផ្ទុកឡើងត្រូវបានបើក វាមិនមានន័យថាឥរិយាបថដំណើរការខាងក្នុងបន្ទាប់ពី backport នេះនឹងនៅតែមិនផ្លាស់ប្តូរនោះទេ។

7.2 តម្លៃដែលអ្នកត្រូវទទួលយកនៅពេលដាក់ពង្រាយ

ការចាកចេញពីដំណើរការដោយផ្ទាល់អាចបណ្តាលឱ្យសំណើបច្ចុប្បន្នបរាជ័យ ដោយរំលងការបិទការហៅត្រឡប់ PHP ធម្មតា និងផ្នែកនៃការបិទកម្មវិធី។ ប្រសិនបើម៉ាស៊ីនទទួលយកគំរូខ្សែស្រឡាយ វាក៏ចាំបាច់ដើម្បីវាយតម្លៃផលប៉ះពាល់នៃដំណើរការម៉ាស៊ីនទាំងមូលចេញពីការងារដំណាលគ្នាផ្សេងទៀត។ ថាតើអ្នកគ្រប់គ្រងដំណើរការអាចទាញដំណើរការជំនួសទាន់ពេលក៏គួរតែត្រូវបានរួមបញ្ចូលនៅក្នុងការផ្ទៀងផ្ទាត់ផងដែរ។

ដូច្នេះ អ្នក​ប្រើ​កំណែ​ចាស់​គួរ​ពិចារណា​តាម​លំដាប់​លំដោយ៖

  1. ផ្ទេរទៅសាខា PHP ដែលគាំទ្រ និងកំណែថេររបស់វា។
  2. ប្រើការចេញផ្សាយដែលគ្របដណ្តប់យ៉ាងច្បាស់ទាំង CVE ឬការធ្វើបច្ចុប្បន្នភាពក្រុមហ៊ុនផលិត LTS ។
  3. ប្រសិនបើវាពិតជាស្ថិតនៅក្រោមកំណែចាស់នៃកូដប្រភព សូមប្រើ backport សង្គ្រោះបន្ទាន់ផ្លូវការនៃកំណែដែលត្រូវគ្នាដើម្បីផ្ទៀងផ្ទាត់ការផ្លាស់ប្តូរពេញលេញ និងភាពឆបគ្នា ហើយរៀបចំការផ្លាស់ប្តូរជាបន្តបន្ទាប់។

“របាយការណ៍ខាងក្រោយអប្បបរមា” នៅទីនេះពិពណ៌នាអំពីភាពឆបគ្នា និងវិសាលភាពនៃការអនុវត្តដែលត្រូវបានជ្រើសរើសដោយមន្ត្រី ហើយមិនគួរត្រូវបានបកស្រាយដោយស្វ័យប្រវត្តិថាជា “ការដោះស្រាយភាពងាយរងគ្រោះមិនពេញលេញដែលគេស្គាល់” នោះទេ។ អ្នកគួរតែវិនិច្ឆ័យដោយផ្អែកលើកូដប្រភពនៃសាខាដែលត្រូវគ្នា និងការប្រកាសរបស់អ្នកផលិត ហើយកុំលុបការផ្លាស់ប្តូរដែលគាំទ្រដោយខ្លួនឯងឡើយ។ S1S6

8. លក្ខណៈវិនិច្ឆ័យនៃការទទួលយក និងការត្រួតពិនិត្យតាមដាន

វាត្រូវបានណែនាំថាលទ្ធផលខាងក្រោមត្រូវបានប្រើជាមូលដ្ឋានសម្រាប់ការបញ្ចប់ការជួសជុលនេះ៖

ធាតុទទួលយកស្តង់ដារនៃការបញ្ចប់
គ្របដណ្តប់ភាពងាយរងគ្រោះប្រកាសបង្កើត ឬអ្នកលក់ជួសជុល CVE-2026-109618 និង CVE-2026-109619
ការគ្របដណ្តប់លើការដាក់ពង្រាយវិបផតថល អាង សេវាកម្ម និងឧបករណ៍ចម្លងទាំងអស់ប្រើពេលដំណើរការដែលបានជួសជុល
ដំណើរការមានប្រសិទ្ធិភាពកម្មករចាស់ ដំណើរការម៉ាស៊ីនចាស់ និងកុងតឺន័រចាស់ចេញទាំងអស់។
ការផ្ទៀងផ្ទាត់សំណើពិតប្រាកដបានបញ្ជាក់ SAPI សាងសង់ និងកំណត់រចនាសម្ព័ន្ធជាមួយតំណ Web ពិតប្រាកដ ដើម្បីលុបបំបាត់ការដឹកនាំមិនត្រឹមត្រូវនៃឃ្លាំងសម្ងាត់
ភាពអាចរកបានអាជីវកម្មមុខងារសំខាន់ៗដូចជា សម័យ ការផ្ទុកឡើង ការនាំចូល និងការដោះស្រាយកំហុសបានត្រលប់មកវិញជាធម្មតា។
ការបញ្ចប់វិធានការបណ្តោះអាសន្នការ​ចងចាំ​គ្មាន​ដែន​កំណត់ និង​ការ​កំណត់​រចនាសម្ព័ន្ធ​កែច្នៃ​របស់​កម្មករ​ខ្លាំង​ត្រូវ​បាន​ស្ដារ​ឡើង​វិញ​តាម​ផែនការ​សមត្ថភាព ឬ​មាន​ហេតុផល​ច្បាស់លាស់​សម្រាប់​ការ​រក្សា​ទុក
ភស្តុតាងនៃការផ្លាស់ប្តូរកត់ត្រាកំណែកញ្ចប់ ឬរូបភាពសង្ខេប វិសាលភាពធ្វើបច្ចុប្បន្នភាព ពេលវេលាបញ្ចប់ និងលទ្ធផលផ្ទៀងផ្ទាត់

ខាងលើ​នេះ​ជា​ការ​ណែនាំ​សម្រាប់​ការ​អនុវត្ត។ ប្រសិនបើអ្នកត្រូវការផ្ទៀងផ្ទាត់ឥរិយាបថ OOM ការចេញមិនធម្មតា ឬបំណះផ្ទាល់ខ្លួន អ្នកគួរតែប្រើការធ្វើតេស្តតំរែតំរង់ខាងលើ ឬការបញ្ចូលកំហុសដែលបានគ្រប់គ្រងនៅក្នុងបរិយាកាសដាច់ស្រយាល ដើម្បីជៀសវាងការបង្កើតការហត់នឿយក្នុងការចងចាំម្តងហើយម្តងទៀតនៅក្នុងបរិយាកាសផលិតកម្មជាវិធីសាស្ត្រទទួលយក។

សូមពិនិត្យមើលផងដែរនូវ PHP ធ្ងន់ធ្ងរ ការគាំងកម្មករ ការចាប់ផ្ដើមឡើងវិញមិនប្រក្រតី អត្រាស្នើសុំកំហុស និងព្រឹត្តិការណ៍ WAF មុន និងក្រោយការធ្វើបច្ចុប្បន្នភាព។ កំណត់ហេតុអាចផ្តល់តម្រុយស៊ើបអង្កេតតែប៉ុណ្ណោះ៖ ការកើតឡើងនៃ OOM មិនមែនមានន័យថាវាត្រូវបានកេងប្រវ័ញ្ចនោះទេ ហើយការខ្វះខាតសំឡេងរោទិ៍មិនបង្ហាញថាគ្មានការកេងប្រវ័ញ្ចបានកើតឡើងនោះទេ។ ការអាប់ដេតជួសជុលផ្លូវងាយរងគ្រោះដែលអាចទៅដល់នៅពេលអនាគត។ ប្រសិនបើភាពមិនប្រក្រតីដូចជាការលួចចម្លងឯកសារ ឬការលេចធ្លាយព័ត៌មានសម្ងាត់ត្រូវបានរកឃើញ ការស៊ើបអង្កេតឧប្បត្តិហេតុដាច់ដោយឡែកគួរតែត្រូវបានអនុវត្ត។

ឧបសម្ព័ន្ធ៖ ដកស្រង់ប្រភព និងតំណ

តំណប្រភពទាំងអស់ត្រូវបានប្រមូលនៅខាងក្រោម។ ការណែនាំ បំណះ និងការណែនាំរបស់អ្នកលក់ឆ្លុះបញ្ចាំងពីការត្រួតពិនិត្យគិតត្រឹមថ្ងៃ October 22, 2026; ការដាក់ពង្រាយជាបន្តបន្ទាប់គួរតែពិនិត្យមើលការអាប់ដេតរបស់អ្នកលក់។ ការដកស្រង់លេខនៅក្នុងអត្ថបទសំដៅលើធាតុទាំងនេះ។

S1 — PHP ព្រឹត្តិបត្រសុវត្ថិភាព និងកំណែជួសជុលផ្លូវការ

  • ប្រភព៖ Project PHP ថ្ងៃទី 21 ខែតុលា ឆ្នាំ 2026។
  • គោលបំណង៖ វិសាលភាពហានិភ័យ, កំណែជួសជុលផ្លូវការចំនួនបួន, វិធានការបណ្តោះអាសន្នផ្លូវការ និងការណែនាំអំពីរបាយការណ៍សង្គ្រោះបន្ទាន់សម្រាប់សាខាចាស់។
  • តំណភ្ជាប់៖ PHP 2026 This security bulletin ស្ថិតនៅក្នុងបណ្ណសារព្រឹត្តិបត្រប្រចាំឆ្នាំ

S2 — CVE-2026-109618 ព្រឹត្តិបត្របច្ចេកទេសផ្លូវការ

  • ប្រភព៖ php/php-src GitHub Security Advisory ថ្ងៃទី 21 ខែតុលា ឆ្នាំ 2026។
  • អត្តសញ្ញាណ៖ GHSA-w8hw-w9fx-j79w ។
  • គោលបំណង៖ ព្រំដែនគ្របដណ្តប់សម្រាប់ OOM ការពង្រីកពហុផ្នែក ភាពខុសគ្នា SAPI និងការបន្ធូរបន្ថយ។
  • តំណភ្ជាប់៖ RCE via OOM corruption

S3 — CVE-2026-109619 ព្រឹត្តិបត្របច្ចេកទេសផ្លូវការ

  • ប្រភព៖ php/php-src GitHub Security Advisory ថ្ងៃទី 21 ខែតុលា ឆ្នាំ 2026។
  • អត្តសញ្ញាណ៖ GHSA-6wmf-4rv5-p3rp ។
  • គោលបំណង៖ សំណើរឆ្លងរដ្ឋ អ្នកផលិត និងអ្នកប្រើប្រាស់ ការចាប់ផ្តើមដំបូង ការកាត់បន្ថយការកំណត់រចនាសម្ព័ន្ធ។
  • តំណភ្ជាប់៖ RCE via stale global state

S4 — PHP 8.5 ការបញ្ជូនជួសជុលជាផ្លូវការ

  • ប្រភព៖ php/php-src ។
  • ដាក់ស្នើ៖ 31c0ea7d7ff1d1fccb6492e52dab544011628065 ។
  • គោលបំណង៖ បញ្ជាក់ការបញ្ជូនជាផ្លូវការដើម្បីជួសជុលភាពងាយរងគ្រោះពីរក្នុងពេលតែមួយ និងពន្យល់ពីទិសដៅនៃការផ្លាស់ប្តូរទាំងមូល។
  • តំណភ្ជាប់៖ Avoid state corruption via bailout

S5 — PHP 8.5 បានស្ដារឡើងវិញជាផ្លូវការ និងខុសគ្នាទាំងស្រុង

  • ប្រភព៖ ខុសគ្នាពីឯកសារផ្លូវការដូចគ្នា។
  • គោលបំណង៖ ពិនិត្យមើលការអនុវត្តជាក់លាក់នៃអ្នកបែងចែក VM HTTP globals វគ្គ សៀរៀល និងវដ្តជីវិតស្នើសុំ។
  • តំណភ្ជាប់៖ official complete diff

S6 — PHP 8.1 ការបញ្ជូនសារសង្គ្រោះបន្ទាន់ជាផ្លូវការ

  • ប្រភព៖ php/php-src ។
  • ដាក់ស្នើ៖ 1d7dec178a094e6e75b229ce22754045f8c6070a ។
  • គោលបំណង៖ ពិនិត្យមើលការចាកចេញយ៉ាងរហ័សនៃសាខាចាស់ ហើយបង្ហោះការផ្លាស់ប្តូរឥរិយាបថដំណើរការ។
  • តំណភ្ជាប់៖ PHP 8.1 Emergency backport submission
  • តំណភ្ជាប់៖ corresponds to complete diff

S7 — PHP 7.4 សាខា backport សង្គ្រោះបន្ទាន់ផ្លូវការ

  • ប្រភព៖ php/php-src, PHP សាខាកូដប្រភពដែលបានរាយក្នុងព្រឹត្តិបត្រសុវត្ថិភាពផ្លូវការ។
  • តំណភ្ជាប់៖ PHP-7.4-CVE-2026-109618-109619

S8 — PHP 8.0 សាខា backport សង្គ្រោះបន្ទាន់ផ្លូវការ

  • ប្រភព៖ php/php-src, PHP សាខាកូដប្រភពដែលបានរាយក្នុងព្រឹត្តិបត្រសុវត្ថិភាពផ្លូវការ។
  • តំណភ្ជាប់៖ PHP-8.0-CVE-2026-109618-109619

S9 — PHP 8.1 សាខា backport សង្គ្រោះបន្ទាន់ផ្លូវការ

  • ប្រភព៖ php/php-src, PHP សាខាកូដប្រភពដែលបានរាយក្នុងព្រឹត្តិបត្រសុវត្ថិភាពផ្លូវការ។
  • តំណភ្ជាប់៖ PHP-8.1-CVE-2026-109618-109619

S10 — Ubuntu ព្រឹត្តិបត្រសុវត្ថិភាព USN-8948-1

  • ប្រភព៖ Canonical / Ubuntu ថ្ងៃទី 21 ខែតុលា ឆ្នាំ 2026។
  • គោលបំណង៖ ចេញផ្សាយ backport និងឧទាហរណ៍កំណែកញ្ចប់ពេញលេញ។
  • តំណភ្ជាប់៖ USN-8948-1: PHP vulnerabilities

S11 — សៀវភៅណែនាំ PHP-FPM Configuration

  • ប្រភព៖ PHP ឯកសារផ្លូវការ។
  • គោលបំណង៖ ការកំណត់រចនាសម្ព័ន្ធដូចជា php_admin_value, php_admin_flag, pm.max_requests ជាដើម។
  • តំណភ្ជាប់៖ PHP-FPM Configuration

S12 — PHP Core INI សៀវភៅណែនាំកំណត់រចនាសម្ព័ន្ធ

  • ប្រភព៖ PHP ឯកសារផ្លូវការ។
  • គោលបំណង៖ និយមន័យ និងវិសាលភាពនៃតួសំណើ ការបង្ហោះ អង្គចងចាំ និងការកំណត់រចនាសម្ព័ន្ធអាន POST ដោយស្វ័យប្រវត្តិ។
  • តំណភ្ជាប់៖ Description of core php.ini directives

S13 — Nginx ស្នើសុំដែនកំណត់ទំហំតួ

  • ប្រភព៖ Nginx ឯកសារផ្លូវការ។
  • គោលបំណង៖ អត្ថន័យនៃ client_max_body_size និងកម្រិតកំណត់រចនាសម្ព័ន្ធដែលមាន។
  • តំណភ្ជាប់៖ ngx_http_core_module / client_max_body_size

S14 — Nginx FastCGI សតិបណ្តោះអាសន្នសំណើ

  • ប្រភព៖ Nginx ឯកសារផ្លូវការ។
  • គោលបំណង៖ លំដាប់ដំណើរការ និងមុខងាររបស់ fastcgi_request_buffering ។
  • តំណភ្ជាប់៖ ngx_http_fastcgi_module / fastcgi_request_buffering

S15 — Nginx លក្ខខណ្ឌ និងការណែនាំត្រឡប់

  • ប្រភព៖ Nginx ឯកសារផ្លូវការ។
  • គោលបំណង៖ វាក្យសម្ព័ន្ធកំណត់រចនាសម្ព័ន្ធនៃ if និង return ។
  • តំណភ្ជាប់៖ ngx_http_rewrite_module

S16 — Cloudflare PHP2Shell ការណែនាំអំពីការការពារ

  • ប្រភព៖ Cloudflare ប្លក់ផ្លូវការ។
  • គោលបំណង៖ ការពិពណ៌នាអំពីវិសាលភាពនៃការដាក់ពង្រាយ WAF របស់ខ្លួន យន្តការរៀបចំផែនការ និងយន្តការរាវរក Free ។
  • តំណភ្ជាប់៖ Cloudflare deploys protections against php2shell vulnerability