Έκδοση του Ψαλμού 3.12, ενός στατικού αναλυτή για τη γλώσσα PHP. Έκδοση Alpha της PHP 8.0

Εταιρεία Vimeo опубликовала νέα έκδοση στατικού αναλυτή Ψαλμός 3.12, το οποίο σας επιτρέπει να αναγνωρίζετε τόσο προφανή όσο και διακριτικά σφάλματα στον κώδικα PHP, καθώς και να διορθώνετε αυτόματα ορισμένους τύπους σφαλμάτων. Το σύστημα είναι κατάλληλο για τον εντοπισμό προβλημάτων τόσο σε κώδικα παλαιού τύπου όσο και σε κώδικα που χρησιμοποιεί σύγχρονες δυνατότητες που εισάγονται σε νέους κλάδους της PHP. Ο κώδικας του έργου είναι γραμμένος σε PHP και διανέμονται από υπό την άδεια του MIT.

Ο Ψαλμός εντοπίζει τα περισσότερα από τα προβλήματα που σχετίζονται με τη χρήση εσφαλμένου τύπου, καθώς και διάφορα τυπικά λάθη. Για παράδειγμα, υποστηρίζει προειδοποιήσεις σχετικά με την ανάμειξη μεταβλητών διαφορετικών τύπων σε μια έκφραση, λανθασμένες λογικές δοκιμές (όπως "if ($a && $a) {}", "if ($a && !$a) {}" και " if ($a) {} elseif ($a) {}"), ελλιπής προετοιμασία των ιδιοτήτων του αντικειμένου. Ο αναλυτής λειτουργεί σε λειτουργία πολλαπλών νημάτων. Είναι δυνατή η εκτέλεση σταδιακών σαρώσεων, οι οποίες αναλύουν μόνο αρχεία που έχουν αλλάξει από την τελευταία σάρωση.

Επιπλέον, παρέχονται ασφαλή εργαλεία προγραμματισμού που επιτρέπουν χρήση σχολιασμοί στη μορφή Docblock (“/** @var Τύπος */”) για την παροχή πληροφοριών σχετικά με τους τύπους μεταβλητών, τις τιμές επιστροφής, τις παραμέτρους συναρτήσεων, τις ιδιότητες αντικειμένων. Υποστηρίζεται επίσης ο καθορισμός προτύπων χρήσης τύπων και η χρήση δηλώσεων διεκδίκησης. Για παράδειγμα:

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

/** @var string $a */
echo strpos($a, 'γεια');

/** @psalm-assert-if-true B $a */
συνάρτηση isValidB(A $a) : bool {
επιστροφή $a παρουσίας του B && $a->isValid();
}

Για την αυτοματοποίηση της εξάλειψης των προβλημάτων που βρέθηκαν, παρέχεται το βοηθητικό πρόγραμμα Psalter, το οποίο υποστηρίζει πρόσθετα και позволяет αντιμετώπιση κοινών προβλημάτων κώδικα, προσθήκη σχολιασμών τύπων και εκτέλεση χειρισμών, όπως μετακίνηση κλάσεων από έναν χώρο ονομάτων σε άλλο, μετακίνηση μεθόδων μεταξύ κλάσεων και μετονομασία κλάσεων και μεθόδων.

Στο νέο τεύχος του Ψαλμού εφαρμόστηκε η επιλογή "--taint-analysis" σάς επιτρέπει να παρακολουθείτε τη σχέση μεταξύ των παραμέτρων εισόδου που λαμβάνονται από τον χρήστη (για παράδειγμα, $_GET['name']) και της χρήσης τους σε μέρη που απαιτούν διαφυγή χαρακτήρων (για παράδειγμα, ηχώ " $name "), μεταξύ άλλων μέσω αλυσίδων παρακολούθησης ενδιάμεσων αναθέσεων και κλήσεων λειτουργιών. Η χρήση συσχετιστικών πινάκων $_GET, $_POST και $_COOKIE θεωρείται ως πηγές δυνητικά επικίνδυνων δεδομένων, αλλά είναι επίσης δυνατή προσδιορισμός του ίδιες πηγές. Οι ενέργειες που απαιτούν διαφυγή παρακολούθησης περιλαμβάνουν λειτουργίες εξόδου που δημιουργούν περιεχόμενο HTML, προσθέτουν κεφαλίδες HTTP ή εκτελούν ερωτήματα SQL.

