Fa'asa'olotoina o le Salamo 3.12, o se su'esu'ega tumau mo le gagana PHP. Fa'asa'olotoga ole PHP 8.0

Компания Vimeo lomia Π½ΠΎΠ²Ρ‹ΠΉ выпуск статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Salamo 3.12, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹Π΅ ошибки Π² ΠΊΠΎΠ΄Π΅ Π½Π° языкС PHP, Π° Ρ‚Π°ΠΊΠΆΠ΅ автоматичСски ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ошибок. БистСма ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΊΠ°ΠΊ Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, Ρ‚Π°ΠΊ ΠΈ Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ соврСмСнныС возмоТности, появившиСся Π² Π½ΠΎΠ²Ρ‹Ρ… Π²Π΅Ρ‚ΠΊΠ°Ρ… PHP. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС PHP ΠΈ tufatufaina e i lalo ole laisene MIT.

Psalm опрСдСляСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ использованиСм Ρ‚ΠΈΠΏΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки. НапримСр, поддСрТиваСтся Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ смСшивании Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… логичСских ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ… (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Β«if ($a && $a) {}Β», Β«if ($a && !$a) {}Β» ΠΈ Β«if ($a) {} elseif ($a) {}Β»), Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Анализатор выполняСтся Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹, измСнившиСся с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ срСдства бСзопасного программирования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ faΚ»aaoga Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Docblock (Β«/** @var Type */Β») для прСдоставлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… значСниях, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, свойствах ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ поддСрТиваСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ шаблонов использования Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ assert. НапримСр:

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

/** @var string $a */
echo strpos($a, β€˜hello’);

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

Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ устранСния Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ прСдоставляСтся ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Psalter, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΈ e mafai ai ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΊΠΎΠ΄Π΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ манипуляции, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ классов ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ пространства ΠΈΠΌΡ‘Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ классами, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π½ΠΈΠ΅ классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π’ Π½ΠΎΠ²ΠΎΠΌ выпускС Psalm faatinoina опция Β«β€”taint-analysisΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, $_GET[β€˜name’]) ΠΈ ΠΈΡ… использованиСм Π² мСстах, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… экранирования символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, echo Β«<h1>$name</h1>Β»), Π² Ρ‚ΠΎΠΌ числС Ρ‡Π΅Ρ€Π΅Π· отслСТиваниС Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… присвоСний ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ качСствС источников ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасных Π΄Π°Π½Π½Ρ‹Ρ… рассматриваСтся использованиС ассоциативных массивов $_GET, $_POST ΠΈ $_COOKIE, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ faΚ»amatalaga собствСнных источников. Из дСйствий, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… отслСТивания экранирования, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°, приводящиС ΠΊ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML, добавлСнию HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ SQL-запросов.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° примСняСтся ΠΏΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ echo, exec, include ΠΈ header. ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ нСобходимости экранирования ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ тСкст, строки с SQL, HTML ΠΈ Shell-ΠΊΠΎΠ΄ΠΎΠΌ, строки с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ позволяСт Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ уязвимости Π² ΠΊΠΎΠ΄Π΅, приводящиС ΠΊ мСТсайтовому скриптингу (XSS) ΠΈΠ»ΠΈ подстановкС SQL-ΠΊΠΎΠ΄Π°.

E le gata i lea, e mafai ona matauina le amataga Π°Π»ΡŒΡ„Π°-тСстирования Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ PHP 8.0. Π Π΅Π»ΠΈΠ· Π½Π°ΠΌΠ΅Ρ‡Π΅Π½ Π½Π° 26 ноября. Π’ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ mea foupei:

  • Liliuina JIT compiler, o le faΚ»aaogaina o le a faΚ»aleleia ai le gaosiga.
  • lagolago ituaiga iuni, fa'amatala fa'aputuga e lua pe sili atu fo'i ituaiga (mo se fa'ata'ita'iga, β€œgaluega fa'alaua'itele foo(Foo|Bar $input): int|float;”).
  • lagolago uiga (fa'amatalaga) e fa'ataga ai oe e fusifusia metadata (pei o fa'amatalaga fa'ailoga) i vasega e aunoa ma le fa'aogaina o le Docblock syntax.
  • Fa'apuupuu fa'asologa fa'amatalaga vasega, fa'atagaina oe e tu'ufa'atasia le fa'auigaina o se faufale ma meatotino.
  • Ituaiga toe faafoi fou - fuainumera.
  • Ituaiga fou - fefiloi, lea e mafai ona fa'aoga e iloa ai pe talia e se galuega fa'amaufa'ailoga o ituaiga eseese.
  • FaΚ»aaliga togi e taulimaina tuusaunoaga.
  • Fa'afanua vaivai e fatu ai mea e mafai ona ositaulaga i le taimi o le aoina o lapisi (mo se faΚ»ataΚ»itaΚ»iga, e teu ai mea e le manaΚ»omia).
  • Avanoa faΚ»aaoga le faΚ»amatalaga ":: vasega" mo mea faitino (e tutusa ma le valaΚ»au get_class()).
  • Avanoa fa'auigaga ile poloka pu'e o tuusaunoaga e le o noatia i fesuiaiga.
  • Avanoa tu'u se koma pe a uma le elemene mulimuli i le lisi o fa'asologa o galuega.
  • Fa'aoga fou Stringable e iloa ai soΚ»o se ituaiga manoa poΚ»o faΚ»amatalaga e mafai ona liua i se manoa (lea e maua ai le __toString() auala).
  • Fa'ailoga fou str_contains(), o se fa'atusa faigofie o strpos mo le fuafuaina o le tupu mai o se substring, fa'apea fo'i galuega str_starts_with() ma str_ends_with() mo le siakiina o afitusi i le amataga ma le faaiuga o se manoa.
  • Fa'aopoopo galuega fdiv(), lea e fa'atino se fa'agaioiga vaevaega e aunoa ma le togiina o se mea sese pe a vaevae i le zero.
  • Suia manatu fa'afeso'ota'i manoa. Mo se faΚ»ataΚ»itaΚ»iga, o le faaupuga 'echo "sum:" . $a + $b' na faauigaina muamua o le 'echo ("sum: " . $a) + $b', ma i le PHP 8 o le a faΚ»aaogaina o le 'echo "sum: " . ($a + $b)'.
  • Faamauina siaki fa'asologa o numera ma fa'agaioiga, mo se fa'ata'ita'iga, o fa'amatalaga "[] % [42]" ma le "$object + 4" o le a i'u ai i se mea sese.
  • Fa'atinoina o se fa'avasegaga fa'amautu algorithm lea e fa'asaoina ai le fa'asologa o tau tutusa i ta'aloga eseese.

puna: opennet.ru

Faaopoopo i ai se faamatalaga