Rilis Mazmur 3.12, penganalisa statis untuk bahasa PHP. Rilis alfa PHP 8.0

Perusahaan Vimeo опубликовала rilis baru penganalisa statis Mazmur 3.12, yang memungkinkan Anda mengidentifikasi kesalahan yang terlihat jelas dan tidak kentara dalam kode PHP, serta secara otomatis memperbaiki beberapa jenis kesalahan. Sistem ini cocok untuk mengidentifikasi masalah baik pada kode lama maupun kode yang menggunakan fitur modern yang diperkenalkan di cabang baru PHP. Kode proyek ditulis dalam PHP dan didistribusikan oleh di bawah lisensi MIT.

Mazmur mengidentifikasi sebagian besar masalah yang terkait dengan penggunaan tipe yang salah, serta berbagai masalah lainnya kesalahan khas. Misalnya, mendukung peringatan tentang pencampuran variabel tipe berbeda dalam ekspresi, pengujian logika yang salah (seperti “if ($a && $a) {}”, “if ($a && !$a) {}” dan “ if ( $a) {} elseif ($a) {}"), inisialisasi properti objek yang tidak lengkap. Penganalisis berjalan dalam mode multi-utas. Dimungkinkan untuk melakukan pemindaian tambahan, yang hanya menganalisis file yang telah berubah sejak pemindaian terakhir.

Selain itu, alat pemrograman yang aman disediakan untuk memungkinkan untuk menggunakan anotasi dalam format blok dokumen (“/** @var Type */”) untuk memberikan informasi tentang tipe variabel, nilai kembalian, parameter fungsi, properti objek. Mendefinisikan pola penggunaan tipe dan menggunakan pernyataan tegas juga didukung. Misalnya:

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

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

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

Untuk mengotomatisasi penghapusan masalah yang ditemukan, utilitas Psalter disediakan, yang mendukung plugin dan memungkinkan memecahkan masalah kode umum, menambahkan anotasi tipe, dan melakukan manipulasi seperti memindahkan kelas dari satu namespace ke namespace lainnya, memindahkan metode antar kelas, dan mengganti nama kelas dan metode.

Dalam edisi baru Mazmur diimplementasikan opsi "--taint-lysis" memungkinkan Anda melacak hubungan antara parameter masukan yang diterima dari pengguna (misalnya, $_GET['name']) dan penggunaannya di tempat yang memerlukan pelolosan karakter (misalnya, echo " $nama "), termasuk melalui rantai pelacakan penugasan perantara dan pemanggilan fungsi. Penggunaan array asosiatif $_GET, $_POST dan $_COOKIE dianggap sebagai sumber data yang berpotensi berbahaya, namun hal ini juga mungkin terjadi definisi sumber sendiri. Tindakan yang memerlukan pelolosan pelacakan mencakup operasi keluaran yang menghasilkan konten HTML, menambahkan header HTTP, atau menjalankan kueri SQL.

Validasi digunakan saat menggunakan fungsi seperti echo, exec, include dan header. Saat menganalisis kebutuhan untuk melarikan diri, tipe data seperti teks, string dengan kode SQL, HTML dan Shell, string dengan parameter otentikasi diperhitungkan. Mode yang diusulkan memungkinkan Anda mengidentifikasi kerentanan dalam kode yang menyebabkan pembuatan skrip lintas situs (XSS) atau substitusi SQL.

Selain itu, dapat diperhatikan mulai pengujian alfa dari cabang PHP 8.0 baru. Rilisnya dijadwalkan pada 26 November. Berikut ini yang diharapkan di cabang baru: inovasiSeperti:

  • Mengaktifkan Kompiler JIT, yang penggunaannya akan meningkatkan produktivitas.
  • Dukungan tipe serikat pekerja, mendefinisikan koleksi dari dua tipe atau lebih (misalnya, “public function foo(Foo|Bar $input): int|float;”).
  • Dukungan atribut (anotasi) yang memungkinkan Anda mengikat metadata (seperti informasi tipe) ke kelas tanpa menggunakan sintaksis Docblock.
  • Sintaks yang dipersingkat definisi kelas, memungkinkan Anda menggabungkan definisi konstruktor dan properti.
  • Jenis pengembalian baru - statis.
  • Tipe baru - campur aduk, yang dapat digunakan untuk menentukan apakah suatu fungsi menerima parameter dari tipe yang berbeda.
  • Ekspresi melemparkan untuk menangani pengecualian.
  • Peta Lemah untuk membuat objek yang dapat dikorbankan selama pengumpulan sampah (misalnya, untuk menyimpan cache yang tidak diperlukan).
  • Kesempatan menggunakan ekspresi “::class” untuk objek (analog dengan memanggil get_class()).
  • Kesempatan definisi di blok tangkapan pengecualian yang tidak terikat pada variabel.
  • Kesempatan meninggalkan koma setelah elemen terakhir dalam daftar parameter fungsi.
  • Antarmuka baru Dapat dirangkai untuk mengidentifikasi tipe string atau data apa pun yang dapat dikonversi menjadi string (yang tersedia metode __toString()).
  • Fitur baru str_berisi(), analog strpos yang disederhanakan untuk menentukan kemunculan substring, serta fungsi str_starts_with() dan str_ends_with() untuk memeriksa kecocokan di awal dan akhir string.
  • Fitur tambahan fdiv(), yang melakukan operasi pembagian tanpa menimbulkan kesalahan saat membagi dengan nol.
  • Catatan logika penggabungan string. Misalnya, ungkapan 'echo "sum:" . $a + $b' sebelumnya diartikan sebagai 'echo ("sum: " . $a) + $b', dan di PHP 8 akan diperlakukan sebagai 'echo "sum: " . ($a + $b)'.
  • Diperketat memeriksa operasi aritmatika dan bit, misalnya ekspresi "[] % [42]" dan "$object + 4" akan menghasilkan kesalahan.
  • Diimplementasikan algoritma pengurutan yang stabil di mana urutan nilai yang identik dipertahankan di berbagai proses.

Sumber: opennet.ru

Tambah komentar