Ħruġ ta 'Salm 3.12, analizzatur statiku għal-lingwa PHP. Rilaxx Alpha ta' PHP 8.0

Kumpanija Vimeo ippubblikat rilaxx ġdid ta 'analizzatur statiku Salm 3.12, li jippermettilek tidentifika żbalji kemm ovvji kif ukoll sottili fil-kodiċi PHP, kif ukoll tikkoreġi awtomatikament xi tipi ta 'żbalji. Is-sistema hija adattata biex tidentifika problemi kemm fil-kodiċi legati kif ukoll f'kodiċi li juża karatteristiċi moderni introdotti f'fergħat ġodda tal-PHP. Il-kodiċi tal-proġett huwa miktub fil-PHP u imqassma minn taħt il-liċenzja MIT.

Salm jidentifika ħafna mill-problemi assoċjati ma 'użu ta' tip mhux korrett, kif ukoll diversi żbalji tipiċi. Pereżempju, jappoġġja twissijiet dwar it-taħlit ta’ varjabbli ta’ tipi differenti f’espressjoni, testijiet loġiċi mhux korretti (bħal “jekk ($a && $a) {}”, “jekk ($a && !$a) {}” u “ if ($a) {} elseif ($a) {}"), inizjalizzazzjoni mhux kompluta tal-proprjetajiet tal-oġġett. L-analizzatur jaħdem f'modalità multi-kamin. Huwa possibbli li jsiru skans inkrementali, li janalizzaw biss fajls li nbidlu mill-aħħar skan.

Barra minn hekk, għodod ta 'programmar siguri huma pprovduti biex jippermettu użu annotazzjonijiet fil-format Docblock (“/** @var Tip */”) biex tipprovdi informazzjoni dwar tipi varjabbli, valuri ta’ ritorn, parametri tal-funzjoni, proprjetajiet tal-oġġett. Id-definizzjoni ta' mudelli ta' użu tat-tip u l-użu ta' dikjarazzjonijiet ta' affermazzjoni hija appoġġjata wkoll. Pereżempju:

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

/** @var string $a */
echo strpos($a, 'hello');

/** @salm-assert-jekk-veru B $a */
il-funzjoni hijaValidB(A $a): bool {
ritorn $a instanceof B && $a->isValid();
}

Biex tiġi awtomatizzata l-eliminazzjoni ta 'problemi misjuba, hija pprovduta l-utilità Psalter, li tappoġġja plugins u tippermetti issolvi problemi ta' kodiċi komuni, żid annotazzjonijiet tat-tip, u wettaq manipulazzjonijiet bħal ċaqliq ta' klassijiet minn spazju tal-isem għal ieħor, ċaqliq ta' metodi bejn klassijiet, u tibdil tal-isem ta' klassijiet u metodi.

Fil-ħarġa l-ġdida tas-Salm implimentati l-għażla "--taint-analysis" tippermettilek li tintraċċa r-relazzjoni bejn il-parametri tal-input riċevuti mill-utent (per eżempju, $_GET['name']) u l-użu tagħhom f'postijiet li jeħtieġu l-ħarba tal-karattri (per eżempju, echo " $isem "), inkluż permezz ta' ktajjen ta' traċċar ta' inkarigi intermedji u sejħiet ta' funzjoni. L-użu ta' arrays assoċjati $_GET, $_POST u $_COOKIE huwa meqjus bħala sorsi ta' data potenzjalment perikoluża, iżda huwa wkoll possibbli determinazzjoni ta ' sorsi proprji. Azzjonijiet li jeħtieġu li jaħarbu t-traċċar jinkludu operazzjonijiet ta' output li jiġġeneraw kontenut HTML, iżidu headers HTTP, jew jeżegwixxu mistoqsijiet SQL.

Il-validazzjoni tintuża meta jintużaw funzjonijiet bħal echo, exec, include u header. Meta tiġi analizzata l-ħtieġa ta 'ħarba, tipi ta' dejta bħal test, kordi b'kodiċi SQL, HTML u Shell, kordi b'parametri ta 'awtentikazzjoni huma kkunsidrati. Il-mod propost jippermettilek tidentifika vulnerabbiltajiet fil-kodiċi li jwasslu għal cross-site scripting (XSS) jew sostituzzjoni SQL.

Barra minn hekk, tista 'tinnota Bidu ittestjar alfa tal-fergħa ġdida PHP 8.0. Ir-rilaxx huwa skedat għas-26 ta’ Novembru. Dawn li ġejjin huma mistennija fil-fergħa l-ġdida: innovazzjonijietbħal:

  • Inklużjoni kompilatur JIT, li l-użu tiegħu se jtejjeb il-produttività.
  • Appoġġ tipi ta' unjoni, li tiddefinixxi kollezzjonijiet ta' żewġ tipi jew aktar (per eżempju, “public function foo(Foo|Bar $input): int|float;”).
  • Appoġġ attributi (annotazzjonijiet) li jippermettulek torbot metadata (bħal informazzjoni tat-tip) ma' klassijiet mingħajr ma tuża s-sintassi ta' Docblock.
  • Sintassi mqassra definizzjonijiet tal-klassi, li jippermettulek tgħaqqad id-definizzjoni ta 'kostruttur u proprjetajiet.
  • Tip ta' ritorn ġdid - statiku.
  • Tip ġdid - mħallta, li jista 'jintuża biex jiddetermina jekk funzjoni taċċettax parametri ta' tipi differenti.
  • Espressjoni tarmi biex jimmaniġġaw eċċezzjonijiet.
  • WeakMap biex jinħolqu oġġetti li jistgħu jiġu sagrifikati waqt il-ġbir taż-żibel (per eżempju, biex jinħażnu caches mhux meħtieġa).
  • Opportunità bl-użu tal-espressjoni “::class” għall-oġġetti (analogu għas-sejħa get_class()).
  • Opportunità definizzjonijiet fil-blokk tal-qbid ta’ eċċezzjonijiet li mhumiex marbuta ma’ varjabbli.
  • Opportunità li tħalli virgola wara l-aħħar element fil-lista tal-parametri tal-funzjoni.
  • Interfaċċa ġdida Stringable biex tidentifika kwalunkwe tip ta' string jew data li tista' tiġi kkonvertita fi string (li għaliha l-metodu __toString() huwa disponibbli).
  • Karatteristika ġdida str_contains(), analogu simplifikat ta 'strpos għad-determinazzjoni tal-okkorrenza ta' substring, kif ukoll il-funzjonijiet str_starts_with() u str_ends_with() għall-iċċekkjar ta 'logħbiet fil-bidu u fit-tmiem ta' string.
  • Funzjoni miżjuda fdiv(), li twettaq operazzjoni ta 'diviżjoni mingħajr ma tarmi żball meta tiddividi b'żero.
  • Mibdul loġika li tgħaqqad is-sekwenza. Pereżempju, l-espressjoni 'echo "somma:" . $a + $b' qabel kien interpretat bħala 'echo ("somma: " . $a) + $b', u f'PHP 8 se jiġi ttrattat bħala "echo "somma: " . ($a + $b)'.
  • Issikkat l-iċċekkjar ta' operazzjonijiet aritmetiċi u bit, pereżempju, l-espressjonijiet "[] % [42]" u "$object + 4" se jirriżultaw fi żball.
  • Implimentati algoritmu ta’ għażla stabbli li fih l-ordni ta’ valuri identiċi tiġi ppreservata f’ġirjiet differenti.

Sors: opennet.ru

Żid kumment