SlideShare a Scribd company logo
1 of 54
Security Testing Of YUI Powered Applications




November 15, 2012   YUIConf 2012   Dmitry Savintsev, Albert Yu
Who we are
Dmitry Savintsev
- Yahoo Developer / Paranoid of 12+ years
- Assembly -> C++ -> PHP -> Javascript
- @dimisec, github.com/dmitris


Albert Yu
- Yahoo Engineer / Paranoid since 2005
- @yukinying
Agenda:
 Why Security Testing
 JavaScript Testing vs. Pentesting
 Tools of Trade
 Testing for XSS
 Static Code Analysis
 The Road Ahead
 Testing Well-Known Benefits

 States and validates application behavior
   “runnable documentation”

 No tests – not maintainable
 Security defects – highest negative impact
 Users’ data at stake!
 Your app WILL be tested by the world
Sad state of web application security

XSS is prevailing

Server- and OS-level Javascript

Need to pull all stops
Modern Javascript Testing:
 Unit, functional integration testing
 Code coverage / reporting tools
 Integral part of the CI workflow
Pentesting
• Established practice in webappsec world
• Combination of manual poking & use of
  different tools (ex. Burp Proxy)
• Flourishing consulting business
Webappsec & Javascript
• “it’s complicated” relationship
• C++ / Java enterprise tradition
• JS – too dynamic & wild
JS Dev and Webappsec need each other
• Javascript eats the world
  • Just look at Yahoo! (Cocktails…)
• Mobile / alt screens huge impetus
• Attack surface rapidly expanding
• Dire shortage of manpower and talent
Security testing challenges
• “End of scanning”
• Difficult-to-impossible to test
  automatically
• “surface discovery” – mapping FE apps
• Highly situation / context dependent
Code and feature coverage problem

Testing needs to be guided through the app

Testing and coding in close proximity

Power to the developers!!
Tools for (security) testing
• Selenium / Webdriver
   • Greatly matured in the recent years
   • JS bindings still new (only remote server)
• PhantomJS (and Ghostdriver)
• YUI Test
XSS Testing



 manual hacking
 Web automation
 JS unit tests
Some popular XSS Injections


 <xss>
 “><script>alert(123)</script>
 <img src=bla onerror=alert(123)>
 "onmouseover="alert(123)”x=”
 javascript:alert(123)
 alert(123)
XSS Testing

         DEMO

https://github.com/dmitris
     /yuiconftalk2012
if (document.location.hash.substr(1)) {
todoview_node = Y.one('.todo-view');
todoview_node.setHTML('<input type="checkbox"
   class="todo-checkbox">
  <span class="todo-content" tabindex="0">' +
  document.location.hash.substr(1) +
  '</span>' );
XSS Summary


Be careful paranoid with URL inputs:
• location.hash
• location.search
• location.pathname
• location.href

Avoid passing Javascript in cgi parameters

WRITE some SECURITY TESTS!
Static Analyzer




Interact without touching.
JSLint, JSHint
Thanks to NodeJS, now they are available as
CLI tool.

% # JavaScript Good Parts
% npm -g install jslint
% jslint --white --browser
foo.js

% # JavaScript Less Good Parts
% # Better reporting
% npm -g install jshint
$ jslint --white --browser yui-debug.js

yui-debug.js
 #1 'YUI' was used before it was defined.
    if (typeof YUI != 'undefined') { // Line 15, Pos 12
 #2 Expected '!==' and instead saw '!='.
    if (typeof YUI != 'undefined') { // Line 15, Pos 16
 #3 Unexpected dangling '_' in '_YUI'.
    YUI._YUI = YUI; // Line 16, Pos 9

$ jshint yui-debug.js
yui-debug.js: line 59, col 9, Redefinition of 'YUI'.
yui-debug.js: line 385, col 26, Missing semicolon.
yui-debug.js: line 617, col 35, 'loader' is already defined.
yui-debug.js: line 632, col 18, Don't make functions within a
loop.
yui-debug.js: line 997, col 17, ['loader'] is better written
in dot notation.
yui-debug.js: line 2210, col 34, Expected an assignment or
function call and instead saw an expression.
A Very Rough Benchmark




Disclaimers
1. jQuery and YUI benchmark are not correct as the code does not stored on
    the path that stores Todomvc sample.
2. JSLint stops when it sees critical error or too many errors.
3. Minified code may affect the reporting.
4. No yui-lint customizations.
Benchmarks on YUI Gallery
Running yui-lint (custom .jshintrc)

       461 gallery modules

      42 without any issues
     74 warnings in average
    86 modules > 100 issues
    873 issues in maximum
One may be
lucky, strong,
courageous …
… Some others
may be more
easily vulnerable.
Develop – where we run it now (?)
Commit – where it should be run
Review – and here as well
Merge
Release
var express = require('express');
var app = express();
var Y = require('yui/io-base');

app.get('/api*', function(req, res){
  var params = require('url').parse(req.url, true);
  var url = "http://localhost:3000/json/" +
            params.query.question ;
  Y.io(url, { on: { complete: function(id, e) {
    try {
      var json = JSON.parse(e.responseText);
    } catch (err) { console.log(err); }
    res.end( json.answer + "n" );
  } } }); });

app.get('/json/whoami', function(req, res)
{ res.end('{"answer":"bob"}'); });

app.get('/json/*', function(req, res)
{ res.end("Error: I don't understand"); });

app.listen(3000);
try {
  var json =
         JSON.parse(e.responseText);
} catch (err) {
  console.log(err); }
  res.end( json.answer + "n" );
}
JSLINT OUTPUT:

#1 Missing 'use strict' statement.
    var params = require('url').parse(req…

#2 'json' was used before it was defined.
    try { json = JSON.parse(e.responseText); }

Usually easier to enforce on server side.
Frontend code are harder to enforce:
1. Multiple script blocks
2. Browser compatibilities
3. Excuses ..?
4. Frontend code will not be run on server?
DYNAMIC TEST
TDD: TEST IT (safely), BREAK IT, FIX IT
ES5 STRICT MODE

TEST THE FORWARD COMPATIBLITY OF
            YOUR CODE

     FOR SECURE GOOD SAKE

      TEST IT, BREAK IT, FIX IT

            “use strict”;
On-the-fly Testing Hacking
https://github.com/yukinying/connect-strictenjs

  Add “strict mode” without modifying the file

            Bonus 1: code-beautifier

     Bonus 2: middleware for nodejs server
              and test frameworks
On-the-fly Testing Hacking
https://github.com/yukinying/connect-strictenjs

  Add “strict mode” without modifying the file

            Bonus 1: code-beautifier

     Bonus 2: middleware for nodejs server
              and test frameworks
ES5 Strict Mode
Opt-in via “use strict” pragma

Option 1: Globally applying on same file/block/eval
block.
"use strict";
YUI.use(...

same script block, eval, file
Option 2: Function level
YUI.use('...’, function(Y){
  "use strict";
  var a = ...
The Big 4
// 1. Global Variable Protection

var dump_this_as_global = function() {
  "use strict";
  console.log(this.a);
  // Err:
  // Cannot read property 'a' of
  // undefined
};

dump_this_as_global();
dump_this_as_global.call({a:1});
// 2. Global Variable Implicit
//    Declaration

(function implicit_var() {
  "use strict";

  for( var obj in list ) { ...
  // Err: obj is not defined
})();
console.log(i);


DON’T DO THIS IN NODEJS
// 3. function inside function

(function function_function () {
  "use strict";
  if (1!=2) function dummy() { };
  // Err: functions can only be
  // declared at top level or
  // immediately within
  // another function
})();
// 4. Duplicated property

(function duplicate() {
  "use strict";
  var a = {b:1, b:2};
  console.log(a.b);
})();
Run Lint

Mandate Tests in Build Env

        Use Strict.

  Test it, break it, fix it.
Security Testing Benefits
Intent (and attempt) of security testing
 => more robust product
Security Testing – basic safety
… just like seatbelts
We need good seatbelts and better cars…
but also cultural shift
Go real Pro
keep learning about web security
think about ways to misuse your app
think
        REAL HARD
about ways to misuse your app
Buckle Up
please



 WRITE
   some



SECURITY
  TESTS
Creative Commons:

http://upload.wikimedia.org/wikipedia/commons/2/2a/Operation
Doorstep1-Car18.jpg
http://www.flickr.com/photos/77827383@N00/3873533711/
http://www.flickr.com/photos/44449623@N07/6812272464/
http://www.flickr.com/photos/djackmanson/489401961/
http://www.flickr.com/photos/sethmazow/2088372704/
http://www.flickr.com/photos/katjung/1199062421/
http://www.flickr.com/photos/warriorswaytx/7606553088/
http://www.flickr.com/photos/la_sombra/6036168427/
http://www.flickr.com/photos/nicolas-baltenneck/4914565860/
http://www.flickr.com/photos/danzen/2287834687
http://upload.wikimedia.org/wikipedia/commons/e/ec/Operation
Doorstep2-DemolishedHouse4.jpg

More Related Content

What's hot

Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
Ran Mizrahi
 
node.js practical guide to serverside javascript
node.js practical guide to serverside javascriptnode.js practical guide to serverside javascript
node.js practical guide to serverside javascript
Eldar Djafarov
 

What's hot (20)

jQuery Proven Performance Tips & Tricks
jQuery Proven Performance Tips & TricksjQuery Proven Performance Tips & Tricks
jQuery Proven Performance Tips & Tricks
 
AngularJS - Overcoming performance issues. Limits.
AngularJS - Overcoming performance issues. Limits.AngularJS - Overcoming performance issues. Limits.
AngularJS - Overcoming performance issues. Limits.
 
JavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemJavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and Ecosystem
 
The JavaFX Ecosystem
The JavaFX EcosystemThe JavaFX Ecosystem
The JavaFX Ecosystem
 
Javascript Testing with Jasmine 101
Javascript Testing with Jasmine 101Javascript Testing with Jasmine 101
Javascript Testing with Jasmine 101
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Testing JavaScript Applications
Testing JavaScript ApplicationsTesting JavaScript Applications
Testing JavaScript Applications
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsers
 
Zombiejs
ZombiejsZombiejs
Zombiejs
 
Javascript Test Automation Workshop (21.08.2014)
Javascript Test Automation Workshop (21.08.2014)Javascript Test Automation Workshop (21.08.2014)
Javascript Test Automation Workshop (21.08.2014)
 
node.js practical guide to serverside javascript
node.js practical guide to serverside javascriptnode.js practical guide to serverside javascript
node.js practical guide to serverside javascript
 
Javascript testing: tools of the trade
Javascript testing: tools of the tradeJavascript testing: tools of the trade
Javascript testing: tools of the trade
 
Hacking Adobe Experience Manager sites
Hacking Adobe Experience Manager sitesHacking Adobe Experience Manager sites
Hacking Adobe Experience Manager sites
 
Jasmine - why JS tests don't smell fishy
Jasmine - why JS tests don't smell fishyJasmine - why JS tests don't smell fishy
Jasmine - why JS tests don't smell fishy
 
What should a hacker know about WebDav?
What should a hacker know about WebDav?What should a hacker know about WebDav?
What should a hacker know about WebDav?
 
Build Web Apps using Node.js
Build Web Apps using Node.jsBuild Web Apps using Node.js
Build Web Apps using Node.js
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
 
Building a Startup Stack with AngularJS
Building a Startup Stack with AngularJSBuilding a Startup Stack with AngularJS
Building a Startup Stack with AngularJS
 
Vuejs testing
Vuejs testingVuejs testing
Vuejs testing
 

Similar to Security testing of YUI powered applications

Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e big
Andy Peterson
 
Server Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yetServer Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yet
Tom Croucher
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
David Padbury
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
Ben Lin
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
Igor Bronovskyy
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
mlilley
 

Similar to Security testing of YUI powered applications (20)

YUI 3
YUI 3YUI 3
YUI 3
 
Javascript unit testing, yes we can e big
Javascript unit testing, yes we can   e bigJavascript unit testing, yes we can   e big
Javascript unit testing, yes we can e big
 
Javascript tdd byandreapaciolla
Javascript tdd byandreapaciollaJavascript tdd byandreapaciolla
Javascript tdd byandreapaciolla
 
Server Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yetServer Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yet
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
Automated acceptance test
Automated acceptance testAutomated acceptance test
Automated acceptance test
 
Beyond DOMReady: Ultra High-Performance Javascript
Beyond DOMReady: Ultra High-Performance JavascriptBeyond DOMReady: Ultra High-Performance Javascript
Beyond DOMReady: Ultra High-Performance Javascript
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
How and why i roll my own node.js framework
How and why i roll my own node.js frameworkHow and why i roll my own node.js framework
How and why i roll my own node.js framework
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testing
 
Reliable Javascript
Reliable Javascript Reliable Javascript
Reliable Javascript
 
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
09 - express nodes on the right angle - vitaliy basyuk - it event 2013 (5)
 
Browser testing with nightwatch.js - Drupal Europe
Browser testing with nightwatch.js - Drupal EuropeBrowser testing with nightwatch.js - Drupal Europe
Browser testing with nightwatch.js - Drupal Europe
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
 
Workflow para desenvolvimento Web & Mobile usando grunt.js
Workflow para desenvolvimento Web & Mobile usando grunt.jsWorkflow para desenvolvimento Web & Mobile usando grunt.js
Workflow para desenvolvimento Web & Mobile usando grunt.js
 
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
CollabSphere 2021 - DEV114 - The Nuts and Bolts of CI/CD With a Large XPages ...
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
 
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverageTesting NodeJS with Mocha, Should, Sinon, and JSCoverage
Testing NodeJS with Mocha, Should, Sinon, and JSCoverage
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 

Security testing of YUI powered applications

Editor's Notes

  1. http://www.youtube.com/watch?v=RqC3oY-Fofo 37’57 - Dav Glass on YUIConf 2011 at 37’57 “Testing – saves our ass”
  2. Why Security Testing
  3. What is Pentesting? Make sure
  4. Add a separate slide for each of them? Depending on time. Add a demo for couple of them
  5. Code on https://github.com/dmitris/yuiconftalk2012
  6. TODO app
  7. Write tests to validate the assumptions
  8. Static = find issue without running the codeAbstract Syntax Tree and Call Flow Graphhttp://www.flickr.com/photos/la_sombra/6036168427/
  9. [put javascript good parts book image ]
  10. [ add limitations ] [ script in html ] [ relationship of different scripts. Single file only]
  11. MESSAGE1: What I am expecting to find?MESSAGE 2: How many of them are False Positives? False positives is intolerable in testing
  12. http://www.flickr.com/photos/sethmazow/2088372704/
  13. http://www.flickr.com/photos/djackmanson/489401961/Reviewer to complain? Or someone hurt ?
  14. Consider adding it into your test script today and enforce it
  15. http://www.flickr.com/photos/katjung/1199062421/
  16. Why these are bad
  17. Why these are bad
  18. Lastly, we could talk about some interesting findings on use strictAmazon has a JS flattening code which accidentally included use strict in the middle of it (since one file has it) and it breaks another scriptMozilla has a MDN page that provides very comprehensive details on use strict. However, the JS on that page is not having strict mode enabled.
  19. When you set to do at least some security-related tests, you have to consider more carefully edge cases, unintended usage of the application (interface, function etc.), assumptions made about the types of usage and input, whether protections are made, how they are implemented, and whether the implementation of those protection measures / controls is done in a way that allows to understand and verify in sufficient isolation.