2012 · 48 citations · 13 references
ComputingComputer ScienceFormal MethodsProgramming LanguagesSoftware EngineeringApplication Programming InterfacesClient-side SecurityDeductive VerificationType CheckingWeb Application SecurityClient-side Web SecurityJavascriptJavascript SecurityLogical DeductionModule ArchitectureSeparation LogicSoundnessSoundness Proofs
JavaScript has become the most widely used language for client-side web programming. The dynamic nature of JavaScript makes understanding its code notoriously difficult, leading to buggy programs and a lack of adequate static-analysis tools. We believe that logical reasoning has much to offer JavaScript: a simple description of program behaviour, a clear understanding of module boundaries, and the ability to verify security contracts. We introduce a program logic for reasoning about a broad subset of JavaScript, including challenging features such as prototype inheritance and "with". We adapt ideas from separation logic to provide tractable reasoning about JavaScript code: reasoning about easy programs is easy; reasoning about hard programs is possible. We prove a strong soundness result. All libraries written in our subset and proved correct with respect to their specifications will be well-behaved, even when called by arbitrary JavaScript code.
13
Resources, concurrency, and local reasoning
Peter W. O’Hearn · Theoretical Computer Science · 2007 · 558 citations
An analysis of the dynamic behavior of JavaScript programs
Gregor Richards, Sylvain Lebresne, Brian R. Burg et al. · 2010 · 356 citations
Dino Distefano, Matthew J. Parkinson J · 2008 · 227 citations
Concurrent abstract predicates
Thomas Dinsdale-Young, Mike Dodds, Philippa Gardner et al. · 2010 · 197 citations
Separation logic, abstraction and inheritance
Matthew Parkinson, Gavin Bierman · 2008 · 142 citations