Famoahana ny Salamo 3.12, mpanadihady static ho an'ny fiteny PHP. Famoahana Alpha ny PHP 8.0

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

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ срСдства бСзопасного программирования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ mampiasa Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ 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, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΈ Tsy mamela ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² ΠΊΠΎΠ΄Π΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ манипуляции, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ классов ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ пространства ΠΈΠΌΡ‘Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ классами, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Π½ΠΈΠ΅ классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

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

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

Fanampin'izany dia azo marihina izany manomboka Π°Π»ΡŒΡ„Π°-тСстирования Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ PHP 8.0. Π Π΅Π»ΠΈΠ· Π½Π°ΠΌΠ΅Ρ‡Π΅Π½ Π½Π° 26 ноября. Π’ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ fanavaozanaToy ny hoe:

  • Mihodina JIT compiler, ny fampiasana azy dia hanatsara ny famokarana.
  • fanohanana karazana sendika, mamaritra ny fanangonana karazana roa na maromaro (ohatra, "asa ho an'ny daholobe foo(Foo|Bar $ input): int|float;").
  • fanohanana toetra (fanazavana) izay ahafahanao mamatotra metadata (toy ny fampahalalana karazana) amin'ny kilasy nefa tsy mampiasa syntax Docblock.
  • Syntax nohafohezina famaritana kilasy, mamela anao hanambatra ny famaritana ny constructor sy ny fananana.
  • Karazana fiverenana vaovao - voasakantsakan'ny.
  • Karazana vaovao - mifangaro, izay azo ampiasaina hamaritana raha manaiky ny masontsivana isan-karazany ny asa iray.
  • teny manary hiatrehana ny exception.
  • WeakMap mba hamoronana zavatra azo atao sorona mandritra ny fanangonana fako (ohatra, mba hitahiry cache tsy ilaina).
  • fahafahana mampiasa ny teny hoe ":: class" ho an'ny zavatra (mitovy amin'ny fiantsoana get_class()).
  • fahafahana famaritana ao amin'ny sakana fisamborana maningana izay tsy mifamatotra amin'ny miovaova.
  • fahafahana mamela faingo aorian'ny singa farany amin'ny lisitry ny masontsivana fiasa.
  • Interface vaovao azo tady hamantarana izay karazana tady na angona azo ovaina ho tady (izay misy ny fomba __toString()).
  • endri-javatra vaovao str_contains(), strpos analogue notsorina mba hamaritana ny fisian'ny zana-tsipΓ¬ka, ary koa ny fiasa str_starts_with() sy str_ends_with() mba hanamarinana ny lalao eo am-piandohana sy fiafaran'ny tady.
  • Nampiana endri-javatra fdiv(), izay manao asa fizarana tsy misy hadisoana raha zaraina aotra.
  • nanova lojika mampifandray tady. Ohatra, ny fitenenana 'echo "sum:" . $a + $b' dia nadika taloha hoe 'echo ("sum: " . $a) + $b', ary amin'ny PHP 8 dia raisina ho 'echo "sum: " . ($a + $b)'.
  • Mihenjana Ny fanamarinana ny asa arithmetika sy ny bitika, ohatra, dia miteraka hadisoana ny fitenenana "[] % [42]" sy "$object + 4".
  • ampiharina Algorithm fanasokajiana maharitra izay voatahiry ny filaharan'ny sanda mitovy amin'ny hazakazaka samihafa.

Source: opennet.ru

Add a comment