PHP ဘာသာစကားအတွက် static analyzer Psalm 3.12 ကို ထုတ်ဝေသည်။ PHP 8.0 ၏ Alpha ထုတ်ဝေမှု

Vimeo ကုမ္ပဏီ ထုတ်ဝေခဲ့သည် static analyzer ၏အသစ်ထွက်ရှိခြင်း။ ဆာလံ 3.12PHP ကုဒ်တွင် သိသာထင်ရှားပြီး သိမ်မွေ့သောအမှားများကို ခွဲခြားသိမြင်နိုင်သည့်အပြင် အချို့သောအမှားအမျိုးအစားများကို အလိုအလျောက်ပြင်ပေးနိုင်သည်။ စနစ်သည် အမွေအနှစ်ကုဒ်နှင့် PHP ၏ အကိုင်းအခက်အသစ်များတွင် မိတ်ဆက်ထားသော ခေတ်မီအင်္ဂါရပ်များကို အသုံးပြုသည့် ကုဒ်များတွင် ပြဿနာများကို ဖော်ထုတ်ရန်အတွက် သင့်လျော်သည်။ ပရောဂျက်ကုဒ်ကို PHP နဲ့ရေးထားတယ်။ ဖြန့်ဝေသည် MIT လိုင်စင်အောက်တွင်။

