2013-06-25 - HTML5 & JavaScript Security

  • View
    530

  • Download
    1

Embed Size (px)

DESCRIPTION

Sie kennen die bekannten Angriffsvektoren wie SQL-Injections oder XSS. Ihre Anwendung ist sicher. Ist Sie das wirklich? Auch wenn Sie in Ihrer Webanwendung kein HTML5 einsetzen, die Browser sind bereit! Kennen Sie alle neuen Markups? Haben Sie bereits die Potentiale von Cross Origin Requests, WebSockets oder Local Storage auf dem Radar? Lernen Sie neue Gefahrenpotentiale kennen, die durch die Unterstützung von HTML5 und dessen APIs entstanden sind. - See more at: http://www.developer-week.de/Programm/Veranstaltung/(event)/11133#sthash.ZRPweawl.dpuf

Text of 2013-06-25 - HTML5 & JavaScript Security

  • 1. Securitybit.ly/HTML5SecInteraktive Version der Prsentation!Created by Johannes Hoppe

2. JohannesHoppe.debit.ly/HTML5SecInteraktive Version der Prsentation! 3. ZielAngriffsvektoren aufzeigen.Strategien besprechen.Mehr nicht! 4. FeaturesNeue Angriffsvektoren 5. Ein FormularUsername:Password:LoginUsername: Password: 6. FormactionUsername:Password:LoginKlick mich!Username: Password: Klick mich! 7. SVGPresto, WebKit, Gecko und sogar Trident 9 8. SVGkann JavaScript enthalten!TestTesttext{font-size:6pt;}alert(document.cookie);document.getElementById(display).textContent=document.cookie; 9. Business as usualHTML5 es ist auch nicht schlimmer als HTML 4 http://html5sec.org 10. XSSEingeschleuster JavaScript-Code 11. Oldies but Goldiesindex.html?message=Daten gespeichertindex.html?message= 12. Eval everywhereEval is evil DemoX1 2 3 13. OWASPOpen Web Application Security ProjectXSS Filter Evasion Cheat Sheet Old IE Demo 14. XSS Vorbeugen 15. 1.Hier sollten dynamischeDaten niemals verwendet werden

HIERHIER 16. 2.HTML escapedynamic data& &< >" " ' / '

HTML ESCAPE

17. Testen?function htmlEncode(input) {// jquery.text == document.createTextNodereturn ($(

).text(input).html());}var saveFormat = function () {var args = Array.prototype.slice.call(arguments);var txt = args.shift();$.each(args, function (i, item) {item = htmlEncode(item);txt = txt.replace("{" + i + "}", item);});return txt;}; 18. Testen!describe("saveFormat", function () {var original = {0} - {1} - {2};it("should replace placeholders", function () {var expected = A - B - C;var formated = saveFormat(original, A, B, C);expect(formated).toEqual(expected);});it("should encode injected content", function () {var expected = A - TEST - C;var formated = saveFormat(original, A, TEST, C);expect(formated).toEqual(expected);});}); 19. Testfinished in 0.004sNo try/catchJasmine 1.3.1 revision 1354556913Passing2specssaveFormatshould replace placeholdersshould encode injected content Demo 20. Moment...describe("saveFormat", function () {var original = Test;it("should replace quotes", function () {var expected = Test;var formated = saveFormat(original, ");expect(formated).toEqual(expected);});}); 21. Richtig testen!finished in 0.005sxNo try/catchJasmine 1.3.1 revision 1354556913Failing1spec1spec|1 failingsaveFormat should replace quotes.Expected Test to equal Test.Error: Expected Test to equal Test.at new jasmine.ExpectationResult (http://johanneshoppe.github.io/HTML5Securityat null.toEqual (http://johanneshoppe.github.io/HTML5Security/examples/jasmineat null. (http://johanneshoppe.github.io/HTML5Security/examples/jasat jasmine.Block.execute (http://johanneshoppe.github.io/HTML5Security/exampleat jasmine.Queue.next_ (http://johanneshoppe.github.io/HTML5Security/examples/ Demo 22. 3.Attribute escapedynamic dataa-z A-Z 0-9 immun, . - _ immunRest HH;

23. 4. DO NOTJavaScript escapedynamic dataHTML parser runs before the JavaScript parser!you are doing it wrong 24. Das hier ist AlltagUserList.cshtml / Kendo UI Template# if(ID != 0) { ## } else { ##= htmlEncode(Alias) ## } # 25. ?Offensichtlich luft beim Umgangmit Daten etwas prinzipiell falsch! 26. Storage 27. Egalob Cookiesob Session Storageob Local Storageob WebSQLdie Daten sind nicht vertrauenswrdig! 28. Resident XSSrichtig fies! 29. Vertraulichen Informationengehren in die SERVER-Session! 30. Session Storage bevorzugen! 31. WebSQLSQL Injection:Prepared Statement:executeSql("SELECT foo FROM bar WHERE value=" + value);executeSql("SELECT foo FROM bar WHERE value=?", [value]); 32. Kommunikation 33. Mashups!define([jquery, knockout,knockout.mapping, domReady!], function ($, ko, mapping) {var url =http://search.twitter.com/search.json?q=%23xss&callback=?;$.getJSON(url).done(function (data) {var viewModel = mapping.fromJS(data);ko.applyBindings(viewModel, $(#tweets).get(0));});}); 34. Loading... 35. JSONJSON with Padding{"hello": "world"}var foo = function(json) {$(#output).text(JSON.stringify(json, undefined, 2));};foo({"hello": "world"}); Demo 36. JSONP 37. SOPSame origin policy Not macht erfinderisch (JSONP)CORSCross-Origin Resource Sharing Access-Control-Allow-Origin: *WebSocketsdo what you want 38. JS-ReconShell of the Future 39. Intranet == Internet 40. Danke!blog.johanneshoppe.de 41. Sicherheit von Web-Anwendungen