PHP тили үчүн статикалык анализатор болгон Psalm 3.12 релизи. PHP 8.0 альфа релиз

Vimeo компаниясы жарыяланган статикалык анализатордун жаңы чыгарылышы Забур 3.12, бул PHP кодундагы ачык жана тымызын каталарды аныктоого, ошондой эле каталардын айрым түрлөрүн автоматтык түрдө оңдоого мүмкүндүк берет. Система PHPдин жаңы бөлүмдөрүндө киргизилген заманбап функцияларды колдонгон эски коддогу жана коддогу көйгөйлөрдү аныктоо үчүн ылайыктуу. Долбоордун коду PHP жана жазылган жайылуу MIT лицензиясы боюнча.

Забур туура эмес түрүн колдонуу менен байланышкан көйгөйлөрдүн көбүн, ошондой эле ар кандай аныктайт типтүү каталар. Мисалы, ал туюнтмадагы ар кандай түрдөгү өзгөрмөлөрдү аралаштыруу, туура эмес логикалык тесттер (мисалы, “if ($a && $a) {}”, “if ($a && !$a) {}" жана “ сыяктуу эскертүүлөрдү колдойт. if ( $a) {} elseif ($a) {}"), объекттин касиеттери толук эмес инициализация. Анализатор көп жиптүү режимде иштейт. Акыркы сканерлөөдөн кийин өзгөргөн файлдарды гана талдоочу кошумча сканерлөөлөрдү жүргүзүүгө болот.

Кошумча, коопсуз программалоо куралдары уруксат берүү үчүн берилет колдонуу үчүн форматтагы аннотациялар Докблок (“/** @var Type */”) өзгөрмөлөрдүн түрлөрү, кайтаруу маанилери, функциянын параметрлери, объект касиеттери жөнүндө маалымат берүү үчүн. Типти колдонуу үлгүлөрүн аныктоо жана ырастоо билдирүүлөрүн колдонуу да колдоого алынат. Мисалы:

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

/** @var сап $a */
echo strpos($a, 'салам');

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

Табылган көйгөйлөрдү жоюуну автоматташтыруу үчүн Psalter утилитасы берилген, ал плагиндерди жана Бул берет жалпы код көйгөйлөрүн чечүү, типке аннотацияларды кошуу жана класстарды бир аттар мейкиндигинен экинчисине жылдыруу, класстар арасында ыкмаларды жылдыруу жана класстардын жана методдордун атын өзгөртүү сыяктуу манипуляцияларды аткарыңыз.

Забурдун жаңы санында ишке ашырылган "--taint-analysis" опциясы колдонуучудан алынган киргизүү параметрлеринин (мисалы, $_GET['name']) жана алардын символдон качууну талап кылган жерлерде колдонулушунун ортосундагы байланышты байкоого мүмкүндүк берет (мисалы, echo " $name "), анын ичинде аралык тапшырмаларды жана функциялык чакырууларды көзөмөлдөө чынжырлары аркылуу. $_GET, $_POST жана $_COOKIE ассоциативдик массивдерин колдонуу коркунучтуу маалыматтардын булагы катары каралат, бирок ошондой эле мүмкүн определение өз булактары. Качууга көз салууну талап кылган аракеттерге HTML мазмунун түзүүчү, HTTP аталыштарын кошкон же SQL сурамдарын аткарган чыгаруу операциялары кирет.

Текшерүү echo, exec, include жана header сыяктуу функцияларды колдонууда колдонулат. Качуунун зарылдыгын талдоодо текст, SQL, HTML жана Shell коддору бар саптар, аутентификация параметрлери бар саптар сыяктуу маалымат түрлөрү эске алынат. Сунушталган режим сайттар аралык скрипттерге (XSS) же SQL алмаштырууга алып келген коддун кемчиликтерин аныктоого мүмкүндүк берет.

Мындан тышкары, белгилей кетүү керек баштап жаңы PHP 8.0 бутагынын альфа тестирлөө. Чыгаруу 26-ноябрга пландаштырылган. Жаңы филиалда төмөнкүлөр күтүлүүдө: инновацияларМисалы:

  • киргизүү JIT компилятору, аны пайдалануу эмгек ендурумдуулугун жогорулатат.
  • колдоо союз түрлөрү, эки же андан көп түрдөгү коллекцияларды аныктоо (мисалы, “коомдук функция foo(Foo|Bar $input): int|float;”).
  • колдоо атрибуттар (аннотациялар) Docblock синтаксисин колдонбостон, метадайындарды (мисалы, типтеги маалымат) класстарга байланыштырууга мүмкүндүк берет.
  • Кыскартылган синтаксис класс аныктамалары, конструктордун жана касиеттердин аныктамасын айкалыштырууга мүмкүндүк берет.
  • Жаңы кайтаруу түрү - статикалык.
  • Жаңы түрү - аралаш, бул функция ар кандай типтеги параметрлерди кабыл алаарын аныктоо үчүн колдонулушу мүмкүн.
  • билдирүү ыргытуу өзгөчөлүктөр менен иштөө.
  • WeakMap таштанды чогултуу учурунда курмандыкка чалына турган объекттерди түзүү (мисалы, керексиз кэштерди сактоо үчүн).
  • мүмкүнчүлүк объекттер үчүн “::класс” туюнтмасын колдонуу (get_class() чалууга окшош).
  • мүмкүнчүлүк өзгөрмөлөргө байланбаган өзгөчөлүктөрдү кармоо блогундагы аныктамалар.
  • мүмкүнчүлүк функциянын параметрлеринин тизмесиндеги акыркы элементтен кийин үтүр калтыруу.
  • Жаңы интерфейс Stringable сапка айландырыла турган ар кандай сап түрлөрүн же берилиштерди аныктоо үчүн (бул үчүн __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

Комментарий кошуу