ဆာလံသည် မှားယွင်းသောအမျိုးအစားအသုံးပြုမှုအပြင် အမျိုးမျိုးသောပြဿနာအများစုကို ဖော်ပြသည်။ ပုံမှန်အမှားများ. ဥပမာအားဖြင့်၊ ၎င်းသည် စကားရပ်တစ်ခုတွင် မတူညီသောအမျိုးအစားများ၏ variable များကို ရောနှောခြင်း၊ မမှန်သော ယုတ္တိဗေဒစစ်ဆေးမှုများ (ဥပမာ “if ($a && $a) {}”၊ “if ($a && !$a) {}” နှင့် “ ကဲ့သို့သော သတိပေးချက်များကို ပံ့ပိုးပေးပါသည်။ if ($a) {} elseif ($a) {}")၊ အရာဝတ္ထုဂုဏ်သတ္တိများကို အစပြုခြင်း မပြည့်စုံပါ။ ခွဲခြမ်းစိတ်ဖြာသူသည် multi-threaded မုဒ်တွင်အလုပ်လုပ်သည်။ နောက်ဆုံးစကင်ဖတ်ပြီးနောက် ပြောင်းလဲသွားသော ဖိုင်များကိုသာ ခွဲခြမ်းစိတ်ဖြာနိုင်သည့် တိုးမြင့်စကင်န်များကို လုပ်ဆောင်နိုင်သည်။

ထို့အပြင်၊ ခွင့်ပြုရန် လုံခြုံသော ပရိုဂရမ်းမင်းကိရိယာများကို ပံ့ပိုးပေးထားသည်။ သုံးစွဲဖို့ ဖော်မတ်ရှိ မှတ်ချက်များ Docblock (“/** @var Type */”) ပြောင်းလဲနိုင်သော အမျိုးအစားများ၊ ပြန်ပို့သည့် တန်ဖိုးများ၊ လုပ်ဆောင်ချက် ကန့်သတ်ချက်များ၊ အရာဝတ္ထု ဂုဏ်သတ္တိများအကြောင်း အချက်အလက်များ ပေးဆောင်ရန်။ အမျိုးအစားအသုံးပြုမှုပုံစံများကို သတ်မှတ်ခြင်းနှင့် အခိုင်အမာထုတ်ပြန်ချက်များကို အသုံးပြုခြင်းတို့ကိုလည်း ပံ့ပိုးပေးထားသည်။ ဥပမာအားဖြင့်:

/** @var string|null*/
$a = foo();

/** @var စာတန်း $a*/
echo strpos($a၊ 'ဟဲလို');

/** @psalm-assert-if-true B$a */
function isValidB(A $a) : bool {
B&& $a->isValid();
}

တွေ့ရှိသောပြဿနာများကို အလိုအလျောက်ဖယ်ရှားပေးရန်အတွက် Psalter utility ကို ပံ့ပိုးပေးထားပြီး plugins များနှင့် ဒါဟာခွင့်ပြု ဘုံကုဒ်ပြဿနာများကိုဖြေရှင်းရန်၊ အမျိုးအစားမှတ်စာများထည့်ကာ အတန်းများကို namespace တစ်ခုမှ အခြားတစ်ခုသို့ ရွှေ့ခြင်း၊ အတန်းများကြားနည်းလမ်းများကို ရွှေ့ခြင်းနှင့် အတန်းများနှင့် နည်းလမ်းများအမည်ပြောင်းခြင်းစသည့် ကိုင်တွယ်ဖြေရှင်းမှုများကို လုပ်ဆောင်ပါ။

ဆာလံစာစောင်အသစ်တွင်၊ အကောင်အထည်ဖော်ခဲ့သည်။ "--taint-analysis" option သည် အသုံးပြုသူထံမှ လက်ခံရရှိသော input parameters များ (ဥပမာ၊ $_GET['name']) နှင့် ဇာတ်ကောင်များလွတ်မြောက်ရန် လိုအပ်သောနေရာများတွင် ၎င်းတို့၏အသုံးပြုမှုကို ခြေရာခံနိုင်စေသည် (ဥပမာ၊ သံယောင် " $အမည် ") အလယ်အလတ်တာဝန်များနှင့် လုပ်ဆောင်ချက်ခေါ်ဆိုမှုများ၏ ခြေရာခံကွင်းဆက်များအပါအဝင်။ Associative Arrays များကို $_GET၊ $_POST နှင့် $_COOKIE တို့ကို အသုံးပြုခြင်းသည် အန္တရာယ်ရှိနိုင်ချေရှိသော အချက်အလက်များ၏ ရင်းမြစ်များအဖြစ် ယူဆသော်လည်း ဖြစ်နိုင်သည် အဓိပ်ပါယျ ကိုယ်ပိုင်အရင်းအမြစ်များ။ ထွက်ပြေးခြင်း ခြေရာခံခြင်း လိုအပ်သည့် လုပ်ဆောင်ချက်များတွင် HTML အကြောင်းအရာကို ဖန်တီးပေးသည့် အထွက် လုပ်ဆောင်ချက်များ၊ HTTP ခေါင်းစီးများ ပေါင်းထည့်ခြင်း သို့မဟုတ် SQL မေးမြန်းမှုများကို လုပ်ဆောင်ခြင်း ပါဝင်သည်။

echo၊ exec၊ include နှင့် header ကဲ့သို့သော လုပ်ဆောင်ချက်များကို အသုံးပြုသည့်အခါ မှန်ကန်ကြောင်း အတည်ပြုခြင်းကို အသုံးပြုသည်။ လွတ်မြောက်ရန် လိုအပ်မှုကို ပိုင်းခြားစိတ်ဖြာသည့်အခါ၊ စာသား၊ SQL၊ HTML နှင့် Shell ကုဒ်ပါသော စာသားအမျိုးအစားများ၊ အထောက်အထားစိစစ်ခြင်းဆိုင်ရာ ဘောင်များပါသော စာကြောင်းများကို ထည့်သွင်းစဉ်းစားသည်။ အဆိုပြုထားသောမုဒ်သည် သင့်အား cross-site scripting (XSS) သို့မဟုတ် SQL အစားထိုးခြင်းဆီသို့ ဦးတည်စေသော ကုဒ်များတွင် အားနည်းချက်များကို ဖော်ထုတ်နိုင်စေပါသည်။

ထို့အပြင်၎င်းကိုမှတ်သားနိုင်သည်။ အစ PHP 8.0 ဌာနခွဲအသစ်၏ alpha စမ်းသပ်ခြင်း။ ရုံတင်ပြသမည့်ရက်ကို နိုဝင်ဘာ ၂၆ ရက်၌ ပြုလုပ်ရန် စီစဉ်ထားသည်။ ဘဏ်ခွဲအသစ်တွင် အောက်ပါတို့ကို မျှော်လင့်ထားသည်။ တီထွင်ဆန်းသစ်မှုများကဲ့သို့သော:

  • ပါဝင် JIT compilerကုန်ထုတ်စွမ်းအားကို တိုးတက်စေမည့် အသုံးချမှု၊
  • ထောက်ပံ့ သမဂ္ဂအမျိုးအစားများအမျိုးအစား နှစ်မျိုး သို့မဟုတ် ထို့ထက်ပိုသော စုစည်းမှုများကို သတ်မှတ်ခြင်း (ဥပမာ၊ “အများပြည်သူဆိုင်ရာ လုပ်ဆောင်မှု foo(Foo|Bar $input): int|float;”)။
  • ထောက်ပံ့ ဂုဏ်တော်များ Docblock syntax ကို အသုံးမပြုဘဲ အတန်းများနှင့် မက်တာဒေတာ (အမျိုးအစား အချက်အလက်များ ကဲ့သို့သော) ချိတ်ဆက်ရန် ခွင့်ပြုသော (မှတ်ချက်များ)။
  • အတိုကောက်အထားအသို class အဓိပ္ပါယ်ဖွင့်ဆိုချက်များသည် constructor နှင့် properties ၏အဓိပ္ပါယ်ကို ပေါင်းစပ်နိုင်စေပါသည်။
  • အသစ်ပြန်အမ်းအမျိုးအစား - တည်ငြိမ်သော.
  • အမျိုးအစားအသစ် - ရောထွေးလုပ်ဆောင်ချက်တစ်ခုသည် မတူညီသောအမျိုးအစားများ၏ ကန့်သတ်ဘောင်များကို လက်ခံခြင်းရှိမရှိ ဆုံးဖြတ်ရန် အသုံးပြုနိုင်သည်။
  • စကားရပ် ပစ်ခြင်း ခြွင်းချက်များကိုကိုင်တွယ်ရန်။
  • WeakMap အမှိုက်စုဆောင်းစဉ်အတွင်း စွန့်လွှတ်နိုင်သော အရာများကို ဖန်တီးရန် (ဥပမာ၊ မလိုအပ်သော ကက်ရှ်များကို သိမ်းဆည်းရန်)။
  • အခွင့်အရေး အရာဝတ္ထုများ (get_class()) ဟုခေါ်သော တူညီသောအသုံးအနှုန်းအတွက် “::class” ကို အသုံးပြုခြင်း။
  • အခွင့်အရေး ကိန်းရှင်များနှင့် မသက်ဆိုင်သော ခြွင်းချက်များ၏ ဖမ်းဆုပ်မှုဆိုင်ရာ အဓိပ္ပါယ်ဖွင့်ဆိုချက်များ။
  • အခွင့်အရေး လုပ်ဆောင်ချက် ကန့်သတ်ချက်များစာရင်းရှိ နောက်ဆုံးဒြပ်စင်ပြီးနောက် ကော်မာတစ်ခုချန်ထားပါ။
  • အင်တာဖေ့စ်အသစ် ကြိုးတပ်လို့ရတယ်။ string အမျိုးအစားများ သို့မဟုတ် ဒေတာကို string တစ်ခုအဖြစ်သို့ ပြောင်းလဲနိုင်သည့် မည်သည့် string အမျိုးအစားကိုမဆို ခွဲခြားသတ်မှတ်ရန် ( __toString() method ကိုရရှိနိုင်သည်)။
  • အင်္ဂါရပ်အသစ် str_contains()string တစ်ခု၏အစနှင့်အဆုံးတွင်ကိုက်ညီမှုများကိုစစ်ဆေးရန်အတွက် str_starts_with() နှင့် str_ends_with() ၏လုပ်ဆောင်ချက်များကိုဆုံးဖြတ်ရန်အတွက် strpos ၏ရိုးရှင်းသော analogue တစ်ခု။
  • လုပ်ဆောင်ချက်ကို ထည့်သွင်းထားသည်။ fdiv()သုညဖြင့် ပိုင်းခြားသည့်အခါ အမှားအယွင်းမဖြစ်စေဘဲ ခွဲခြင်းလုပ်ငန်းကို လုပ်ဆောင်သည်။
  • ပြောင်းသွားတယ်။ string joining logic။ ဥပမာအားဖြင့်၊ echo "sum:" ဟူသော စကားရပ်။ $a + $b' ကို ယခင်က 'echo ("sum:" . $a) + $b' ဟု အဓိပ္ပာယ်ရပြီး PHP 8 တွင် 'echo "sum:" ဟု သဘောထားပါမည်။ ($a + $b)'။
  • တင်းကျပ် ဂဏန်းသင်္ချာနှင့် ဘစ်လုပ်ဆောင်ချက်များကို စစ်ဆေးခြင်း ဥပမာ၊ စကားရပ်များ "[] % [42]" နှင့် "$object + 4" တို့သည် အမှားအယွင်းဖြစ်သွားလိမ့်မည်။
  • ဟိုဟာ မတူညီသော အပြေးများတစ်လျှောက် ထပ်တူတန်ဖိုးများကို ထိန်းသိမ်းထားသည့် တည်ငြိမ်သော စီခြင်း အယ်လဂိုရီသမ်။

source: opennet.ru

မှတ်ချက် Add