Ngaleupaskeun Jabur 3.12, analisa statik pikeun basa PHP. Pelepasan alfa PHP 8.0

Pausahaan Vimeo diterbitkeun release anyar analis statik Jabur 3.12, nu ngidinan Anjeun pikeun ngaidentipikasi duanana kasalahan atra tur halus dina kode PHP, kitu ogé otomatis ngabenerkeun sababaraha jenis kasalahan. Sistem ieu cocog pikeun ngaidentipikasi masalah boh dina kode warisan boh dina kode anu ngagunakeun fitur modern anu diwanohkeun dina cabang PHP anyar. Kode proyék ditulis dina PHP jeung disebarkeun ku handapeun lisénsi MIT.

Jabur ngaidentipikasi kalolobaan masalah anu aya hubunganana sareng pamakean jinis anu salah, ogé sababaraha rupa kasalahan has. Contona, éta ngarojong warnings ngeunaan campur variabel tina tipena béda dina ekspresi, tés logis salah (saperti "lamun ($a && $a) {}", "lamun ($a && !$a) {}" jeung " lamun ($a) {} elseif ($a) {}"), initialization teu lengkep sipat objék. Analis dijalankeun dina modeu multi-threaded. Kasebut nyaéta dimungkinkeun pikeun ngalakukeun scan incremental, nu ngan analisa file nu geus robah ti scan panungtungan.

Sajaba ti, parabot programming aman disadiakeun pikeun ngidinan ngagunakeun annotations dina format Docblock ("/** @var Type */") pikeun nyadiakeun informasi ngeunaan tipe variabel, nilai balik, parameter fungsi, sipat objék. Nangtukeun pola pamakean jinis sareng nganggo pernyataan negeskeun ogé dirojong. Salaku conto:

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

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

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

Pikeun ngajadikeun otomatis ngaleungitkeun masalah anu kapanggih, utilitas Psalter disayogikeun, anu ngadukung plugins sareng Hal ieu ngamungkinkeun troubleshoot masalah kode umum, nambahkeun jenis annotations, sarta ngalakukeun manipulasi kayaning mindahkeun kelas ti hiji ngaranspasi ka nu sejen, mindahkeun métode antara kelas, sarta ngaganti ngaran kelas jeung métode.

Dina edisi anyar Jabur dilaksanakeun pilihan "--taint-analysis" ngamungkinkeun anjeun pikeun ngalacak hubungan antara parameter input anu ditampi ti pangguna (contona, $_GET ['ngaran']) sareng panggunaanana di tempat-tempat anu meryogikeun kabur karakter (contona, gema " $ngaran "), kaasup ngaliwatan ranté tracking tina assignments panengah jeung panggero fungsi. Pamakéan arrays asosiatif $_GET, $_POST jeung $_COOKIE dianggap salaku sumber data berpotensi bahaya, tapi ogé mungkin. ngartikeun sumber sorangan. Laku lampah nu merlukeun escaping tracking kaasup operasi kaluaran nu ngahasilkeun eusi HTML, nambahkeun header HTTP, atawa ngaéksekusi queries SQL.

Validasi dianggo nalika nganggo fungsi sapertos gema, exec, kalebet sareng lulugu. Nalika nganalisis kabutuhan kabur, jinis data sapertos téks, senar nganggo SQL, HTML sareng kode Shell, senar sareng parameter auténtikasi dipertimbangkeun. Modeu anu diusulkeun ngamungkinkeun anjeun pikeun ngaidentipikasi kerentanan dina kode anu nyababkeun skrip cross-site (XSS) atanapi substitusi SQL.

Sajaba ti éta, bisa dicatet anu awal nguji alfa tina cabang PHP 8.0 anyar. Pelepasan dijadwalkeun pikeun 26 Nopémber. Di handap ieu diperkirakeun dina cabang anyar: inovasiKayaning:

  • Ngahurungkeun JIT compiler, pamakéan nu bakal ngaronjatkeun produktivitas.
  • sokongan jenis union, nangtukeun kumpulan dua atawa leuwih jenis (contona, "fungsi umum foo (Foo|Bar $ input): int|float;").
  • sokongan atribut (annotations) nu ngidinan Anjeun pikeun meungkeut metadata (kayaning tipe informasi) ka kelas tanpa ngagunakeun sintaksis Docblock.
  • Sintaksis disingget definisi kelas, ngidinan Anjeun pikeun ngagabungkeun harti hiji constructor jeung sipat.
  • Tipe balik anyar - statik.
  • Tipe anyar - dicampur, nu bisa dipaké pikeun nangtukeun naha hiji fungsi narima parameter tina tipena béda.
  • Babasan maledog pikeun nanganan pengecualian.
  • WeakMap pikeun nyieun objék nu bisa dikurbankeun salila ngumpulkeun sampah (contona, pikeun nyimpen caches teu perlu).
  • kasempetan ngagunakeun éksprési ":: class" pikeun objék (analog jeung nelepon get_class ()).
  • kasempetan definisi dina blok nyekel iwal nu teu kabeungkeut kana variabel.
  • kasempetan ninggalkeun koma sanggeus unsur panungtungan dina daptar parameter fungsi.
  • panganteur anyar Senar pikeun ngaidentipikasi sagala jenis string atawa data nu bisa dirobah jadi string a (nu __toString () metoda sadia).
  • Fitur anyar str_contains(), analog saderhana strpos pikeun nangtukeun lumangsungna substring, kitu ogé fungsi str_starts_with () jeung str_ends_with () pikeun mariksa patandingan di awal jeung ahir string a.
  • fitur ditambahkeun fdiv(), nu ngalakukeun operasi division tanpa ngalungkeun kasalahan nalika ngabagi ku nol.
  • Dirobah string ngagabung logika. Contona, babasan 'echo "sum:" . $a + $b' saacanna diinterpretasi salaku 'echo ("jumlah: ". $a) + $b', sarta dina PHP 8 bakal diolah salaku 'gema "jumlah: ". ($a + $b)'.
  • Diteuteup mariksa operasi aritmetika jeung bit, contona, ekspresi "[] % [42]" jeung "$ objék + 4" bakal ngakibatkeun kasalahan.
  • Dilaksanakeun Algoritma asihan anu stabil dimana urutan nilai idéntik dilestarikan dina jalan anu béda.

sumber: opennet.ru

Tambahkeun komentar