Gibt es statische JavaScript-Analysetools?



Answers

AKTUALISIERTE ANTWORT, 2017: Ja. Verwenden Sie ESLint. http://eslint.org

Zusätzlich zu JSLint (bereits in Flash Sheridans Antwort erwähnt ) und dem Closure-Compiler (zuvor in der Antwort von awhyte erwähnt) habe ich auch viel von der Ausführung von JSHint und PHP CodeSniffer profitiert . Seit 2012 sind alle vier Tools frei Open-Source und haben eine große und aktive Entwickler-Community hinter sich. Sie sind jeweils ein bisschen anders (und ich denke, ergänzend) in den Arten von Überprüfungen, die sie durchführen:

JSLint wurde entwickelt, und ist immer noch Douglas Crockfords persönliches Linting-Tool. Es wird mit einem großen Standard-Regelwerk ausgeliefert - dem von Crockford, das ständig aktualisiert wird, während er weiterhin über JavaScript und seine Fallstricke informiert. JSLint ist sehr eigenwillig und das wird allgemein als eine gute Sache angesehen. Daher gibt es (absichtlich) eine begrenzte Menge , um einzelne Regeln zu konfigurieren oder zu deaktivieren. Dies kann jedoch die Anwendung von JSLint auf Legacy-Code erschweren.

JSHint ist JSint sehr ähnlich (tatsächlich begann es als JSLint fork), aber es ist einfacher / möglich , alle JSLint-Prüfungen über Befehlszeilenoptionen oder über eine .jshintrc Datei zu konfigurieren oder zu deaktivieren .

Ich mag besonders, dass ich JSHint anweisen kann, alle Fehler in einer Datei zu melden, selbst wenn es Hunderte von Fehlern gibt. Im Gegensatz dazu, obwohl JSLint über eine maxerr Konfigurationsoption verfügt, wird es bei der Verarbeitung von Dateien mit einer großen Anzahl von Fehlern in der Regel relativ früh aus der maxerr ausbrechen.

Der Closure-Compiler ist sehr nützlich, wenn Code nicht mit Closure compiliert wird, können Sie sehr sicher sein, dass der Code auf eine grundlegende Art und Weise tief abgesprungen ist. Closure Compilation ist möglicherweise die nächste Sache, die es in der JS-Welt zu einer "Interpreter" -Syntaxprüfung wie php -l oder ruby -c

Closure warnt Sie auch vor potenziellen Problemen wie fehlenden Parametern und nicht deklarierten oder neu definierten Variablen. Wenn die erwarteten Warnungen nicht --warning_level VERBOSE , erhöhen Sie die Warnstufe, indem Sie Closure mit der Option --warning_level VERBOSE

PHP CodeSniffer kann sowohl JavaScript als auch PHP und CSS parsen . CodeSniffer wird mit verschiedenen Codierungsstandards ausgeliefert (sagen wir phpcs -i , um sie zu sehen), die viele nützliche Sniffs für JavaScript-Code enthalten, einschließlich Checks gegen Inline-Kontrollstrukturen und überflüssige Leerzeichen .

Hier ist eine Liste von JavaScript-Sniffs, die in PHP CodeSniffer ab Version 1.3.6 verfügbar sind. Hier ist ein benutzerdefinierter Regelsatz, mit dem Sie alle auf einmal ausführen können. Mit benutzerdefinierten Regelsätzen können Sie die Regeln, die Sie anwenden möchten, einfach auswählen . Und Sie können sogar Ihre eigenen Sniffs schreiben, wenn Sie einen bestimmten "Hausstil" erzwingen wollen, der nicht standardmäßig unterstützt wird. Afaik CodeSniffer ist das einzige dieser vier Tools, das die Anpassung und Erstellung neuer statischer Analyse-Regeln unterstützt. Eine Einschränkung: CodeSniffer ist auch das langsamste der genannten Tools.

Question

Ich bin es gewohnt, dass mein Compiler sich beschweren muss, wenn ich etwas Dummes wie einen Tippfehler bei einem Variablennamen mache, aber JavaScript hat die Angewohnheit, dies passieren zu lassen.

Gibt es statische Analyse-Tools für JavaScript?




Zusammenfassend sind JSLint, JSHint, Plato, ESLint, Google Closure-Linter die verfügbaren Tools. Beim Testen von Google Closure-Linter für Windows traten Installationsprobleme auf. Aber es erwähnt auf der Webseite, dass seine Unterstützung für Windows experimentell ist. Ich habe ein anderes Tool gefunden und ausprobiert, das gut funktioniert. Hier ist der Link dafür: http://esprima.org/

Dies ist auch der GitHub Link für das Tool Esprima: https://github.com/ariya/esprima




Unser SD ECMAScript CloneDR ist ein Tool zum Auffinden von exakten und nahezu fehlerhaften Kopien von dupliziertem Code in großen JavaScript-Quellcode-Datenbanken.

Es verwendet die Sprachsyntax, um die Erkennung zu steuern, so dass es Klone trotz Formatänderungen, eingefügten / gelöschten Kommentaren, umbenannten Variablen und sogar einigen eingefügten / gelöschten Anweisungen findet.

Auf der Website befindet sich ein Beispiel für CloneDR, das in der Google Closure-Bibliothek von Google ausgeführt wird.




Im kommerziellen Bereich unterstützt Coverity Static Analysis die Analyse von JavaScript ab Version 7.7 (Mitte 2015). In Bezug auf Ihre spezielle Anfrage zu Tippfehlern, findet mein Lieblingsprojekt in der neuesten Version (8.0, Anfang 2016) Tippfehler in Namen von Programmelementen.

Als Hauptentwickler des Projekts akzeptiere bitte meinen schamlosen Plug: Obwohl die JavaScript-Analyse von Coverity noch nicht so ausgereift ist wie die verehrte C / C ++ - Analyse , hat sie einen großen Teil der gleichen Engine mit dem gleichen Fokus auf der Suche nach hochwertigen Defekten mit einem niedrigen Wert Rate der Berichte über falsch positive Fehler. Wir konzentrieren uns verstärkt darauf, in JavaScript (und anderen Sprachen) Sicherheitsdefekte zu finden und allgemeine Programmierfehler zu finden.

Nun, hier sind einige Tippfehler, die es findet (genauer Tippfehler als Übung für den Leser, um zu betonen, wie leicht diese übersehen werden können):

merge.js: (stabile Verbindung) (letzte Änderung)

commands-packages-query.js: (stabile Verbindung) (letzte Revision)

series-pie-tests.js: (stabile Verbindung) (neueste Version )

outline_case.js: (stabiler Link) (letzte Überarbeitung)




JSAnalyse wurde gerade auf Codeplex veröffentlicht. Es ist ein Werkzeug, das die Abhängigkeiten zwischen Javascript-Dateien analysiert. Sie können sogar die zulässigen Abhängigkeiten definieren und JSAnalysis prüft, ob die definierten Regeln erfüllt sind oder nicht. Das erlaubt es, auch in großen Projekten die Abhängigkeiten von Javascript zu verfolgen und eine saubere Architektur zu haben.

JSAnalyse kann als Befehlszeilentool ausgeführt oder über das Visual Studio Layer Diagramm konfiguriert werden. Es ist auch einfach in den Build zu integrieren. Mit gated check-ins können Sie die Abhängigkeiten unter Kontrolle halten.

http://jsanalyse.codeplex.com/




Mehr Sicherheit konzentriert als allgemeine Liste kann auf dem Mozilla Wiki bei Security / B2G / JavaScript-Code-Analyse gefunden werden

Der Zweck dieses Dokuments besteht darin, JavaScript-Code-Analyse-Tools zu sammeln, die sich für kommende Mozilla-Projekte oder für den internen Gebrauch eignen.

Außerdem gibt es mindestens ein kommerzielles Produkt, das Sicherheitsanalysen durchführt: Burp erhält neue JavaScript-Analysefunktionen

Die neueste Version von Burp enthält eine neue Engine für die statische Analyse von JavaScript-Code. Dadurch kann Burp Scanner eine Reihe neuer Schwachstellen melden, darunter:

  • DOM-basierte XSS
  • JavaScript-Injektion
  • Clientseitige SQL-Injektion
  • WebSocket-Hijacking
  • Lokale Dateipfadmanipulation
  • DOM-basierte offene Umleitung
  • Cookie-Manipulation
  • Ajax-Anfrage-Header-Manipulation
  • DOM-basierte Dienstverweigerung
  • Web-Nachrichtenmanipulation
  • HTML5-Speichermanipulation





Links