Սաղմոս 3.12-ի՝ PHP լեզվի ստատիկ անալիզատորի թողարկում: PHP 8.0-ի ալֆա թողարկում

Vimeo ընկերություն опубликовала ստատիկ անալիզատորի նոր թողարկում Սաղմոս 3.12, որը թույլ է տալիս բացահայտել PHP կոդի ինչպես ակնհայտ, այնպես էլ նուրբ սխալները, ինչպես նաև ավտոմատ կերպով ուղղել որոշ տեսակի սխալներ։ Համակարգը հարմար է ինչպես ժառանգական կոդի, այնպես էլ PHP-ի նոր ճյուղերում ներդրված ժամանակակից հնարավորությունների հայտնաբերման համար: Ծրագրի կոդը գրված է PHP և տարածվում է MIT լիցենզիայի ներքո:

Սաղմոսը բացահայտում է սխալ տեսակի օգտագործման հետ կապված խնդիրների մեծ մասը, ինչպես նաև տարբեր բնորոշ սխալներ. Օրինակ, այն աջակցում է արտահայտությունների մեջ տարբեր տեսակի փոփոխականներ խառնելու նախազգուշացումներին, սխալ տրամաբանական թեստերին (օրինակ՝ «if ($a && $a) {}», «if ($a && !$a) {}» և « if ($a) {} elseif ($a) {}"), օբյեկտի հատկությունների ոչ ամբողջական սկզբնավորումը: Անալիզատորն աշխատում է բազմաթելային ռեժիմով: Հնարավոր է կատարել աստիճանական սկանավորումներ, որոնք վերլուծում են միայն վերջին սկանավորումից հետո փոխված ֆայլերը:

Բացի այդ, ապահով ծրագրավորման գործիքներ են տրամադրվում՝ թույլ տալու համար օգտագործումը ծանոթագրություններ ձևաչափով Docblock («/** @var Type */») փոփոխականների տեսակների, վերադարձվող արժեքների, ֆունկցիայի պարամետրերի, օբյեկտի հատկությունների մասին տեղեկատվություն տրամադրելու համար: Աջակցվում է նաև տիպի օգտագործման օրինաչափությունների սահմանումը և հաստատման հայտարարությունների օգտագործումը: Օրինակ:

/** @var տող|null */
$a = foo();

/** @var տող $a */
echo strpos ($a, 'բարև');

/** @psalm-assert-if-true B $a */
ֆունկցիան isValidB(A $a): bool {
վերադարձնել $a օրինակ B && $a->isValid();
}

Գտնված խնդիրների վերացումը ավտոմատացնելու համար տրամադրվում է Psalter կոմունալ ծրագիրը, որն աջակցում է պլագիններին և թույլ է տալիս շտկել կոդերի ընդհանուր խնդիրները, ավելացնել տիպերի անոտացիաներ և կատարել այնպիսի մանիպուլյացիաներ, ինչպիսիք են դասերի տեղափոխումը մի անվանատարածքից մյուսը, մեթոդները դասերի միջև տեղափոխելը և դասերի ու մեթոդների վերանվանումը:

Սաղմոսի նոր համարում իրականացվել է «--taint-analysis» տարբերակը թույլ է տալիս հետևել օգտատերից ստացված մուտքային պարամետրերի (օրինակ՝ $_GET['name']) և դրանց օգտագործման միջև կապը այն վայրերում, որոնք պահանջում են նիշերի արտահոսք (օրինակ՝ արձագանք»: $name «), ներառյալ միջանկյալ հանձնարարությունների և գործառույթների զանգերի հետևման շղթաների միջոցով: $_GET, $_POST և $_COOKIE ասոցիատիվ զանգվածների օգտագործումը համարվում է պոտենցիալ վտանգավոր տվյալների աղբյուրներ, բայց դա նաև հնարավոր է. որոշումը սեփական աղբյուրները։ Գործողությունները, որոնք պահանջում են խուսափել հետևելուց, ներառում են ելքային գործողություններ, որոնք առաջացնում են HTML բովանդակություն, ավելացնում են HTTP վերնագրեր կամ կատարում են SQL հարցումներ:

Վավերացումն օգտագործվում է այնպիսի գործառույթներ օգտագործելիս, ինչպիսիք են echo, exec, include և header: Փախուստի անհրաժեշտությունը վերլուծելիս հաշվի են առնվում տվյալների տեսակները, ինչպիսիք են տեքստը, SQL, HTML և Shell կոդով տողերը, իսկորոշման պարամետրերով տողերը: Առաջարկվող ռեժիմը թույլ է տալիս բացահայտել կոդի խոցելիությունը, որը հանգեցնում է միջկայքի սկրիպտավորման (XSS) կամ SQL-ի փոխարինմանը:

Բացի այդ, կարող եք նշել սկիզբ Նոր PHP 8.0 մասնաճյուղի ալֆա փորձարկում: Թողարկումը նախատեսված է նոյեմբերի 26-ին։ Նոր մասնաճյուղում սպասվում են հետևյալը. նորամուծություններՈրպես

  • Միացրեց JIT կոմպիլյատոր, որոնց օգտագործումը կբարելավի արտադրողականությունը։
  • Աջակցություն միության տեսակները, սահմանելով երկու կամ ավելի տեսակի հավաքածուներ (օրինակ՝ «public function foo(Foo|Bar $input): int|float;»):
  • Աջակցություն հատկանիշները (անոտացիաներ), որոնք թույլ են տալիս կապել մետատվյալները (օրինակ՝ տեսակի տեղեկատվությունը) դասերին՝ առանց Docblock-ի շարահյուսություն օգտագործելու:
  • Կրճատված շարահյուսություն դասի սահմանումները, որոնք թույլ են տալիս համատեղել կոնստրուկտորի և հատկությունների սահմանումը:
  • Վերադարձի նոր տեսակ - ստատիկ.
  • Նոր տեսակ - խառը, որը կարող է օգտագործվել որոշելու համար, թե արդյոք ֆունկցիան ընդունում է տարբեր տեսակի պարամետրեր։
  • Արտահայտություն նետում կարգավորել բացառությունները:
  • WeakMap ստեղծել օբյեկտներ, որոնք կարող են զոհաբերվել աղբահանության ժամանակ (օրինակ՝ անհարկի քեշեր պահելու համար):
  • Հնարավորություն Օբյեկտների համար օգտագործելով «::class» արտահայտությունը (որը նման է get_class() կանչին):
  • Հնարավորություն սահմանումներ բացառությունների catch բլոկում, որոնք կապված չեն փոփոխականների հետ:
  • Հնարավորություն ֆունկցիայի պարամետրերի ցանկում վերջին տարրից հետո թողնելով ստորակետ:
  • Նոր ինտերֆեյս Լարային բացահայտել տողերի ցանկացած տեսակներ կամ տվյալներ, որոնք կարող են փոխարկվել տողի (որի համար հասանելի է __toString() մեթոդը):
  • Նոր գործառույթ str_contains(), strpos-ի պարզեցված անալոգը՝ ենթալարի առաջացումը որոշելու համար, ինչպես նաև str_starts_with() և str_ends_with() ֆունկցիաները՝ տողի սկզբում և վերջում համընկնումները ստուգելու համար։
  • Ավելացված հատկություն fdiv (), որը կատարում է բաժանման գործողություն՝ առանց զրոյի բաժանելիս սխալ գցելու։
  • Փոխվել է լարերի միացման տրամաբանություն. Օրինակ, «echo «sum:» արտահայտությունը: $a + $b'-ը նախկինում մեկնաբանվում էր որպես 'echo ("sum: " . $a) + $b', իսկ PHP 8-ում կվերաբերվի որպես 'echo "sum:" : ($a + $b)':
  • Խստացրեց ստուգելով թվաբանական և բիթային գործողությունները, օրինակ՝ «[] % [42]» և «$object + 4» արտահայտությունները կհանգեցնեն սխալի։
  • Իրականացվել է կայուն տեսակավորման ալգորիթմ, որում պահպանվում է նույնական արժեքների կարգը տարբեր վազքներում:

Source: opennet.ru

Добавить комментарий