Securing Web 2.0 Applications Through Replicated Execution: The Ripley Approach
This paper explores the security of Web 2.0 applications through a method called replicated execution, highlighting the importance of not trusting client-side code to ensure data and code integrity. The authors discuss the challenges between security and performance, specifically addressing how the Ripley architecture allows for client-side computation without sacrificing computational integrity. Techniques such as capturing user events and comparing results between the server and client are examined, alongside practical applications such as shopping carts, games, and online quizzes.
Securing Web 2.0 Applications Through Replicated Execution: The Ripley Approach
E N D
Presentation Transcript
Automatically securing web 2.0 applications through replicated execution K. Vikram, Abhishek Prateek, Ben Livshits
Web Developer’s Mantra Thou shall not trust the client No data integrity No code integrity
Security vs. Performance With Ripley, placing computation on the client does not reduce computational integrity • Web 1.0: • ASP.NET • PHP security Ripley • Web 2.0: • AJAX • Silverlight responsiveness
The Volta Distributing Compiler .NET DLL Server IL-to-IL Client IL-to-JS JS http://volta/
Volta Deployment Client Server Server Client
Ripley Architecture m' • Keep a replica of the client code • Capture user events & transmit to server for replay • Compare server and client results Server Ripley checker m Replica Client e events = {key: ‘a’, id=‘name’; click: id=‘name’}
Ripley Architecture m' • Keep a replica of the client code • Capture user events & transmit to server for replay • Compare server and client results Server Ripley checker • Client-side code instrumented • Rewrite event handlers • Capture “default” events • Buffer events for performance m Replica Client e button.onClick= functionbuttonHandler(e) { varobj = eventTrigger(e); varnotify = document.getElementById&& document.getElementById('notify'); notify.value = 'You clicked on '+ obj.value; return true; }; button.onClick= functionbuttonHandler(e) { ripleyEnqueue(e); // inserted by rewriting varobj = eventTrigger(e); varnotify = document.getElementById&& document.getElementById('notify'); notify.value= 'You clicked on '+ obj.value; return true; }; events = {key: ‘a’, id=‘name’; click: id=‘name’}
Ripley Architecture m' • Keep a replica of the client code • Capture user events & transmit to server for replay • Compare server and client results Server Ripley checker • Run replica in a Ripley emulator • Run in .NET, not in JavaScript, 100x speed increase m Replica Client e events = {key: ‘a’, id=‘name’; click: id=‘name’}
Ripley Applications • Shopping cart • Sudoku • Blog • Speed typing • Online Quiz • Distributed online game http://ll-ripley/ripley-samples
Ripley: Vision for the Future • Secure-by-construction Software + Services Web 2.0 App Ripley server farm