SlideShare a Scribd company logo
Advanced Ajax Security Billy Hoffman ( [email_address] ) Manager, HP Security Labs
Who am I? Manager HP Security Labs In security space for 6 years CS Degree from Georgia Tech Areas of focus Crawling and sampling JavaScript static analysis XSS Frequent presenter at hacker/security conferences
Presentation Overview Manipulating Client-side logic Defeating logic protection techniques Function Hijacking JSON Hijacking Hacking Google Gears June 2, 2009
“ Boring” Ajax Security Increased attack surface Direct API access Easier to reverse engineer Amplifying web attacks Offline attacks “ Surely no one actually does this right?” June 2, 2009
Sample Ajax travel website  Built using “expert” advice Popular books Articles/How-tos Forums Riddled with security defects Sexy Ajax Security June 2, 2009
API Domino Effect June 2, 2009 holdSeat(flightID) makeOffer(price, flightID) debitAccount(price) bookSeat(flightID)
Overly Granular Application API June 2, 2009 Insecure More secure
Polling Status Call June 2, 2009
Real-world Example  June 2, 2009
Web 1.0 to Web 2.0 Conversion June 2, 2009
Premature Ajax-ulation! June 2, 2009
Exposed Administrative API June 2, 2009 Malicious use Intended use
Defeating Logic Protection Obfuscation Lazy Loading June 2, 2009
All Your Obfuscation Are Belong To Us!
How to debug code if you don’t have it all? Firebug cannot debug dynamic code JSON responses Remote scripting Lazy loading “ View Source” vs “View Generated Source” Need a way to monitor JavaScript environment On-Demand JavaScript
Understanding JavaScript Variable Scope Everything is a object Primitives (Strings, numbers, regexp) Functions All global variables and functions are properties of global object Provided by environment Web browser =  window Can we enumerate?
Example Code function BogusFunction1() { //empty function } function BogusFunction2() { //empty function } var ret = ""; for(var i in window) { if(typeof(window[i]) == "function") { ret += i + "\n"; } } alert(ret);
Enumerating All Functions
HOOK: JavaScript Monitoring Framework Enumerates the environment and traps on-demand code. Side-steps obfuscation Reads from the environment itself Demo
Take Aways: Client-side Code Client-side code is just a suggestion! Client-side code cannot be protected, encrypted, or obfuscated Store  all  secrets on the server Enforce control flow on the server Always match allocations with frees in the same method Use Server-side locking to prevent race condition vulnerabilities June 2, 2009
JavaScript Function Clobbering Highly dynamics language Typeless, dynamic execution paths Can redefine itself at runtime June 2, 2009
JavaScript Namespaces Namespaces prevent collisions Solution: Make functions properties of objects var com.SomeSite.common = {}; com.SomeSite.common.debug = function () { … }; com.SomeSite.common.debug(); var com.SexyWidgets = {}; com.SexyWidgets.debug = function() {…}; com.SexyWidgets.debug();
JavaScript Namespaces
Intentional Function Clobbering Attacker deliberately clobbers functions What kind of functions can you clobber? User defined functions? System functions? Demo
Clobbering System Functions:  alert()
Prototype’s  Ajax.Request()
Can clobber anything Automatic Man In The Middle Other things Dojo.Storage Callback functions Encryption functions?  Limitless Clobbering Possibilities
The Myth of the Same Origin Policy Myth: Same Origin Restricts prevent JavaScript from seeing 3 rd  party content Fact: Kind of prevents Remote Scripting Image and Iframe events (JavaScript port scanning) 3 rd  party plug-in communications
JSON Hijacking JSON is a valid subset of JavaScript eval()  can be used to “see” the response Could use remoting scripting to read JSON web services? June 2, 2009
JSON Hijacking <script type=&quot;text/javascript&quot;> [[&quot;AJAXWorld&quot;, &quot;2007-04-15&quot;, &quot;2007-04-19&quot;, [&quot;ATL&quot;, &quot;JFK&quot;, &quot;ATL&quot;], 95120657, true], [&quot;Honeymoon&quot;, &quot;2007-04-30&quot;, &quot;2007-05-13&quot;, [&quot;ATL&quot;, &quot;VAN&quot;, &quot;SEA&quot;, &quot;ATL&quot;],  19200435, false], [&quot;MS Trip&quot;, &quot;2007-07-01&quot;, &quot;2007-07-04&quot;, [&quot;ATL&quot;, &quot;SEA&quot;, &quot;ATL&quot;],  74905862, true], [&quot;Black Hat USA&quot;, &quot;2007-07-29&quot; &quot;2007-08-03&quot;, [&quot;ATL&quot;, &quot;LAS&quot;, &quot;ATL&quot;],  90398623, true]]; </script>
JSON Hijacking How does JS interpreter handle literals? [9,4,3,1,33,7,2].sort(); Creates temporary Array object Executed  sort()  function Never assigned to variable Garbage collected away
JSON Hijacking How does JS interpreter handle literals? [9,4,3,1,33,7,2].sort(); Creates temporary Array object Invokes  Array()  constructor function Executed  sort()  function Never assigned to variable Garbage collected away
JSON Hijacking Clobber the  Array()  function with malicious version Use  <SCRIPT SRC>  to point to JSON web service Malicious  Array()  function harvests the data that comes back! function Array() { var foo = this; var bar = function() { var ret = &quot;Captured array items are: [&quot;; for(var x in foo) { ret += foo[x] + &quot;, &quot;; } ret += &quot;]&quot;; //notify an attacker here }; setTimeout(bar, 100); }
JSON Hijacking Example
JSON Hijacking Example
JSON Hijacking Defense XMLHttpRequest can see the response and perform operations on it before  eval() ing <SCRIPT SRC> cannot! Make the JSON response non-valid JavaScript XHR removes it! <SCRIPT SRC> fails!
Bad Approach #1 <script type=&quot;text/javascript&quot;> I'/\/\ a bl0ck of inva1id $ynT4x! WHOO! [[&quot;AJAXWorld&quot;, &quot;2007-04-15&quot;, &quot;2007-04-19&quot;, [&quot;ATL&quot;, &quot;JFK&quot;, &quot;ATL&quot;],  95120657, true], [&quot;Honeymoon&quot;, &quot;2007-04-30&quot;, &quot;2007-05-13&quot;, [&quot;ATL&quot;, &quot;VAN&quot;, &quot;SEA&quot;, &quot;ATL&quot;],  19200435, false], [&quot;MS Trip&quot;, &quot;2007-07-01&quot;, &quot;2007-07-04&quot;, [&quot;ATL&quot;, &quot;SEA&quot;, &quot;ATL&quot;],  74905862, true], [&quot;Black Hat USA&quot;, &quot;2007-07-29&quot; &quot;2007-08-03&quot;, [&quot;ATL&quot;, &quot;LAS&quot;, &quot;ATL&quot;],  90398623, true]]; </script>
<script type=&quot;text/javascript&quot;> /* [&quot;Eve&quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot;Nidhi&quot;]  */ </script> Bad Approch #2
Bad Approach #2 <script type=&quot;text/javascript&quot;> /* [&quot; Eve*/[&quot;bogus &quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot; bogus&quot;]/*Nidhi &quot;]  */ </script> <script type=&quot;text/javascript&quot;> /* [&quot;Eve*/ [&quot;bogus&quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot;bogus&quot;] /*Nidhi&quot;]  */ </script>
Correct Approach <script type=&quot;text/javascript&quot;> for(;;); [&quot;Eve&quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot;Nidhi&quot;]  </script>
Correct Approach function defangJSON(json) { if(json.substring(0,8) == &quot;for(;;);&quot;) { json = json.substring(8); } Return json; } var safeJSONString = defangJSON(xhr.responseText); var jsonObject = safeJSONString.parseJSON();
Securing Ajax Applications Perform authentication/authorization checks on  both  web pages  and  web services Group code libraries by function Validate  all  input for your application HTTP headers, cookies, query string, POST data Verify data type, length and format Always use parameterized queries Always encoded output appropriately June 2, 2009
Salvation Is Here! Ajax Security Addison-Wesley &quot; Ajax Security  is a remarkably rigorous and thorough examination of an underexplored subject.  Every Ajax engineer needs to have the knowledge contained in this book  - or be able to explain why they don't.” -Jesse James Garret In stores now! June 2, 2009
Advanced Ajax Security Billy Hoffman ( [email_address] ) Manager, HP Security Labs

More Related Content

PDF
Abusing Windows Opener To Bypass CSRF Protection
PPTX
OWASP Pune Chapter : Dive Into The Profound Web Attacks
KEY
Application Security for Rich Internet Applicationss (Jfokus 2012)
KEY
Application Security for RIAs
PDF
Rails and security
PPSX
Web Security
PPT
Google在Web前端方面的经验
PPT
Sxsw 20090314
Abusing Windows Opener To Bypass CSRF Protection
OWASP Pune Chapter : Dive Into The Profound Web Attacks
Application Security for Rich Internet Applicationss (Jfokus 2012)
Application Security for RIAs
Rails and security
Web Security
Google在Web前端方面的经验
Sxsw 20090314

What's hot (9)

PPTX
Client sidesec 2013 - non js
PPTX
Client sidesec 2013 - script injection
PPTX
Designing and developing mobile web applications with Mockup, Sencha Touch an...
PPTX
Client sidesec 2013-intro
ODP
2009 Barcamp Nashville Web Security 101
PPT
Even Faster Web Sites at The Ajax Experience
PPTX
Preparing a WordPress Plugin for Translation
PPTX
Mitigating CSRF with two lines of codes
PDF
Intro to Php Security
Client sidesec 2013 - non js
Client sidesec 2013 - script injection
Designing and developing mobile web applications with Mockup, Sencha Touch an...
Client sidesec 2013-intro
2009 Barcamp Nashville Web Security 101
Even Faster Web Sites at The Ajax Experience
Preparing a WordPress Plugin for Translation
Mitigating CSRF with two lines of codes
Intro to Php Security
Ad

Similar to Advanced Ajax Security (20)

PDF
Secure java script-for-developers
PPT
Renaud Bido & Mohammad Shams - Hijacking web servers & clients
PPT
PPT
&lt;img src="xss.com">
PPT
Pascarello_Investigating JavaScript and Ajax Security
PDF
ClubHack Magazine issue April 2012
PPT
4.Xss
PPT
(In)Secure Ajax-Y Websites With PHP
 
PPTX
Client-side JavaScript Vulnerabilities
PDF
JavaScript From Hell - CONFidence 2.0 2009
PPT
Web 2.0 Application Kung-Fu - Securing Ajax & Web Services
PDF
www.webre24h.com - Ajax security
PDF
One shot eight banks
PPTX
Cross Site Scripting ( XSS)
PPTX
Javascript Security
PPT
jQuery introduction
PPT
Xss is more than a simple threat
PPT
Xss is more than a simple threat
Secure java script-for-developers
Renaud Bido & Mohammad Shams - Hijacking web servers & clients
&lt;img src="xss.com">
Pascarello_Investigating JavaScript and Ajax Security
ClubHack Magazine issue April 2012
4.Xss
(In)Secure Ajax-Y Websites With PHP
 
Client-side JavaScript Vulnerabilities
JavaScript From Hell - CONFidence 2.0 2009
Web 2.0 Application Kung-Fu - Securing Ajax & Web Services
www.webre24h.com - Ajax security
One shot eight banks
Cross Site Scripting ( XSS)
Javascript Security
jQuery introduction
Xss is more than a simple threat
Xss is more than a simple threat
Ad

More from amiable_indian (20)

PDF
Phishing As Tragedy of the Commons
PDF
Cisco IOS Attack & Defense - The State of the Art
PDF
Secrets of Top Pentesters
PPS
Workshop on Wireless Security
PDF
Insecure Implementation of Security Best Practices: of hashing, CAPTCHA's and...
PPS
Workshop on BackTrack live CD
PPS
Reverse Engineering for exploit writers
PPS
State of Cyber Law in India
PPS
AntiSpam - Understanding the good, the bad and the ugly
PPS
Reverse Engineering v/s Secure Coding
PPS
Network Vulnerability Assessments: Lessons Learned
PPS
Economic offenses through Credit Card Frauds Dissected
PPS
Immune IT: Moving from Security to Immunity
PPS
Reverse Engineering for exploit writers
PPS
Hacking Client Side Insecurities
PDF
Web Exploit Finder Presentation
PPT
Network Security Data Visualization
PPT
Enhancing Computer Security via End-to-End Communication Visualization
PDF
Top Network Vulnerabilities Over Time
PDF
What are the Business Security Metrics?
Phishing As Tragedy of the Commons
Cisco IOS Attack & Defense - The State of the Art
Secrets of Top Pentesters
Workshop on Wireless Security
Insecure Implementation of Security Best Practices: of hashing, CAPTCHA's and...
Workshop on BackTrack live CD
Reverse Engineering for exploit writers
State of Cyber Law in India
AntiSpam - Understanding the good, the bad and the ugly
Reverse Engineering v/s Secure Coding
Network Vulnerability Assessments: Lessons Learned
Economic offenses through Credit Card Frauds Dissected
Immune IT: Moving from Security to Immunity
Reverse Engineering for exploit writers
Hacking Client Side Insecurities
Web Exploit Finder Presentation
Network Security Data Visualization
Enhancing Computer Security via End-to-End Communication Visualization
Top Network Vulnerabilities Over Time
What are the Business Security Metrics?

Recently uploaded (20)

PPTX
Spectroscopy.pptx food analysis technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Cloud computing and distributed systems.
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Electronic commerce courselecture one. Pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
KodekX | Application Modernization Development
PDF
Encapsulation theory and applications.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Spectral efficient network and resource selection model in 5G networks
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Approach and Philosophy of On baking technology
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Spectroscopy.pptx food analysis technology
Advanced methodologies resolving dimensionality complications for autism neur...
Cloud computing and distributed systems.
20250228 LYD VKU AI Blended-Learning.pptx
Electronic commerce courselecture one. Pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
KodekX | Application Modernization Development
Encapsulation theory and applications.pdf
Empathic Computing: Creating Shared Understanding
MIND Revenue Release Quarter 2 2025 Press Release
Spectral efficient network and resource selection model in 5G networks
“AI and Expert System Decision Support & Business Intelligence Systems”
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
cuic standard and advanced reporting.pdf
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Approach and Philosophy of On baking technology
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...

Advanced Ajax Security

  • 1. Advanced Ajax Security Billy Hoffman ( [email_address] ) Manager, HP Security Labs
  • 2. Who am I? Manager HP Security Labs In security space for 6 years CS Degree from Georgia Tech Areas of focus Crawling and sampling JavaScript static analysis XSS Frequent presenter at hacker/security conferences
  • 3. Presentation Overview Manipulating Client-side logic Defeating logic protection techniques Function Hijacking JSON Hijacking Hacking Google Gears June 2, 2009
  • 4. “ Boring” Ajax Security Increased attack surface Direct API access Easier to reverse engineer Amplifying web attacks Offline attacks “ Surely no one actually does this right?” June 2, 2009
  • 5. Sample Ajax travel website Built using “expert” advice Popular books Articles/How-tos Forums Riddled with security defects Sexy Ajax Security June 2, 2009
  • 6. API Domino Effect June 2, 2009 holdSeat(flightID) makeOffer(price, flightID) debitAccount(price) bookSeat(flightID)
  • 7. Overly Granular Application API June 2, 2009 Insecure More secure
  • 8. Polling Status Call June 2, 2009
  • 9. Real-world Example June 2, 2009
  • 10. Web 1.0 to Web 2.0 Conversion June 2, 2009
  • 12. Exposed Administrative API June 2, 2009 Malicious use Intended use
  • 13. Defeating Logic Protection Obfuscation Lazy Loading June 2, 2009
  • 14. All Your Obfuscation Are Belong To Us!
  • 15. How to debug code if you don’t have it all? Firebug cannot debug dynamic code JSON responses Remote scripting Lazy loading “ View Source” vs “View Generated Source” Need a way to monitor JavaScript environment On-Demand JavaScript
  • 16. Understanding JavaScript Variable Scope Everything is a object Primitives (Strings, numbers, regexp) Functions All global variables and functions are properties of global object Provided by environment Web browser = window Can we enumerate?
  • 17. Example Code function BogusFunction1() { //empty function } function BogusFunction2() { //empty function } var ret = &quot;&quot;; for(var i in window) { if(typeof(window[i]) == &quot;function&quot;) { ret += i + &quot;\n&quot;; } } alert(ret);
  • 19. HOOK: JavaScript Monitoring Framework Enumerates the environment and traps on-demand code. Side-steps obfuscation Reads from the environment itself Demo
  • 20. Take Aways: Client-side Code Client-side code is just a suggestion! Client-side code cannot be protected, encrypted, or obfuscated Store all secrets on the server Enforce control flow on the server Always match allocations with frees in the same method Use Server-side locking to prevent race condition vulnerabilities June 2, 2009
  • 21. JavaScript Function Clobbering Highly dynamics language Typeless, dynamic execution paths Can redefine itself at runtime June 2, 2009
  • 22. JavaScript Namespaces Namespaces prevent collisions Solution: Make functions properties of objects var com.SomeSite.common = {}; com.SomeSite.common.debug = function () { … }; com.SomeSite.common.debug(); var com.SexyWidgets = {}; com.SexyWidgets.debug = function() {…}; com.SexyWidgets.debug();
  • 24. Intentional Function Clobbering Attacker deliberately clobbers functions What kind of functions can you clobber? User defined functions? System functions? Demo
  • 27. Can clobber anything Automatic Man In The Middle Other things Dojo.Storage Callback functions Encryption functions? Limitless Clobbering Possibilities
  • 28. The Myth of the Same Origin Policy Myth: Same Origin Restricts prevent JavaScript from seeing 3 rd party content Fact: Kind of prevents Remote Scripting Image and Iframe events (JavaScript port scanning) 3 rd party plug-in communications
  • 29. JSON Hijacking JSON is a valid subset of JavaScript eval() can be used to “see” the response Could use remoting scripting to read JSON web services? June 2, 2009
  • 30. JSON Hijacking <script type=&quot;text/javascript&quot;> [[&quot;AJAXWorld&quot;, &quot;2007-04-15&quot;, &quot;2007-04-19&quot;, [&quot;ATL&quot;, &quot;JFK&quot;, &quot;ATL&quot;], 95120657, true], [&quot;Honeymoon&quot;, &quot;2007-04-30&quot;, &quot;2007-05-13&quot;, [&quot;ATL&quot;, &quot;VAN&quot;, &quot;SEA&quot;, &quot;ATL&quot;], 19200435, false], [&quot;MS Trip&quot;, &quot;2007-07-01&quot;, &quot;2007-07-04&quot;, [&quot;ATL&quot;, &quot;SEA&quot;, &quot;ATL&quot;], 74905862, true], [&quot;Black Hat USA&quot;, &quot;2007-07-29&quot; &quot;2007-08-03&quot;, [&quot;ATL&quot;, &quot;LAS&quot;, &quot;ATL&quot;], 90398623, true]]; </script>
  • 31. JSON Hijacking How does JS interpreter handle literals? [9,4,3,1,33,7,2].sort(); Creates temporary Array object Executed sort() function Never assigned to variable Garbage collected away
  • 32. JSON Hijacking How does JS interpreter handle literals? [9,4,3,1,33,7,2].sort(); Creates temporary Array object Invokes Array() constructor function Executed sort() function Never assigned to variable Garbage collected away
  • 33. JSON Hijacking Clobber the Array() function with malicious version Use <SCRIPT SRC> to point to JSON web service Malicious Array() function harvests the data that comes back! function Array() { var foo = this; var bar = function() { var ret = &quot;Captured array items are: [&quot;; for(var x in foo) { ret += foo[x] + &quot;, &quot;; } ret += &quot;]&quot;; //notify an attacker here }; setTimeout(bar, 100); }
  • 36. JSON Hijacking Defense XMLHttpRequest can see the response and perform operations on it before eval() ing <SCRIPT SRC> cannot! Make the JSON response non-valid JavaScript XHR removes it! <SCRIPT SRC> fails!
  • 37. Bad Approach #1 <script type=&quot;text/javascript&quot;> I'/\/\ a bl0ck of inva1id $ynT4x! WHOO! [[&quot;AJAXWorld&quot;, &quot;2007-04-15&quot;, &quot;2007-04-19&quot;, [&quot;ATL&quot;, &quot;JFK&quot;, &quot;ATL&quot;], 95120657, true], [&quot;Honeymoon&quot;, &quot;2007-04-30&quot;, &quot;2007-05-13&quot;, [&quot;ATL&quot;, &quot;VAN&quot;, &quot;SEA&quot;, &quot;ATL&quot;], 19200435, false], [&quot;MS Trip&quot;, &quot;2007-07-01&quot;, &quot;2007-07-04&quot;, [&quot;ATL&quot;, &quot;SEA&quot;, &quot;ATL&quot;], 74905862, true], [&quot;Black Hat USA&quot;, &quot;2007-07-29&quot; &quot;2007-08-03&quot;, [&quot;ATL&quot;, &quot;LAS&quot;, &quot;ATL&quot;], 90398623, true]]; </script>
  • 38. <script type=&quot;text/javascript&quot;> /* [&quot;Eve&quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot;Nidhi&quot;] */ </script> Bad Approch #2
  • 39. Bad Approach #2 <script type=&quot;text/javascript&quot;> /* [&quot; Eve*/[&quot;bogus &quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot; bogus&quot;]/*Nidhi &quot;] */ </script> <script type=&quot;text/javascript&quot;> /* [&quot;Eve*/ [&quot;bogus&quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot;bogus&quot;] /*Nidhi&quot;] */ </script>
  • 40. Correct Approach <script type=&quot;text/javascript&quot;> for(;;); [&quot;Eve&quot;, &quot;Jill&quot;, &quot;Mary&quot;, &quot;Jen&quot;, &quot;Ashley&quot;, &quot;Nidhi&quot;] </script>
  • 41. Correct Approach function defangJSON(json) { if(json.substring(0,8) == &quot;for(;;);&quot;) { json = json.substring(8); } Return json; } var safeJSONString = defangJSON(xhr.responseText); var jsonObject = safeJSONString.parseJSON();
  • 42. Securing Ajax Applications Perform authentication/authorization checks on both web pages and web services Group code libraries by function Validate all input for your application HTTP headers, cookies, query string, POST data Verify data type, length and format Always use parameterized queries Always encoded output appropriately June 2, 2009
  • 43. Salvation Is Here! Ajax Security Addison-Wesley &quot; Ajax Security is a remarkably rigorous and thorough examination of an underexplored subject. Every Ajax engineer needs to have the knowledge contained in this book - or be able to explain why they don't.” -Jesse James Garret In stores now! June 2, 2009
  • 44. Advanced Ajax Security Billy Hoffman ( [email_address] ) Manager, HP Security Labs