Psalmi 3.12, PHP-kielen staattisen analysaattorin julkaisu. PHP 8.0:n alfajulkaisu

Vimeo yritys julkaistu uusi staattisen analysaattorin julkaisu Ps 3.12, jonka avulla voit tunnistaa sekä ilmeiset että hienovaraiset virheet PHP-koodissa sekä korjata automaattisesti tietyntyyppiset virheet. Järjestelmä soveltuu ongelmien tunnistamiseen sekä vanhassa koodissa että koodissa, joka hyödyntää PHP:n uusissa haaroissa käyttöön otettuja moderneja ominaisuuksia. Projektikoodi on kirjoitettu PHP ja jakelija MIT-lisenssillä.

Psalmi tunnistaa suurimman osan virheelliseen tyyppien käyttöön liittyvistä ongelmista sekä erilaisia tyypillisiä virheitä. Se tukee esimerkiksi varoituksia erityyppisten muuttujien sekoittamisesta lausekkeessa, virheellisiä loogisia testejä (kuten "if ($a && $a) {}", "if ($a && !$a) {}" ja " if ( $a) {} elseif ($a) {}"), objektin ominaisuuksien epätäydellinen alustus. Analysaattori toimii monisäikeisessä tilassa. On mahdollista suorittaa lisätarkistuksia, jotka analysoivat vain tiedostoja, jotka ovat muuttuneet edellisen tarkistuksen jälkeen.

Lisäksi turvallisia ohjelmointityökaluja tarjotaan mahdollistamaan käyttää huomautuksia muodossa Docblock ("/** @var Type */") antaa tietoja muuttujatyypeistä, palautusarvoista, funktioparametreista ja objektin ominaisuuksista. Myös tyyppien käyttötapojen määrittelyä ja väitteiden käyttöä tuetaan. Esimerkiksi:

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

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

/** @psalm-assert-if-true B $a */
funktio onValidB(A $a) : bool {
palauttaa $a esiintymän B && $a->isValid();
}

Löydettyjen ongelmien poistamisen automatisoimiseksi tarjotaan Psalter-apuohjelma, joka tukee laajennuksia ja sen avulla Tee yleisten koodiongelmien vianmääritys, lisää tyyppimerkintöjä ja suorita manipulaatioita, kuten luokkien siirtämistä nimiavaruudesta toiseen, menetelmien siirtämistä luokkien välillä sekä luokkien ja menetelmien uudelleennimeämistä.

Psalmin uudessa numerossa toteutettu "--taint-analysis" -valinnan avulla voit jäljittää käyttäjältä saatujen syöteparametrien (esimerkiksi $_GET['nimi']) ja niiden käytön välistä suhdetta paikoissa, joissa tarvitaan merkkien poistoa (esim. echo " $nimi "), mukaan lukien välitehtävien ja toimintokutsujen seurantaketjut. Assosiatiivisten taulukoiden $_GET, $_POST ja $_COOKIE käyttöä pidetään mahdollisesti vaarallisen tiedon lähteinä, mutta se on myös mahdollista määritelmä omia lähteitä. Toimintoja, jotka vaativat pakenevan seurannan, ovat tulostustoiminnot, jotka luovat HTML-sisältöä, lisäävät HTTP-otsikoita tai suorittavat SQL-kyselyjä.

Vahvistusta käytetään käytettäessä toimintoja, kuten echo, exec, include ja header. Poistumistarvetta analysoitaessa huomioidaan tietotyypit, kuten teksti, SQL-, HTML- ja Shell-koodia sisältävät merkkijonot, todennusparametreilla varustetut merkkijonot. Ehdotetun tilan avulla voit tunnistaa koodissa olevat haavoittuvuudet, jotka johtavat sivustojen väliseen komentosarjaan (XSS) tai SQL-korvaukseen.

Lisäksi voidaan huomauttaa alku uuden PHP 8.0 -haaran alfatestaus. Julkaisun on määrä tapahtua 26. marraskuuta. Uudelle toimialalle odotetaan seuraavaa: innovaatioitaKuten:

  • sisällyttäminen JIT-kääntäjä, jonka käyttö parantaa tuottavuutta.
  • Tukea liiton tyyppejä, joka määrittää kahden tai useamman tyypin kokoelmat (esimerkiksi "julkinen funktio foo(Foo|Bar $syöte): int|float;").
  • Tukea attribuutteja (merkinnät), joiden avulla voit sitoa metatietoja (kuten tyyppitietoja) luokkiin ilman Docblock-syntaksia.
  • Lyhennetty syntaksi luokkamääritelmiä, jolloin voit yhdistää konstruktorin määritelmän ja ominaisuudet.
  • Uusi palautustyyppi - staattinen.
  • Uusi tyyppi - sekoitettu, jonka avulla voidaan määrittää, hyväksyykö funktio erityyppisiä parametreja.
  • ilme heittää käsitellä poikkeuksia.
  • Heikko kartta luoda kohteita, jotka voidaan uhrata roskien keräämisen aikana (esimerkiksi tarpeettomien välimuistien tallentamiseen).
  • Tilaisuus käyttämällä lauseketta "::class" objekteille (analogisesti get_class()-kutsulle).
  • Tilaisuus määritelmät poikkeuksiin, joita ei ole sidottu muuttujiin.
  • Tilaisuus jättämällä pilkku funktioparametriluettelon viimeisen elementin jälkeen.
  • Uusi käyttöliittymä Stringable tunnistaa merkkijonotyypit tai tiedot, jotka voidaan muuntaa merkkijonoksi (joille on käytettävissä menetelmä __toString()).
  • Uusi ominaisuus str_contains(), yksinkertaistettu strpos-analogi alimerkkijonon esiintymisen määrittämiseen, sekä funktiot str_starts_with() ja str_ends_with() merkkijonon alussa ja lopussa olevien osumien tarkistamiseksi.
  • Lisätty toiminto fdiv(), joka suorittaa jakotoiminnon antamatta virhettä nollalla jakamisessa.
  • Muutettu merkkijonojen yhdistämislogiikka. Esimerkiksi lauseke 'echo "sum:" . $a + $b' tulkittiin aiemmin nimellä 'echo ("sum: " . $a) + $b', ja PHP 8:ssa sitä käsitellään nimellä 'echo "sum: " . ($a + $b)'.
  • Kiristetty aritmeettisten ja bittioperaatioiden tarkistaminen, esimerkiksi lausekkeet "[] % [42]" ja "$object + 4" johtavat virheeseen.
  • Toteutettu vakaa lajittelualgoritmi, jossa identtisten arvojen järjestys säilyy eri ajoissa.

Lähde: opennet.ru

Lisää kommentti