Η επικύρωση χρησιμοποιείται όταν χρησιμοποιούνται συναρτήσεις όπως ηχώ, exec, συμπερίληψη και κεφαλίδα. Κατά την ανάλυση της ανάγκης διαφυγής, λαμβάνονται υπόψη τύποι δεδομένων όπως κείμενο, συμβολοσειρές με κώδικα SQL, HTML και Shell, συμβολοσειρές με παραμέτρους ελέγχου ταυτότητας. Η προτεινόμενη λειτουργία σάς επιτρέπει να εντοπίσετε τρωτά σημεία στον κώδικα που οδηγούν σε δέσμες ενεργειών μεταξύ τοποθεσιών (XSS) ή αντικατάσταση SQL.

Επιπλέον, μπορεί να σημειωθεί αρχή άλφα δοκιμή του νέου κλάδου PHP 8.0. Η κυκλοφορία έχει προγραμματιστεί για τις 26 Νοεμβρίου. Στο νέο υποκατάστημα αναμένονται τα εξής: καινοτομίεςΌπως:

  • Συμπερίληψη JIT compiler, η χρήση των οποίων θα βελτιώσει την παραγωγικότητα.
  • Υποστήριξη τύπους συνδικάτων, ορίζοντας συλλογές δύο ή περισσότερων τύπων (για παράδειγμα, "δημόσια συνάρτηση foo(Foo|Bar $input): int|float;").
  • Υποστήριξη γνωρίσματα (σχολιασμοί) που σας επιτρέπουν να συνδέετε μεταδεδομένα (όπως πληροφορίες τύπου) σε κλάσεις χωρίς να χρησιμοποιείτε σύνταξη Docblock.
  • Συντομευμένη σύνταξη ορισμούς κλάσεων, επιτρέποντάς σας να συνδυάσετε τον ορισμό ενός κατασκευαστή και ιδιοτήτων.
  • Νέος τύπος επιστροφής - στατικός.
  • Νέος τύπος - μικτός, το οποίο μπορεί να χρησιμοποιηθεί για να προσδιοριστεί εάν μια συνάρτηση δέχεται παραμέτρους διαφορετικών τύπων.
  • Έκφραση βολή να χειριστεί τις εξαιρέσεις.
  • WeakMap για τη δημιουργία αντικειμένων που μπορούν να θυσιαστούν κατά τη συλλογή σκουπιδιών (για παράδειγμα, για να αποθηκεύσετε περιττές κρυφές μνήμες).
  • Ευκαιρία χρησιμοποιώντας την έκφραση “::class” για αντικείμενα (ανάλογα με την κλήση get_class()).
  • Ευκαιρία ορισμούς στο μπλοκ catch των εξαιρέσεων που δεν δεσμεύονται σε μεταβλητές.
  • Ευκαιρία αφήνοντας κόμμα μετά το τελευταίο στοιχείο στη λίστα των παραμέτρων συνάρτησης.
  • Νέα διεπαφή Stringable για να προσδιορίσετε τυχόν τύπους συμβολοσειράς ή δεδομένα που μπορούν να μετατραπούν σε συμβολοσειρά (για την οποία είναι διαθέσιμη η μέθοδος __toString().
  • Νέα δυνατότητα str_contains(), ένα απλοποιημένο ανάλογο του strpos για τον προσδιορισμό της εμφάνισης μιας υποσυμβολοσειράς, καθώς και τις συναρτήσεις str_starts_with() και str_ends_with() για τον έλεγχο αντιστοιχιών στην αρχή και στο τέλος μιας συμβολοσειράς.
  • Προστέθηκε λειτουργία fdiv(), το οποίο εκτελεί μια λειτουργία διαίρεσης χωρίς να κάνει λάθος κατά τη διαίρεση με το μηδέν.
  • Άλλαξε λογική σύνδεσης συμβολοσειρών. Για παράδειγμα, η έκφραση 'echo "sum:" . Το $a + $b' προηγουμένως ερμηνεύτηκε ως 'echo ("sum: " . $a) + $b' και στην PHP 8 θα αντιμετωπίζεται ως "echo "sum: " . ($a + $b)'.
  • Σφιγμένο ελέγχοντας αριθμητικές πράξεις και πράξεις bit, για παράδειγμα, οι εκφράσεις "[] % [42]" και "$object + 4" θα έχουν ως αποτέλεσμα σφάλμα.
  • Εφαρμόστηκε ένας σταθερός αλγόριθμος ταξινόμησης στον οποίο διατηρείται η σειρά των ίδιων τιμών σε διαφορετικές εκτελέσεις.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο