internetul Windows. Android

Analiza de tip static în JavaScript. Încercați analizor de flux de pe Facebook

Este un ambalator modular care creează un grafic al dependențelor cu toate modulele pentru aplicația JavaScript. Webpack Packs Module către unul sau mai multe pachete mici pentru încărcarea browserului. În plus, Webpack poate fi utilizat ca instrument de pornire a sarcinii, deoarece analizează relația dintre module și resursele de formulare (active). Puteți găsi mai multe detalii utilizând Webpack în proiectele noastre în proiectele noastre.

  • Grunt - Task Ranner conceput pentru a automatiza sarcini repetate și consumatoare de timp care durează mult timp. În ecosistemul său software, există un număr mare de pluginuri (mai mult de 6000).
  • Gulp nu este următorul manager de lansare a sarcinii și un instrument de abordare interesant: definește sarcinile din JavaScript ca funcții, de asemenea, Gul automatizează sarcini "dureroase", oferind un ecosistem extensiv de software (mai mult de 2.700 pluginuri), oferă, de asemenea, o mai bună transparență și control peste proces.
  • Browsery permite dezvoltatorilor de software să utilizeze module de stil NODJS în browsere. Definiți dependențele și să bațiți pachetele toate acestea într-un fișier NEAT JS.
  • Brunch.io este un instrument, ideile principale ale căruia sunt viteza și simplitatea. Acesta vine cu o simplă configurație și o documentație detaliată pentru lansați rapid. Brunchul creează automat o hartă a fișierelor JS împreună cu mesele de stil CSS, care simplifică procesul de depanare pe partea clientului.
  • Yeoman este un instrument universal care poate fi folosit cu aproape orice limbă de programare (JavaScript, Python, C #, Java și alții). Acest sistem de bază Generarea de coduri cu ecosistem bogat (mai mult de 6200 plug-in-uri) este utilizat pentru a dezvolta aplicații web. Mulțumită lui Yeoman, puteți crea rapid proiecte noi, fără a uita întreținerea și îmbunătățirea celor existente.
  • IDE și editori de coduri

    • Swagger este un set de reguli și instrumente pentru a descrie API. Instrumentul este un utilitar fără îndemânare. Acest lucru înseamnă că Swagger creează o documentație clară care este citită la fel de bine ca o persoană și mașină, permițându-vă să automatizați procesele dependente de API.
    • JSDOC este un set de instrumente care creează automat documentația textului multi-pagină (HTML, JSON, XML etc.) de la comentarii de la cod sursa pe JavaScript. Această aplicație poate fi utilă pentru gestionarea proiectelor la scară largă.
    • jGRoudoc (JGD) este un instrument flexibil open source, care permite dezvoltatorilor să genereze API de la comentarii din codul sursă la JavaScript. JGD Documentele nu numai variabile și funcții, ci și spațiul de nume, interfețe, pachete și alte elemente.
    • YUIDOC este o aplicație scrisă pe NODEJS. Utilizează sintaxa similară celei aplicate Javadoc și Doxigen. De asemenea, instrumentul se mândrește cu sprijinul previzualizare În timp real, suport avansat de limbă și marcaj avansat.
    • Docco este un instrument gratuit pentru documentația scrisă în coffeescript "literare". Creează un document HTML pentru a afișa comentariile alternante cu codul. Trebuie remarcat faptul că instrumentul suportă nu numai JavaScript, ci și alte limbi. De exemplu, Python, Ruby, Clojure și alții.

    Instrumente de testare

    Instrumentele de testare JavaScript sunt create pentru a detecta erorile în timpul fazei de dezvoltare pentru a evita erorile viitoare ale utilizatorilor. Odată cu creșterea complexității aplicațiilor utilizator, testele automate nu numai că măresc performanța aplicației, ci și companiile de ajutor să salveze bugetul.

    • Jasmine - Cadrul BDD (Dezvoltarea comportamentului - Dezvoltarea bazată pe comportament) este utilizată pentru a testa codul JS. El nu are dependențe externe și nu necesită lansarea DOM. Jasmina are o sintaxă curată și ușor de înțeles, care vă permite să accelerați și să simplificați testarea. De asemenea, cadrul poate fi utilizat pentru a testa codul Python și Ruby.
    • Mocha este un mediu de testare funcțional care lucrează la NODE.JS în browser. Ea efectuează teste în mod consecvent pentru a oferi o raportare flexibilă și exactă, făcând teste asincrone cu distracție și lumină. Mocha este adesea folosită cu Chai pentru a verifica rezultatele testelor.
    • Phantomjs este adesea folosit pentru teste de interfață și teste de unitate. Având în vedere că acest lucru este ceva de genul webkit "fără cap", scripturile sunt mult mai rapide. Acesta include, de asemenea, suport încorporat pentru diferite standarde web. De exemplu, JSON, Canvas, Dom procesare, SEVG și CSS Selectoare.
    • ProTractor este un cadru de testare transversal, scris pe NODE.JS pentru a testa aplicațiile pe Angularjs și unghiular. A fost creată pe baza webdriverjs și verifică aplicațiile precum utilizatorul final folosind drivere speciale și evenimente încorporate.

    Instrumente de depanare

    Codul de depanare este un proces destul de consumator de timp și de absorbție pentru dezvoltatorii JavaScript. Instrumentele de depanare a codurilor vor fi deosebit de utile atunci când lucrați cu mii de rânduri de cod. Multe dintre instrumentele de depanare oferă rezultate destul de precise.

    • JavaScript Debugger este un instrument din Comunitatea de Dezvoltare Mozilla (MDN), care poate fi utilizată ca o aplicație web offline pentru codul de depanare în diferite browsere. Firefox oferă locale și la distanță funcționalitate, precum și capacitatea de a depana codul pe dispozitivul Android folosind Firefox pentru Android.
    • Instrumente Chrome Dev - un set de instrumente care includ mai multe utilități pentru depanarea codului JavaScript, editarea de testare a performanțelor CSS și de testare.
    • nG-Inspector este o extindere a browserului care este concepută pentru a ajuta la dezvoltatorii cu scriere, înțelegere și depanare aplicații pe Angularjs. Utilitarul vine cu actualizări în timp real, light DOM, acces direct la zone, modele și alte elemente de aplicație.
    • Agrery - Extensie pentru browser Google. Aplicații Chrome și Debugging pe unghiular 2. Permite dezvoltatorilor de aplicații la unghiular 2 analizează direct structura și performanța aplicației și vă permite să detectați modificările.

    Instrumente de siguranță

    • SNYK este un instrument comercial pentru detectarea, remedierea și prevenirea vulnerabilităților cunoscute în aplicațiile JavaScript, Java și Ruby. Serviciul are propria bază de date de vulnerabilități și ia date de la NSP și NIST NVD. Patch-uri și actualizări pe care compania le oferă permit dezvoltatorilor să prevină riscurile de securitate.
    • Proiectul de securitate nod oferă instrumente utile pentru scanarea dependențelor și detectează vulnerabilitățile. NSP folosește propria bază de date bazată pe modulele NPM de scanare, precum și date din baze de date partajate, cum ar fi NIS NSV (bază de date națională de vulnerabilitate). În plus, NSP oferă integrarea cu solicitarea de tragere a GitHub și software-ul CI. Există, de asemenea, o verificare în timp real, avertismente și recomandări pentru a elimina vulnerabilitățile în aplicații pe NODE.JS.
    • Pensionjs este o verificare deschisă de dependență. Include diverse componente, cum ar fi scanerul linie de comanda, Plugin grunt, Firefox și Chrome Expansion, Burp și Owasp Zap ply-uri. Pentirejs colectează informații despre vulnerabilități din NIST NVV și alte surse, cum ar fi sistemele de urmărire a erorilor, blogurile și listele de discuții.
    • Gemnasium este un instrument comercial cu gratuit versiune de încercare. Acesta susține diverse tehnologii și pachete, inclusiv Ruby, PHP, Bower (JavaScript), Python și NPM (JavaScript). Instrumentul de securitate Gemnasium vine cu caracteristici utile, ca actualizare automataAlerte în timp real, notificări de securitate și integrare cu serviciul Slack.
    • OssIndex suportă diverse ecosisteme (Java, JavaScript I.net / C #) și multe platforme, cum ar fi Nuget, NPM, Bower, Chocolatey, Maven, compozitor, Drupal și MSI. El colectează informații despre vulnerabilitățile din baza de date națională a vulnerabilităților (NVD) și recenzii. De asemenea, procesează informații din partea membrilor comunității.

    Instrumente Analytics și cod de optimizare

    Pentru a testa calitatea codului, consultați de obicei la testarea funcțională și testarea unității. Cu toate acestea, există o altă abordare care permite dezvoltatorilor să verifice calitatea codului și respectarea standardelor de codare, și anume o analiză a codului static.

    În prezent, în software-ul modern, instrumentele de analiză a codurilor statice sunt combinate în timpul dezvoltării pentru a exclude codul de calitate în achiziție.

    • Jslint este un instrument web analitic pentru verificarea calității codului JavaScript. De îndată ce detectează problema în sursă, acesta returnează un mesaj care descrie problema și locația aproximativă din cod. JSLint este capabil să analizeze anumite standarde standard și să dezvăluie erori sintactice și probleme structurale.
    • Jshint este un instrument flexibil care se dezvoltă de către comunitate pentru a detecta erorile și problemele potențiale din codul JS, în plus, Jshint este furculiță de la Jslint. Scopul principal al acestui instrument de analiză a codului static este de a ajuta dezvoltatorii JavaScript să lucreze la programe complexe. Este capabil să detecteze erorile de sintaxă, conversia tipurilor de date implicite sau absența unei variabile. Cu toate acestea, nu poate determina viteza și funcționarea corectă a aplicației dvs., deoarece nu va fi capabilă să determine problemele de memorie în aplicația dvs. Jshint - furculiță de la Jslint.
    • EsLint este un Linter Open Source pentru aplicații web JSX și JavaScript. Ajută la detectarea șabloanelor dubioase sau găsirea unui cod care nu corespunde stilurilor specifice. Acest lucru permite dezvoltatorilor să detecteze erorile din codul JS fără executarea sa, economisind astfel timp. Fiind scris în NODE.JS, instrumentul oferă un mediu de implementare operațională și o instalare netedă prin intermediul NPM.
    • Flow este un controler de cod static pentru JavaScript, dezvoltat de Facebook. Utilizează o adnotare de tip static pentru a verifica codul pentru erori. Tipuri - parametrii stabiliți de dezvoltatori și debitul vă verifică software. Pentru respectarea cerințelor.

    Instrumente de gestionare a versiunii

    • În ultimii ani, GIT a devenit un sistem de control al versiunilor pe scară largă atât pentru proiectele mici, cât și pentru cele mari. Această utilitate gratuită oferă o viteză excelentă și o eficiență. Popularitatea sa este explicată prin sistemul distribuit și de diferite tipuri de controale, precum și o zonă intermediară în care versiunile pot fi vizualizate și formatate imediat înainte de finalizarea fixării.
    • Instrumentul Subversion sau SVN a câștigat popularitate enormă și este încă utilizat pe scară largă în proiecte și platforme open source, cum ar fi Python Apache sau Ruby. Aceste CV-uri sunt furnizate cu o varietate de funcții care vă permit să gestionați diverse operații (redenumire, copiere, ștergere etc.), fuziuni, blocarea fișierelor și multe altele.

    Instrumente de gestionare a pachetelor și dependențe

    Lista celor mai bune instrumente pentru dezvoltarea pe JavaScript poate continua pe termen nelimitat. În acest articol ați văzut doar instrumente populare și fiabile care servesc drept bază pentru produsele de calitate.

    Fiecare echipă] [- preferințele sale din partea software-ului și a utilităților pentru penstrație. Având în mod constant, am aflat: selecția variază astfel încât să puteți face un set real de programe dovedite. Pe asta și a decis. Pentru a nu face echipa Solonka, întreaga listă este spartă pe teme. Astăzi vom înțelege Analizoarele codurilor statice Pentru a căuta vulnerabilități în aplicații, atunci când este cazul - sursele lor.

    Prezența codurilor codului sursă simplifică în mod semnificativ căutarea vulnerabilităților. În loc de a fi manipulate orbește de diverși parametri care sunt transmise aplicației, este mult mai ușor să vedeți în felul, cum le procesează. Să presupunem dacă datele de la utilizator sunt transmise fără verificări și transformări, ajung la interogarea SQL - avem o vulnerabilitate a tipului de injectare SQL. Dacă ajung să se retragă în codul HTML - obținem Classic XSS. De la scanerul static trebuie să detectați în mod clar aceste situații, dar, din păcate, nu este întotdeauna atât de ușor să o faceți.

    Compilatoare moderne

    Poate părea amuzant, dar unul dintre cele mai eficiente coda analizoare sunt compilatoarele în sine. Desigur, ele sunt destinate complet pentru cealaltă, dar ca un bonus, fiecare oferă un bun verificator sursă, capabil să detecteze un numar mare de Erori. De ce nu salvează el? Inițial, setările pentru o astfel de verificare a codului sunt expuse destul de loyal: ca rezultat, să nu vă încurcați programatorul, compilatorul începe să jure doar în cazul celor mai serioase jambbe. Dar în zadar - Dacă puneți nivelul de avertizare mai mare, este destul de realist să săpați o mulțime de locuri dubioase în cod. Se pare că este așa cum urmează. De exemplu, în cod există o lipsă de verificare a lungimii șirului înainte de ao copia în tampon. Scanerul găsește o funcție care copiază șirul (sau fragmentul său) în tamponul de dimensiuni fixe fără verificarea preliminară a lungimii acesteia. Trasează traiectoria transmiterii argumentelor: de la datele de intrare la o funcție și aspect vulnerabil: dacă este posibil să ridicați o asemenea lungime a unui șir care să provoace o depășire a unei funcții vulnerabile și nu a tăiat inspecțiile anterioare . În cazul în care nu există astfel de verificări, găsim o depășire a tamponului de 100%. Principala complexitate este de a utiliza pentru a verifica compilatorul - pentru a forța acest lucru "înghiți" codul altcuiva. Dacă ați încercat cel puțin o dată să compilați aplicația de la sursă, știți cât de greu este să satisfaceți toate dependențele, în special în proiecte mari. Dar rezultatul merită! În plus, în plus față de compilator, alte instrumente sunt construite în IDE puternic analiza codului.. De exemplu, următoarea secțiune a codului în Studio vizual. Un avertisment va fi emis cu privire la utilizarea funcției _alloca în ciclu, care poate depăși rapid stack-ul:

    char * b;
    (
    B \u003d (char *) _ aloca (9)
    ) În timp ce (1)

    Acesta este meritul analizorului static înainte. Ca și FXCOP, conceput pentru a analiza un cod gestionat, Prefast a fost distribuit inițial ca un utilitar separat și doar mai târziu a devenit parte a studioului vizual.

    Șobolanii - Instrumentul de audit dur pentru securitate

    Site: www.securesoftware.com.
    Licență: GNU GPL
    Platformă: Unix, Windows
    Limbi: C ++, PHP, Python, Ruby

    Eroare de eroare - revenire. Unele dintre aceste flăcări care admit programatorii sunt necritice și amenință doar instabilitatea programului. Alții, dimpotrivă, vă permit să injectați codul Shell și să executați comenzi arbitrare pe serverul de la distanță. Risc special în cod reprezintă comenzi care permit depășirea tamponului și alte tipuri similare de atacuri. Există o mulțime de astfel de comenzi, în cazul C / C ++ acestea sunt funcții pentru lucrul cu rânduri (XSTRCPY (), strcat (), devine (), sprintf (), imprimare (), snprintf (), syslog ()), echipele de sistem (acces (), chown (), chgRP (), chmod (), tmpfile (), tmpnam (), tempnam (), mktemp ()), precum și comenzi de apel de sistem (Exec () , Sistem (), Popen ()). Explorați manual tot codul (mai ales dacă este alcătuit din câteva mii de linii) destul de plictisitor. Deci, puteți urmări cu ușurință transferul oricărei funcții a parametrilor neconfirmați. Facilitarea semnificativă a sarcinii poate instrumente speciale pentru audit, inclusiv utilitatea bine-cunoscută Șobolani. (Instrumentul de audit dur pentru securitate) De la fortificația bine-cunoscută a companiei. Nu numai că face față prelucrării codului scris în C / C ++, dar scripturile pe Perl, PHP și Python vor putea, de asemenea, să proceseze. În baza de date, utilitatea este selecția inspirată cu descriere detaliata Problemă în cod. Cu ajutorul analizorului, se va ocupa de tipurile de amurg și să încerce să dezvăluie bug-uri, după care va oferi informații despre plecarea găsită. Șobolani. Funcționează prin linia de comandă, atât sub ferestre, cât și * Nix-sisteme.

    Yasca.

    Site: www.yasca.org.
    Licență: Open Source
    Platformă: Unix, Windows
    Limbi: C ++, Java, .NET, ASP, Perl, Php, Python și altele.

    Yasca. La fel cum nu trebuie să fie instalate șobolanii, nu numai interfața consolei, ci și un simplu GUI. Dezvoltatorii sunt recomandați să ruleze utilitatea prin consola - spun ei mai multe oportunități. Este amuzant că motorul YASCA este scris în PHP 5.2.5, iar interpretul (în versiunea tăiată însăși) se află într-una din subfolderele arhivării cu programul. Întregul program constă logic din partea frontală, un set de plug-uri de scanare, un generator de raport și motorul real care face ca toate uneltele să se rotească împreună. Plugin-urile sunt sudate în directorul plugin-urilor - trebuie, de asemenea, să instalați add-uri suplimentare. Un moment importantFotografiile! Trei de la pluginurile standard care fac parte din Yasca., aveți disconfort. JLENT, care scanează JVA "Oski.class-fișiere, necesită un JLint.exe în directorul de resurse / utilitare. Al doilea plugin este Antic, utilizat pentru a analiza sutele Java și C / C ++, necesită antic.exe în același timp Directorul Scanare arata ca? Procesarea de lipit de programe amuzante Yasca. Dă un rezultat sub forma unui raport special. De exemplu, unul dintre pluginurile standard GREP permite utilizarea modelelor descrise de fișierele V.GREP, specificați structurile vulnerabile și detectați cu ușurință o serie de vulnerabilități. Un set de astfel de modele este deja inclus în program: Pentru a căuta o criptare slabă, autorizarea față de "parola este o autentificare", posibile injecții SQL și mult mai mult. Când raportul dorește să vadă mai mult informatii detaliatefără a lansa pluginuri suplimentare. Ceea ce este un lucru este că, cu ajutorul lor, puteți scana în plus codul on-line (vb.net, c #, asp.net), PHP, ColdFusion, Cobol, HTML, JavaScript, CSS, Visual Basic, ASP, Python, Perl.

    CPPCheck.

    Site-ul web:
    Licență: Open Source
    Platformă: Unix, Windows
    Limbi: C ++

    Dezvoltatori CPPCheck. Ei au decis să nu se împrăștie pe trifle și, prin urmare, să parcăm doar strict anumite categorii de bug-uri și numai în codul C ++. Nu vă așteptați ca programul să dubleze avertismentele compilatorului - nu va mai fi Souflar. Prin urmare, nu fi leneși să furnizați nivelul maxim de avertismente pentru compilator și cu CPPCheck, verificați disponibilitatea scurgerilor de memorie, a operațiilor de alocare-delocație, a diferitelor suprapuneri tampon, folosind funcții depășite și multe alte lucruri. Detalii importante: Dezvoltatorii CPPCHECK au încercat să reducă numărul de răspunsuri false la minimum. Prin urmare, dacă PROG rezolvă eroarea, puteți spune cel mai probabil: "Ea este într-adevăr!" Puteți începe analiza de sub consola și utilizând o interfață plăcută GUI scrisă pe QT și lucrează sub orice platformă.

    graudit.

    Site: www.justanotherhacker.com/projects/graudit.html.
    Licență: Open Source
    Platformă: Unix, Windows
    Limbi: C ++, PHP, Python, Perl

    Acest script simplu, combinat cu un set de semnături vă permite să găsiți o serie de vulnerabilități critice în cod, iar căutarea se efectuează utilizând utilitarul GREP binecunoscut. Despre interfața GUI Nu este menționat chiar aici: totul se efectuează prin consola. Pentru a începe există mai multe chei, dar în cel mai simplu caz, este suficient să specificați calea către codul sursă ca parametru:

    graudit / Path / To / Scan

    Premiul pentru efort va fi un raport colorat privind locurile potențial acționate în cod. Trebuie să se spună că, în plus față de scenariul însuși (și aceasta este doar 100 de linii de cod pe bash), valoarea reprezintă bazele de date semnături în care reglatele și numele funcțiilor potențial vulnerabile sunt colectate în diferite limbi. În mod implicit, sunt incluse baze de date pentru Python, Perl, PHP, C ++ - puteți lua fișiere din folderul de semnături și utilizați în propriile dvs. evoluții.

    Sweat.

    Site: www.owasp.org.
    Licență: Open Source
    Platformă: Unix, Windows
    Limbi: Java, JSP, ASP .NET, PHP

    Dacă în Graudit, fișierele text sunt utilizate pentru a specifica semnătura vulnerabilității, Sweat. - o abordare mai progresivă utilizând fișierele XML. Aceasta este modul în care arată semnătura tipică:

    match Vuln - expresie regulată pentru căutare;
    Tip - indică tipul de vulnerabilitate:
    Severitatea - denotă nivelul de risc (ridicat, mediu sau scăzut)
    ALT - Cod alternativ pentru rezolvarea problemei

    Sweat. Citește baza de date de semnătură și încearcă să găsească zone problematice în codul sursă pe Java, JSP, ASP .NET și PHP. Baza este actualizată în mod constant și în plus față de lista de funcții "periculoase", include erori tipice în utilizarea de formatare a șirului și compunerea interogărilor SQL. Este demn de remarcat faptul că programul este scris pe C #, cu toate acestea, funcționează bine și sub Nixes, datorită proiectului Mono - implementarea deschisă a platformei.net.

    PHP Bug scanner

    Site: raz0r.name/releases/php-bug-Scanner.
    Licență: Freeware.
    Platformă: Windows.
    Limbi: PHP.

    Dacă aveți nevoie de o analiză statică a aplicațiilor PHP, vă recomand să încercați PHP Bug scannercare a fost scris de autorul nostru - Raz0r. Lucrarea programului se bazează pe scanarea diferitelor funcții și variabile în scripturile PHP care pot fi implicate atunci când efectuați atacuri web. O descriere a unor astfel de situații este emisă sub forma așa-numitelor presetări și 7 prese speciale grupate în categorii sunt deja incluse în program:

    • executarea codului;
    • executarea comenzii;
    • traversal director;
    • globale suprascrie;
    • include;
    • SQL-Injection;
    • diverse.

    Este amuzant faptul că programul este scris pe PHP / Winbinder și compilat bamcompile, deci arată la fel ca aplicația obișnuită Windows. Printr-o interfață prietenoasă, peniterul poate include sau deconecta analiza codului pentru acelea sau alte vulnerabilități.

    ZÂNĂ.

    Site: Pixybox.Seclab.tuwien.ac.at.
    Licență: Freeware.
    Platformă: Unix, Windows
    Limbi: PHP.

    La baza funcționării instrumentului - scanarea codului sursă și construirea graficelor fluxurilor de date. Pentru un astfel de grafic, calea de date care vine de la exteriorul programului - de la utilizator, din baza de date, de la un plug-in extern etc. Aceasta include o listă de puncte vulnerabile (sau intrări) în aplicații. Folosind modele care descriu vulnerabilitatea, Pixy verifică astfel de puncte și vă permite să definiți vulnerabilitatea XSS și SQL. Mai mult, coloanele în sine sunt construite în timpul analizei pot fi vizualizate în dosarul Grafice (de exemplu, xss_file.php_1_dep.dot) este foarte util pentru a înțelege de ce este una sau altă secțiune a codului este considerat pixy-vulnerabil. În general, dezvoltarea în sine este extrem de informativă și demonstrează modul în care lucrările de utilități avansate pentru analiza codului static. Pe pagina de documentare, dezvoltatorul în intersector spune despre diferite etape ale programului, explică logica și algoritmul modului în care PROG este analizat de unul sau altul fragment de cod. Programul însuși este scris în Java și distribuit în surse open source, iar pe pagina de pornire există chiar un serviciu simplu online pentru verificarea codului de vulnerabilitate XSS.

    Uncie 6.

    Site: www.uncelabs.com/products.
    Licență: Shareware.
    Platformă: Windows.

    Din păcate, soluțiile gratuite existente sunt încă mai mici decât omologii comerciali. Suficient pentru a învăța calitatea și detaliile raportului care este Uncie 6. - Și înțelegeți de ce. Programul se bazează pe un motor special de analiză a Openului, care verifică codul pentru respectarea regulilor și politicilor compilate de echipa de peneși profesioniști care au acumulat experiența unor companii de securitate celebre, comunitatea hackerului, precum și standardele de siguranță. Programul definește o varietate de vulnerabilități în cod: de la depășirea tamponului la injecții SQL. Dacă doriți, uncii este ușor de integrat cu IDE popular pentru a implementa verificarea automată Cod în timpul adunării fiecărei noi construiri a aplicației dezvoltate. Apropo, compania dezvoltatorului - laboratoarele uncii - vara acestui an a dobândit IBM în sine. Deci, produsul este probabil să continue dezvoltarea ca parte a uneia dintre aplicațiile comerciale IBM.

    Klocwork Insight.

    Site: www.klocworch.com.
    Licență: Shareware.
    Platformă: Windows.
    Limbi: C ++, Java, C #

    Pentru o lungă perioadă de timp, acest lucru, din nou, produsul comercial a implementat o scanare a codului static numai pentru C, C + și Java. Dar, de îndată ce Visual Studio 2008 I.net Framework 3.5 a ieșit, dezvoltatorii au declarat sprijin pentru C #. Am condus programul pe două dintre proiectele mele auxiliare, pe care am scris 7 vulnerabilități critice pe "Sharpe" și Programul. Este bine că sunt scrise exclusiv pentru uz intern :). Klocwork Insight. Inițial configurat, în primul rând, să lucreze într-un pachet cu medii de dezvoltare integrate. Integrarea cu același studio vizual sau eclipsă este extrem de reușită - începeți să vă gândiți în mod serios, că astfel de funcționalități ar trebui implementată în implicit :). Dacă nu luați în considerare problema cu logica aplicației și problemele cu viteza, atunci Klocwork Insight. Perfect copices cu căutarea de depășire a tamponului, lipsa de filtrare a codului de utilizator, capacitățile injecțiilor SQL / Cale / Cross-site, criptare slabă etc. O altă opțiune interesantă este construirea unui arbore de execuție a copacului care vă permite să vă deplasați rapid în principiul general al executării aplicației și să urmeze separat, de exemplu, pentru a procesa orice intrare a utilizatorului. Și pentru a construi rapid regulile de verificare a codului, este oferită chiar și un instrument special - Klockwork Checker Studio..

    PODTMY preveni analiza statică

    Site: www.coverity.com/products.
    Licență: Shareware.
    Platformă: Windows.
    Limbi: C ++, Java, C #

    Unul dintre cele mai renumite analizoare de cod static pe C / C ++, Java și C #. Dacă credeți că creatorii săi, soluția este folosită de mai mult de 100.000 de dezvoltatori din întreaga lume. Mecanismele grijulii vă permit să automatizați căutarea scurgerilor de memorie, excepții inutile, probleme cu viteza și, desigur, vulnerabilități de securitate. Produsul suportă diferite platforme, compilatoare (GCC, Microsoft Visual C ++ și multe altele) și, de asemenea, integrați cu diferite medii de dezvoltare, în principal Eclipse și Studio Visual. Codurile se bazează pe algoritmi de by-pass stupid de la început până la sfârșit, dar ceva de genul unui debugger care analizează modul în care programul se va comporta în diferite situații după o întâlnire de ramificare. Astfel, se realizează codul de acoperire de 100%. O astfel de abordare complicată a fost necesară pentru a analiza pe deplin aplicațiile multi-filetate optimizate în mod specific pentru a lucra la procesoare multi-core. Centrul Integrity Integrity. Vă permite să găsiți astfel de erori ca statutul rasei (eroare de proiectare a unui sistem multi-tasking, în care funcționarea sistemului depinde de modul în care sunt efectuate părțile codului), blocajele și multe altele. De ce aveți nevoie de inversări? Întrebați despre acești dezvoltatori soluții de 0 zile pentru Firefox și IE :).

    Codul Cod Owasp.

    Site: www.owasp.org.
    Licență: GNU GPL
    Platformă: Windows.
    Limbi: Java, C #, VB

    Creatorul acestui Tulza Alesia Martzial este autorul a două cărți ASP.NET, un codificator autoritar al cererilor de înaltă încărcare pentru sectorul financiar, precum și un penzer. În 2007, a publicat informații privind vulnerabilitățile critice în cele 27 de site-uri guvernamentale din Italia. Creierul său - Codul Cod Owasp. - Destinat pentru codul de analiză statică.net și J2EE / JAVA, disponibil în mod deschis pe Internet, iar la sfârșitul anului autorul promite să elibereze versiune noua programe cu o funcționalitate mult mai mare. Dar cel mai important lucru este acum implementat acum - Analiza codului sursă pe C #, Visual Basic și Java. Fișierele de verificare sunt selectate prin interfața GUI, iar scanarea începe automat. Pentru fiecare zonă problema, codul descrie vulnerabilitatea în secțiunea Descrierea amenințărilor. Adevărat, câmp Orientările OWASP.Probabil indicând modul de rezolvare a problemei, din păcate, nu este încă disponibil. Dar puteți utiliza caracteristica experimentală a scanării codului de pe aparatul de la distanță disponibil în fila Scanare la distanță. Autorul promite să pompeze în mod serios această oportunitate și, printre altele, agrega codul sursă al cererii de analiză direct din sistemul de control al versiunii.

    Avertizare

    Informațiile sunt prezentate pentru a vă familiariza și, în primul rând, arată modul în care dezvoltatorii pot evita erori critice În timpul dezvoltării aplicațiilor. Pentru utilizarea cunoștințelor dobândite în scopuri ilegale, nici autorul, nici ediția răspunderii nu sunt transportate.

    Alexander Majorov, Programator, de 11 ani este angajat în programare, dintre care șapte dedicați dezvoltării sub dispozitive mobile

    Analiza de tip static în JavaScript
    Încercați analizor de flux de pe Facebook

    Facebook a introdus un nou flux de proiect deschis - un analizor de cod static pentru limba JavaScript. Scopul principal al dezvoltării analizorului este de a simplifica căutarea erorilor

    În plus, fluxul oferă fonduri în formular expansiune sintactică Limba JavaScript în stilul Tipscript pentru indicarea tipului explicit. Sunt acceptate multe caracteristici noi prezentate în specificațiile ECMAScript 6.

    Subiectul de introducere în limbile de programare este adesea abordat. Acesta este subiectul Holivarov și definiția unei caracteristici pozitive sau negative a unei limbi specifice. Recent, au început să vorbească foarte mult despre tastarea în JavaScript. Cineva îi place așa cum este. Oamenii familiarizați cu alte limbi de programare, în special cu o tipizare strictă explicită, ia în considerare această abordare "grenadă în mâinile unei maimuțe". Știm cu toții că JavaScript este o limbă cu tastarea dinamică non-strictă. Guru de dezvoltare Frontend a învățat să o folosească pentru beneficiu, dar codul este uneori greu de înțeles. Cei care vin doar în lumea programării pe JavaScript sunt perplexați de magia pe care o face inspectorul și de multe ori prinde greșelile "pe locul de nivel". Dar să găsim mai întâi un pic în tastând deloc. Ce se întâmplă?

    Tipărirea în limbile de programare

    Limbile de programare de tipificare sunt împărțite în două tabere mari - tipărite și nemaginate. Pentru a introduce, de exemplu, includ limbi precum C, Python, PHP, Lua, JavaScript. Exemple de limbi inepitate: asambl, bilansfuck. Da da exact. JavaScript, ca multe alte limbi interpretabile, este tastat. Prin urmare, în nici un caz nu spune că este Inepit. Mai ales pe interviuri.

    La rândul său, limbile tipizate sunt împărțite în alte categorii de intersecție:

    • Cu tastarea statică sau dinamică.
    • Cu scriere strictă sau non-strictă.
    • Cu o tipizare explicită sau implicită.

    Limbi cu tastare statică

    Când tastarea statică, tipurile finale de variabile și funcții sunt instalate la etapa de compilare. Compilatorul înainte de a începe programul corectează erorile dvs. în inconsecvența tipurilor. Limbi Exemple: c, java, c #.

    Limbi de tipizare dinamică

    În tastarea dinamică, toate tipurile se găsesc deja în timpul executării programului. Și dacă ați făcut o greșeală, veți învăța despre el numai atunci când executați programul. Prin urmare, cu tastarea dinamică, este foarte important să se acorde o atenție deosebită verificărilor și erorilor de interceptare. Exemple de limbi: JavaScript, PHP, Python, Ruby.

    Tipificare strictă (puternică)

    Limbile cu tastarea strictă nu permit amestecarea diferitelor tipuri în expresii și nu vor efectua tipuri de tipuri implicite automate. De exemplu, nu puteți afla numărul sau alt tip diferit de șir. Exemplu Limbi: Java, Python, Haskell, Lisp.

    Tipificare non-bogată (slabă)

    Limbile cu tipizare non-accident vascular cerebral Efectuați automat multe tipuri implicite de tipuri. Ei o fac, chiar dacă poate apărea pierderi de precizie sau transformare, ambiguu. Exemple de limbi: PHP, JavaScript, Visual Basic.

    Tipificare explicită

    În limbi text în mod explicit, tipul de noi variabile / funcții și argumente trebuie să fie specificat explicit. Exemple de limbi: C ++, D, C #.

    Tipificare implicită

    În limbile cu tipizare implicită, sarcina este prezentată compilatorului / interpretului. Exemple de limbă: JavaScript, PHP, Lua. În astfel de limbi, de regulă, obiectele există metode speciale cauzate de tip. De exemplu, în PHP există o metodă _tostring () și în JavaScript aceeași metodă, dar fără a sublinia - tostring (). Aceste metode sunt numite atunci când obiectul este adus la tipul de șir. Uneori, astfel de metode sunt numite magie (orice procese implicite sunt întotdeauna magice).

    Este important să observăm că toate aceste categorii se intersectează. Pe baza acestor categorii, obținem că JavaScript are o tipizare dinamică implicită. Și dacă spui exagerat, caracterul limbii poate fi descris după cum urmează: În orice situație incomprehensibilă, noi toți dau tuturor primitivilor, în principal la șir. Deși totul este mai complicat de fapt, dar nu vom intra acum în detalii.

    "De ce avem nevoie de tastare?" - Te poți întreba. Fără ea, JavaScript a trăit bine timp de 20 de ani. Răspunsul este simplu: Anterior, JavaScript nu a rezolvat probleme complexe ale nivelului corporativ. Acum, această limbă a trecut dincolo de browser și a mers pe teritoriul backendului. Când scrieți o aplicație mare, devine dificil să prindeți greșeli care sunt adesea asociate cu tipul de tip.

    Superscript pe JavaScript.

    Deoarece JavaScript se efectuează pe partea clientului (în browsere), una dintre soluțiile problemei pare să creeze o limbă - un dialect, care va fi compilat în JS. El acționează ca un asamblator.

    Există limbi cum ar fi TipCript, Dart, ATScript, care adaugă o tipizare statică strictă și chiar verificări în timpul executării (deși adaugă ovonie). Toate aceste limbi nu adaugă pur și simplu tipuri, ele adaugă, de asemenea, fie sintaxă zahăr, fie la toate implementarea sa, care este scrisă în JS.

    Citiți întregul articol din revista "Administrator de sistem", №1-2 pentru 2015 la paginile 86-88.

    Versiunea PDF a acestei camere poate fi achiziționată în magazinul nostru.

    1. Fluxul site-ului - http://flowype.org.

    În contact cu

    Dezvoltarea aplicațiilor securizate pe JavaScript este o ocupație destul de dificilă. Dar pe deplin îndeplinite. În articolul de astăzi, vom lua în considerare caracteristicile JavaScript, din cauza problemelor de securitate și discuții despre acest lucru îi va ajuta să evite.

    De ce este dificil să scrieți un cod securizat pe js

    Deci, aici sunt 5 motive pentru care este dificil să scrieți un cod securizat pe JS

    Compilatorul nu va ajuta

    JavaScript este un limbaj interpretabil. Acest lucru înseamnă că compilatorul nu va fi tot timpul să vă plângeți de ceva, refuzând să lucrați și să vă împingeți pentru a repara erorile și a optimiza codul.

    Esența dinamică JavaScript

    JavaScript dinamic, mare și asincron. Și acestea sunt toate semnele de a intra în necazuri sunt mai ușoare decât plămânii.

    1. Media de limbă cum ar fi Eval și pornirea codului terț prin script SRC vă permite să executați linii direct în ratar. Ca urmare, este dificil să se ofere "garanții statice" pe care codul se va comporta într-un anumit mod. Analiza dinamică Este, de asemenea, dificilă (a se vedea lucrarea științifică).

    Utilizați Eval.

    2. Tipificarea slabă Aceasta conduce la faptul că metodele de analiză statică bine stabilită nu sunt ușor - cel puțin în comparație cu limbile tipărite static (de exemplu, Java).

    3. Coloane asincrone, Provocările despre care JavaScript admite prin mecanisme precum SetTimeout și XmlhttpRequest (că cel mai faimos Ajax), potrivit statisticilor ascunde cele mai insidioase greșeli.

    Capacități de inacțiune ale JS.

    Ceea ce tocmai nu au tras în JavaScript de-a lungul anilor! În special, are prototipuri, funcții de primă clasă și închidere. Ei fac o limbă și mai dinamică, iar scrierea unui cod sigur este mai dificil.

    1. prototipuri. Semnificația acestora este că programele sunt scrise în spiritul unei abordări orientate pe obiect, dar fără utilizarea claselor. Cu această abordare, obiectele moștenesc proprietățile de care au nevoie direct de alte obiecte (prototipuri). În același timp, în prototipurile JS pot fi redefinite direct în clasament. Și dacă sa întâmplat această suprasarcină, efectul se aplică imediat tuturor obiectelor care moștenesc proprietățile prototipului redefinite.

    Cum sunt procesate prototipurile

    În corectitudine trebuie să spun că în noile specificații ECMAScript, sunt, de asemenea, prezente clase.

    2. Funcțiile primei clase. JS are un model foarte flexibil de obiecte și funcții. Proprietățile obiectelor și valorile acestora pot fi create, modificate sau șterse direct în rataryime și totul are acces prin funcții de primă clasă.

    3. Circuite. Dacă declarați o funcție în interiorul unei funcții diferite, atunci primele primesc acces la variabile și argumente ale acestuia din urmă. Mai mult, aceste variabile continuă să existe și să rămână funcții interne disponibile - chiar și după funcția externă în care aceste variabile sunt definite, s-au încheiat.

    Din cauza acestei flexibilitate și JavaScript dinamic (a se vedea paragrafele 1 și 3), setul de set de proprietăți disponibile ale obiectului în timpul analizei statice este o sarcină nerezolvată. Cu toate acestea, dezvoltatorii web de pretutindeni utilizează trăsături dinamice ale limbii, și, în consecință, este imposibil să le neglijați atunci când analizați codul nu poate fi. În caz contrar, care este garanția de securitate?

    Închideți interacțiunea dintre JavaScript și DOM

    Este necesar să se ofere o actualizare a paginii web "fără sudură, chiar în Ranktime. Dom, după cum știți, este un standard modelul obiectuluineutru în ceea ce privește platformele și limbile, care este destinat desenului documentele HTML. și xml. DOM are propriul API pentru a lucra cu documentul afișat: pentru accesul dinamic, deplasarea și actualizarea documentului afișat (conținutul, structura și stilul său). Modificările în DOM pot fi făcute dinamic prin JavaScript. Și aceste modificări sunt afișate imediat în browser.

    Datorită DOM, pagina web încărcată în browser poate fi actualizată în etapele de-a lungul datelor de la server. Cu toate acestea, o astfel de confort are o parte inversă: fragmentele de cod care sunt responsabile pentru interacțiunea dinamică dintre JS și DOM sunt deosebit de susceptibile la erori.

    Cele mai frecvente erori din aplicațiile web

    Interacțiuni complexe ale evenimentelor

    JavaScript este o limbă controlată de evenimente (eveniment-acționat). Permite dezvoltatorilor să se înregistreze pe nodurile DOM așa-numitele "ascultători de evenimente" - ascultători de evenimente. Și, deși majoritatea evenimentelor sunt numite acțiuni de utilizare, există și cele care pot fi inițiate fără ea - de exemplu, evenimente de timp și provocări asincrone. În acest caz, fiecare eveniment poate fi reluat peste tot pe copacul DOM și activează mai mulți "ascultători" simultan. Uneori pentru a urmări toate acestea este o sarcină destul de netrivială.

    Cum sunt procesate evenimentele

    Din aceste motive, codul de pe JS poate fi dificil de înțeles, analiză și testare. Ușor viața unui dezvoltator Web va ajuta la scrierea unui cod sigur utilități speciale.

    Utilități pentru testarea codului pentru JS

    Există utilități pentru parsare (de exemplu, Esprima, Rhino), optimizare (de exemplu, compilatorul Google închidere) și analiza codului static pentru prezența comună erori sintactice (de exemplu, Jshint).

    În plus, există mai multe cadre dovedite care ajută dezvoltatorii web să acopere testele de cod JS. Printre ei:

    • Quit este un cadru popular pentru modulele de testare;
    • Jasmine - Cadrul BDD (dezvoltarea comportamentului) pentru testarea codului;
    • Mocha - Cadrul pentru codul de testare, începe atât în \u200b\u200bnod.js, cât și în browser;
    • jSTESTDRiver - Cadru, care, printre altele, poate conduce un set de teste dintr-o dată prin mai multe browsere.

    În plus, există cadre de testare care impedați comportamentul browserului și vă permit să conduceți automat exemplele de testare. Acestea sunt deosebit de relevante la depanarea secțiunilor de cod care sunt responsabile pentru interacțiunea dintre JS și DOM și oferă o infrastructură convenabilă pentru manipularea DOM.

    De exemplu, seleniul, fantomele și Slimerjs oferă un API prin care puteți rula instanțele browserului și lucrați cu ei. Prin API, puteți activa evenimentele și accesați elementele DOM direct în Ranktime - adică pentru a testa codul în condiții cât mai aproape de real. Desigur, o parte considerabilă a lucrării va trebui făcută manual, dar chiar și acesta este deja un ajutor bun în testarea.

    Utilități pentru analiza statică

    Anterior, utilitățile de identificare a secțiunilor problematice ale codului au fost analizoare statice. Adică, având în vedere toți FADERS DYNADIC JS, ar putea oferi doar asistență limitată. Cu toate acestea, ele sunt utile în analiză. Iată câteva exemple majore.

    Wari este un analizor static, care examinează relația dintre funcțiile JS, stilurile CSS, etichetele HTML și imaginile. Semnificația acestui utilitar este de a găsi resurse neutilizate atunci când analiza statică. Cu toate acestea, cu dinamica lui Wari, desigur, nu va face față.

    JSLint este un cod static pentru analizarea codului static care este scris în JavaScript. Verifică codul pentru respectarea bunelor practici.

    Google Closure Compilator este un optimizator JS care rescrie automat codul pentru ao face mai rapid și mai compact. În același timp, toate comentariile zboară în țeavă și orice secțiune neutilizată a codului.

    WebCent (a se vedea lucrarea științifică) - analizor static avansat. În lucrare, vine de la faptul că codul JS al clientului (unul care este încărcat în browser) nu este stocat pe partea laterală a serverului ca un întreg și împrăștiată prin codul serverului cu bucăți. "Sufletele" în aceste piese nu pot fi detectate cu ușurință până când este generat codul client dintr-o singură bucată. Webscentul analizează codul clientului pentru a găsi locații cu probleme în codul serverului. În același timp, activitatea site-ului de analiză statică este redusă în principal la HTML, CSS și JS, pentru a detecta un cod duplicat și erori în sintaxa HTML.

    Utilități pentru analiza dinamică

    JSNOSE este o utilitate în care analiza statică și dinamică sunt combinate. Acesta analizează codul pentru treisprezece antipatterns. Șapte dintre ele (inclusiv obiectul leneș și funcția lungă) sunt comune pentru toate limbile de programare, iar alte șase (mirosuri de închidere, variabilele globale excesive, apelurile imbricate și altele) sunt specifice pentru JavaScript.

    Dompletion este un utilitar automat care ajută la un dezvoltator web să înțeleagă codul la vizionare: explică motivul prezenței structurilor DOM, efectuează o analiză dinamică și oferă, de asemenea, un autocompute inteligent pentru codul care interacționează cu DOM.

    Clematis este un cadru care ajută la dezmembrarea interacțiunilor complexe a evenimentelor. Clematis înregistrează toate evenimentele care sunt declanșate în timpul executării și le vizualizează sub forma unui model comportamental abstract, care reflectă relațiile temporare și cauzale dintre componente și evenimente.

    Concluzii

    Deci, pentru a urmări ceea ce se întâmplă atunci când executați script-uri pe JS nu este ușor, dar, înarmați cu unelte potrivite, puteți găsi și rescrie locurile tulbure în cel mai confuz cod. Cu toate acestea, JavaScript nu este în evidență: noile caracteristici apar în ea, acum este adesea folosit pentru a scrie aplicații (atât mobile, cât și desktop) și este, de asemenea, din ce în ce mai gasit pe servere (și nu numai) datorită nod.js. Aceasta înseamnă că arta de capturare a bug-urilor ar trebui să fie afișată la un nivel nou.

    Nu fiecare rând din codul meu este realizat perfect de la prima dată. Ei bine, în unele cazuri ... uneori ... Bine - aproape niciodată. Adevărul este că petrec mult mai mult timp pentru a vă corecta greșelile stupide decât aș vrea. De aceea folosesc analizoare statice în aproape fiecare fișier JavaScript scris de mine.

    Analizoarele statice Vizualizați codul și găsiți erori în el înainte de a le conduce. Acestea efectuează verificări simple, cum ar fi inspecția sintaxei versiunii forțate (de exemplu, prezența tablei în loc de spații) și verificări globale, cum ar fi verificarea faptului că funcțiile nu sunt prea complicate. Analizoarele statice caută, de asemenea, erori care nu pot fi găsite în procesul de testare, de exemplu, \u003d\u003d în loc de \u003d\u003d\u003d.


    În proiecte mari și atunci când lucrați în echipe mari, nu veți împiedica un mic ajutor în găsirea unor astfel de bug-uri "simple", care nu sunt de fapt atât de simple cum se pare.


    JSLint, Jshint și Compilator de închidere


    Există trei opțiuni principale pentru analizoarele statice pentru JavaScript: Jslint, Jshint și Compilator de închidere.



    Jslint a fost primul analizor static pentru JavaScript. Acesta poate fi lansat pe site-ul oficial sau să utilizeze unul dintre add-urile care pot fi rulate în fișierele locale. Jslint găsește multe greșeli importante, dar este foarte dur. Iată un exemplu luminos:



    Var s \u003d "șirul meu";
    pentru (var i \u003d 0; i< s.length; i++) {
    Consola.log (s.charat (i));
    }

    Jslint prezintă două erori în acest cod:



    Neașteptate "++".
    Deplasați declarațiile "var" în partea de sus a funcției.

    Prima problemă este definiția variabilei I într-un ciclu. Jslint, de asemenea, nu acceptă operatorul ++ la sfârșitul determinării ciclului. El dorește ca codul să arate așa:



    Var s \u003d "șirul meu";
    var i;
    pentru (i \u003d 0; i< s.length; i = i + 1) {
    Consola.log (s.charat (i));
    }

    Apreciez creatorii lui Jslint, dar ca pentru mine - acesta este un bust. Sa dovedit a fi dur și pentru Anton Kovalev, așa că a creat Jshint.



    Jshint funcționează la fel ca Jslint, dar este scris în plus față de nod.js și, prin urmare, este mai flexibilă. Jshint include un număr mare de opțiuni, care vă permite să efectuați verificări ale utilizatorilor scriind propriul generator de rapoarte.

    Puteți rula Jshint de pe site, dar în cele mai multe cazuri este mai bine să instalați Jshint ca un instrument local de comandă folosind NODE.JS. Odată ce ați setat-o \u200b\u200bpe Jshint, o puteți rula în fișierele dvs. utilizând o astfel de comandă:



    Jshint test.js.

    Jshint include, de asemenea, plugin-uri pentru populare editori de textPrin urmare, acesta poate fi lansat în procesul de scriere a codului.


    Compilator de închidere


    Compilatorul de închidere de la Google este o variație complet diferită a programului. După cum sugerează numele său, nu este doar un program de verificare, ci și compilatorul. Este scris în Java și se bazează pe Analizorul de Rhino din Mozilla. Compilatorul de închidere include un mod simplu pentru a efectua o verificare a codului de bază și moduri mai complexe care permit verificarea suplimentară și asigurarea conformității cu definițiile speciilor individuale.


    Closure Compilator raportează erorile din codul JavaScript, dar creează versiuni JavaScript minimizate. Compilatorul elimină spațiul gol, comentariile și variabilele neutilizate și simplifică expresii lungi, făcând ca scriptul cât mai compact posibil.


    Google a făcut o versiune foarte simplă a compilatorului disponibil în rețea, dar cel mai probabil doriți să descărcați compilatorul de închidere și să îl executați la nivel local.


    Compilatorul de închidere După verificarea codului, afișează o listă de fișiere într-un fișier minimizat. Astfel, îl puteți rula descărcând fișierul compilator.jar.



    java -jar compiler.jar-js_output_file compress.js-js test1.js-js test2.js

    Selectați programul corect de verificare


    În proiectele mele, combin compilatorul de închidere și jshint. Compilatorul de închidere efectuează minimizarea și verificarea de bază, în timp ce Jshint efectuează o analiză a codului mai complex. Aceste două programe funcționează perfect împreună, iar fiecare dintre ele acoperă acele zone pe care alții nu le pot atinge. În plus, pot folosi caracteristicile extensiei Jshint pentru a scrie programe de verificare personalizate. Un program comun scris de mine verifică anumite funcții pe care nu le am nevoie, cum ar fi funcțiile de apel care nu ar trebui să fie în proiectul meu.


    Acum, când ne-am uitat la mai multe programe de verificare, să înțelegem un mic cod rău. Fiecare dintre aceste șase exemple este un cod care nu merită scris și situațiile în care programele de verificare a codului vă pot economisi.


    În acest articol, Jshint este utilizat pentru majoritatea exemplelor, dar compilatorul de închidere emite, de obicei, un avertisment similar.


    \u003d\u003d sau \u003d\u003d\u003d?


    JavaScript este o limbă cu tastarea dinamică. Nu este nevoie să determinați tipurile în procesul de scriere a codului, în timp ce acestea există la pornire.


    JavaScript oferă două operatori de comparație pentru a controla astfel de tipuri dinamice: \u003d\u003d și \u003d\u003d\u003d. Să ne uităm la acest exemplu.



    var n \u003d 123;
    var s \u003d "123";

    dacă (n \u003d\u003d s) (
    Alertă ("variabilele sunt egale");
    }

    dacă (n \u003d\u003d\u003d s) (
    Alertă ("variabile identice");
    }

    Operatorul de comparare == - Acestea sunt resturile limbii cu, în care JavaScript este înrădăcinat. Utilizarea sa este aproape întotdeauna o eroare: compararea valorilor separat de tipuri este rar faptul că dezvoltatorul vrea de fapt să facă. De fapt, numărul "o sută douăzeci și trei" diferă de "una două trei" șiruri de caractere. Acești operatori sunt ușor de scris și chiar mai ușor de curățat. Verificați acest cod utilizând Jshint și veți primi următoarele:

    Test.js: Linia 9, Col 12, așteptat "\u003d\u003d\u003d" și în schimb a văzut "\u003d\u003d".

    Variabile nedeterminate și definiții târzii


    Să începem cu un cod simplu:



    TEST DE FUNCTIONARE () (
    Var myvar \u003d "salut, lume";
    Consola.log (myvar);
    }

    Vedeți bug-ul? Fac această greșeală de fiecare dată. Rulați acest cod și veți obține o eroare:



    ReferenceError: Myvar nu este definit

    Să facem o problemă puțin mai complicată:



    TEST DE FUNCTIONARE () (
    Myvar \u003d "salut, lume";
    Consola.log (myvar);
    }

    Rulați acest cod și veți primi următoarele:



    Salut Lume.

    Acest al doilea exemplu funcționează, dar are efecte secundare foarte neașteptate. Regulile pentru definirea variabilelor JavaScript și a zonelor de vizibilitate sunt, în cel mai bun caz, confuze. În primul caz, Jshint va raporta următoarele:

    Test.js: linia 3, col 17, "myvar" nu este definit.

    În al doilea caz, el va raporta acest lucru:



    Test.js: linia 2, col 5, "myvar" nu este definit.
    test.js: linia 3, col 17, "myvar" nu este definit.

    Primul exemplu vă va ajuta să evitați eroarea timpului de execuție a programului. Nu este nevoie să testați aplicația dvs. - Jshint va găsi o greșeală pentru dvs. Al doilea exemplu este mai rău, deoarece ca urmare a testării, nu veți găsi bug-ul.


    Problema celui de-al doilea exemplu este invizibilă și complicată. Variabila Myvar a dispărut acum din domeniul său de aplicare și a crescut în zona globală. Aceasta înseamnă că va exista și are un salut, lumea chiar și după începerea funcției de testare. Aceasta se numește "poluarea domeniului global".


    Variabila Myvar va exista pentru fiecare altă funcție care va fi rulată după funcția de testare. Rulați următorul cod după executarea funcției de testare:



    Consola.log ("myvar:" + myvar);

    Încă mai faci Bună ziua, lumea. Variabila myvar va atârna în jurul codului dvs. ca șablon care duce la bug-uri dificile pe care le veți găsi toată noaptea înainte de eliberare, dar tot ceea ce ați uitat să introduceți Var.


    Această intrare a trecut prin intermediul serviciului RSS Full-text - dacă acesta este conținutul dvs. și citiți-l pe site-ul altcuiva, vă rugăm să citiți întrebările frecvente la http://ift.tt/jcxqjw.