Mein Vortrag auf der EnterJS 2015 über Sicherheit in Node.js Applikationen. Es werden verschiedene Angriffsvektoren vorgestellt und wie man ihnen begegnen kann.
Vortrag zum Thema "Ladezeiten Verbessern - CSS und JavaScript Komprimierung". Entwickelt wurde die Präsentation für die Vortragsreihe im Rahmen der WebDevFulda-Treffen.
MongoDB ist eine leistungsstarke NoSQL Datenbank. Dennoch ist die Security per Standard deaktiviert. Dass dies große Auswirkungen hat, zeigen regelmäßige Berichte, dass zahlreiche Firmen Opfer von Hacker-Attacken geworden sind. Sie steigen mit den Grundlagen von MongoDB´s Security ein und werden dann mit den wichtigsten Vorgehensweisen vertraut gemacht. Mit diesen Infos sind Sie gewappnet gegen üble Cyber-Angriffe.
Was macht Clean Code aus? Wie kann man seinen Code verbessern? Welche Regeln helfen einem Programmierer, um zu sauberen Code zu gelangen? Welche Tipps und Tricks gibt es, mit denen man sich noch verbessern kann? Gibt es Patterns bzw. Muster, die zum Erfolg führen? Oder ist Clean Code nur Zeitverschwendung in Projekten unter Zeitdruck?
Wer das legendäre Buch 'Clean Code' noch nicht gelesen hat, oder eine Auffrischung gebrauchen kann, ist zu diesem Live-Stream gerne willkommen. Um es praxisnah zu halten, werden viele Code-Schnipsel gezeigt, die wir zusammen analysieren und verbessern.
Clean Code - A Handbook of Agile Software Craftsmanship: Englische Ausgabe
https://amzn.to/3pXpCOS
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe
https://amzn.to/3cNO55B
Diese Videobeschreibung enthält Amazon Affiliate Links, mit denen ihr mich beim Kauf unterstützen könnt, ich erhalte eine kleine Provision während ihr nichts extra zahlt für euren Amazon-Einkauf!
Vortrag zum Thema "Ladezeiten Verbessern - CSS und JavaScript Komprimierung". Entwickelt wurde die Präsentation für die Vortragsreihe im Rahmen der WebDevFulda-Treffen.
MongoDB ist eine leistungsstarke NoSQL Datenbank. Dennoch ist die Security per Standard deaktiviert. Dass dies große Auswirkungen hat, zeigen regelmäßige Berichte, dass zahlreiche Firmen Opfer von Hacker-Attacken geworden sind. Sie steigen mit den Grundlagen von MongoDB´s Security ein und werden dann mit den wichtigsten Vorgehensweisen vertraut gemacht. Mit diesen Infos sind Sie gewappnet gegen üble Cyber-Angriffe.
Was macht Clean Code aus? Wie kann man seinen Code verbessern? Welche Regeln helfen einem Programmierer, um zu sauberen Code zu gelangen? Welche Tipps und Tricks gibt es, mit denen man sich noch verbessern kann? Gibt es Patterns bzw. Muster, die zum Erfolg führen? Oder ist Clean Code nur Zeitverschwendung in Projekten unter Zeitdruck?
Wer das legendäre Buch 'Clean Code' noch nicht gelesen hat, oder eine Auffrischung gebrauchen kann, ist zu diesem Live-Stream gerne willkommen. Um es praxisnah zu halten, werden viele Code-Schnipsel gezeigt, die wir zusammen analysieren und verbessern.
Clean Code - A Handbook of Agile Software Craftsmanship: Englische Ausgabe
https://amzn.to/3pXpCOS
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe
https://amzn.to/3cNO55B
Diese Videobeschreibung enthält Amazon Affiliate Links, mit denen ihr mich beim Kauf unterstützen könnt, ich erhalte eine kleine Provision während ihr nichts extra zahlt für euren Amazon-Einkauf!
Talk zum Thema Nebenläufigkeit auf der OOP 2016 in München. Neben einer prinzipiellen Einführung und Motivation werden die Sprachen Erlang/OTP, Google Go und Pony vorgestellt. Weiter sind einige typische Designmuster sowie Fallstricke enthalten. Der Vortrag hatte die Dauer von 90 Minuten.
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
Dieser Workshop ist in erster Linie für Konferenzteilnehmer gedacht, die sich für Plugin-Programmierung interessieren.
Der Workshop zeigt auf, welche überwachenswerten Daten und Parameter es auf einem NetApp-Filer gibt und wie die Zugänge zu diesen Daten (Telnet, HTTP, SNMP, SSH, XML/Webservices, Data ONTAP APIs) sind. Ingo Lantschner wird eine theoretische Einführung und Demonstration an Hand des NetApp-Simulators präsentieren und mit den Teilnehmern ein Demo-Plugin auf Basis der o.g. Erkenntnisse entwickeln, anschließend erfolgt der Upload des Plugins auf Nagios-Exchange.
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...digitalSTROM.org
dSS-Entwickler Patrick Stählin ging auf das Konzept zur Einbindung externer Komponenten ein, das beliebig auf jegliche Hard- und Software mit programmierbaren Schnittstellen anwendbar ist. Die Einbindung erfolgt jeweils über die JSON oder SOAP-Programmierschnittstelle des dSS, die es erlauben, digitalSTROM-Komponenten zu simulieren oder mittels Software virtuelle Geräte zu implementieren. So kommunizieren diese im digitalSTROM-Netzwerk und können in Szenen integriert und mit einem digitalSTROM-Taster oder der iPhone App aufgerufen werden. Stählin führte das Konzept anhand des VLC-Mediaplayers vor, der nun zum Beispiel beim Klingeln an der Tür die Musik kurz unterbrechen kann. Der entstandene Javascript Code kann nun mit geringem Aufwand an andere Mediaplayer angepasst werden.
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
Das Jahr 2009 war die Geburtsstunde von Node.js. Dass hierbei JavaScript ebenfalls serverseitig verwendet werden kann, ist nur ein Teilaspekt für den hohen Erfolg. Viel relevanter ist die extrem hohe Performance, Skalierbarkeit und Produktivität. Nicht ohne Grund wird ASP.NET komplett neu erfunden und basiert auf den gleichen Ideen wie Node.js. Namenhafte Firmen wie Microsoft selbst, Google, PayPal, New York Times, GitHub, uvw. setzen bereits auf das leistungsstarke Node.js. Der Vortrag zeigt durch eine Reise der Node.js Architektur, woher die Vorteile kommen. Durch einen Vergleich von ähnlichen Funktionen, wird zudem der ideale Einstieg für .NET Entwickler geboten.
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
Das Dokumentieren einer API wird oft als mühsame, aber wesentliche Aufgabe angesehen. Mit OpenAPI / Swagger können wir eine API-Dokumentation angenehm einfach in ASP.NET Core integrieren. Gregor Biswanger zeigt, wie eine API-Dokumentation mit einer Benutzeroberfläche hinzugefügt wird, mit der wir die API testen können.
Als Nächstes erfahren wir, wie wir Attribute und Konventionen verwenden, um die generierte OpenAPI-Spezifikation zu verbessern. Abschließend wird gezeigt, wie wir mit der Authentifizierung, Versionierung und Anpassung der Benutzeroberfläche umgehen.
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
Kubernetes ermöglicht eine Automatisierung der Bereitstellung, Skalierung und Verwaltung von verteilten Docker-Container. Der Einstieg, die Umsetzung und Wartung hingegen ist eine extreme Herausforderung und kostet am Ende nicht nur viel Geld, sondern auch Ihre Nerven. Microsoft Azure bietet mit den Azure Kubernetes Services (Kurz AKS) die Erlösung, der soeben genannten Schmerzen. In dieser Session zeigt Ihnen der Docker- und Azure-Experte Gregor Biswanger einen Überblick von Kubernetes und wie einfach Azure für uns eine Kuberenetes-Landschaft herbeizaubern kann.
Vortrag zur Socket-Programmierung von Dual-Stack-Anwendungen in Python von der PyCon DE 2011 Leipzig.
http://de.pycon.org/2011/schedule/sessions/42/
http://blip.tv/episode/5632211
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfNETWAYS
Skalierbarkeit und Hochverfügbarkeit sind zwei Themen, bei denen Wunschvorstellung und Realität oft weit auseinanderdriften. Nagios und Icinga mitsamt einer ganzen Phalanx an Erweiterungen werden in diesem Vortrag unter die Lupe genommen. Dabei sollen mit Fokus auf genannte Themen deren Möglichkeiten, aber auch deren Grenzen aufgezeigt werden. Vorgestellt werden Szenarien mit und ohne Cluster-Software so wie auch Stolpersteine beim Einsatz selbiger. Unter die Lupe genommen werden Verursacher von Engpässen, System- und I/O-Last. Gezeigt wird dabei, welche Auswirkungen diese in großen Szenarien haben - und wie sich deren Einfluss verringern lässt.
Der Vortrag will nicht zuletzt auch einen Blick über den Tellerrand hinaus wagen, ein Denkanstoß für die weitere Entwicklung sein und auch der Frage nach der Realisierbarkeit von Umgebungen mit Millionen von Servicechecks nachgehen.
Secure Scripting SIG Security Köln Dienstag, 16. Oktober 2012
Wo hin nur mit den Passwörtern in Oracle Scripten?
Passwörter "verstecken"
Datenbank Skripte vor Manipulationen schützen
Provisionierung von Dockerhosts und -Containern mit Terraform, Ansible und LXD auf Blech und Cloud
Lästige und aufwändige manuelle Serverinstallation kann auf einfache Art durch automatisierte Provisionierung und Konfiguration der Infrastruktur ersetzt werden. Dieser Vortrag zeigt einen Ansatz, bei dem die Definition der Infrastruktur in voll maschinenlesbarer und ausführbarer Form in einem git repo anstatt in den Köpfen der (oder des) Engineers vorhanden sind.
Es wird gezeigt, wie das Verfahren sowohl auf Blech (d.h. auf lokalen physischen Maschinen) als auch in der Cloud angewendet werden kann, und somit eine grosse Übereinstimmung zwischen Test-/Integrations- und Produktionsinfrastruktur erreicht wird.
Die vorgestellten Werkzeuge sind terraform und ansible für Provisionierung und Konfigurationsmanagement, sowie lxd (nur lokal) und docker für System- und Applikationscontainer. Die vollständige Codebasis ist auf github verfügbar, so dass alle TeilnehmerInnen auch sofort mit eigenen Experimenten loslegen können.
Wieso Informatiker bei der Informationssicherheit scheiternDigicomp Academy AG
Sicherheitsprobleme verfolgen uns bereits seit vielen Jahren. Warum existieren immer noch unsichere Programme? Wieso scheitern Informatiker an der korrekten Programmierung? Warum passieren immer wieder dieselben Fehler? Der Vortrag dreht sich insbesondere um verschiedene Informationsquellen, deren Problematik und konkrete, technische Beispiele.
Referent: Tobias Ospelt
Präsentation zum Thema "Powerful mostly unknown Javascript-Features", gehalten von Entwicklern der Softwareagentur App Aware: Sascha Hameister und Aron Homberg
Django ist ein in Python programmiertes Framework, dass die schnelle Entwicklung von Web-Applikationen ermöglicht. Dabei wird Wert auf sauberen Code und die Wiederverwendbarkeit von einzelnen Komponenten gelegt.
Der Vortrag wurde beim Webmontag Leipzig im März 2010 gehalten.
Talk zum Thema Nebenläufigkeit auf der OOP 2016 in München. Neben einer prinzipiellen Einführung und Motivation werden die Sprachen Erlang/OTP, Google Go und Pony vorgestellt. Weiter sind einige typische Designmuster sowie Fallstricke enthalten. Der Vortrag hatte die Dauer von 90 Minuten.
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
Dieser Workshop ist in erster Linie für Konferenzteilnehmer gedacht, die sich für Plugin-Programmierung interessieren.
Der Workshop zeigt auf, welche überwachenswerten Daten und Parameter es auf einem NetApp-Filer gibt und wie die Zugänge zu diesen Daten (Telnet, HTTP, SNMP, SSH, XML/Webservices, Data ONTAP APIs) sind. Ingo Lantschner wird eine theoretische Einführung und Demonstration an Hand des NetApp-Simulators präsentieren und mit den Teilnehmern ein Demo-Plugin auf Basis der o.g. Erkenntnisse entwickeln, anschließend erfolgt der Upload des Plugins auf Nagios-Exchange.
digitalSTROM Developer Day 2011: digitalSTROM bindet auch externe Komponenten...digitalSTROM.org
dSS-Entwickler Patrick Stählin ging auf das Konzept zur Einbindung externer Komponenten ein, das beliebig auf jegliche Hard- und Software mit programmierbaren Schnittstellen anwendbar ist. Die Einbindung erfolgt jeweils über die JSON oder SOAP-Programmierschnittstelle des dSS, die es erlauben, digitalSTROM-Komponenten zu simulieren oder mittels Software virtuelle Geräte zu implementieren. So kommunizieren diese im digitalSTROM-Netzwerk und können in Szenen integriert und mit einem digitalSTROM-Taster oder der iPhone App aufgerufen werden. Stählin führte das Konzept anhand des VLC-Mediaplayers vor, der nun zum Beispiel beim Klingeln an der Tür die Musik kurz unterbrechen kann. Der entstandene Javascript Code kann nun mit geringem Aufwand an andere Mediaplayer angepasst werden.
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
Das Jahr 2009 war die Geburtsstunde von Node.js. Dass hierbei JavaScript ebenfalls serverseitig verwendet werden kann, ist nur ein Teilaspekt für den hohen Erfolg. Viel relevanter ist die extrem hohe Performance, Skalierbarkeit und Produktivität. Nicht ohne Grund wird ASP.NET komplett neu erfunden und basiert auf den gleichen Ideen wie Node.js. Namenhafte Firmen wie Microsoft selbst, Google, PayPal, New York Times, GitHub, uvw. setzen bereits auf das leistungsstarke Node.js. Der Vortrag zeigt durch eine Reise der Node.js Architektur, woher die Vorteile kommen. Durch einen Vergleich von ähnlichen Funktionen, wird zudem der ideale Einstieg für .NET Entwickler geboten.
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
Das Dokumentieren einer API wird oft als mühsame, aber wesentliche Aufgabe angesehen. Mit OpenAPI / Swagger können wir eine API-Dokumentation angenehm einfach in ASP.NET Core integrieren. Gregor Biswanger zeigt, wie eine API-Dokumentation mit einer Benutzeroberfläche hinzugefügt wird, mit der wir die API testen können.
Als Nächstes erfahren wir, wie wir Attribute und Konventionen verwenden, um die generierte OpenAPI-Spezifikation zu verbessern. Abschließend wird gezeigt, wie wir mit der Authentifizierung, Versionierung und Anpassung der Benutzeroberfläche umgehen.
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
Kubernetes ermöglicht eine Automatisierung der Bereitstellung, Skalierung und Verwaltung von verteilten Docker-Container. Der Einstieg, die Umsetzung und Wartung hingegen ist eine extreme Herausforderung und kostet am Ende nicht nur viel Geld, sondern auch Ihre Nerven. Microsoft Azure bietet mit den Azure Kubernetes Services (Kurz AKS) die Erlösung, der soeben genannten Schmerzen. In dieser Session zeigt Ihnen der Docker- und Azure-Experte Gregor Biswanger einen Überblick von Kubernetes und wie einfach Azure für uns eine Kuberenetes-Landschaft herbeizaubern kann.
Vortrag zur Socket-Programmierung von Dual-Stack-Anwendungen in Python von der PyCon DE 2011 Leipzig.
http://de.pycon.org/2011/schedule/sessions/42/
http://blip.tv/episode/5632211
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfNETWAYS
Skalierbarkeit und Hochverfügbarkeit sind zwei Themen, bei denen Wunschvorstellung und Realität oft weit auseinanderdriften. Nagios und Icinga mitsamt einer ganzen Phalanx an Erweiterungen werden in diesem Vortrag unter die Lupe genommen. Dabei sollen mit Fokus auf genannte Themen deren Möglichkeiten, aber auch deren Grenzen aufgezeigt werden. Vorgestellt werden Szenarien mit und ohne Cluster-Software so wie auch Stolpersteine beim Einsatz selbiger. Unter die Lupe genommen werden Verursacher von Engpässen, System- und I/O-Last. Gezeigt wird dabei, welche Auswirkungen diese in großen Szenarien haben - und wie sich deren Einfluss verringern lässt.
Der Vortrag will nicht zuletzt auch einen Blick über den Tellerrand hinaus wagen, ein Denkanstoß für die weitere Entwicklung sein und auch der Frage nach der Realisierbarkeit von Umgebungen mit Millionen von Servicechecks nachgehen.
Secure Scripting SIG Security Köln Dienstag, 16. Oktober 2012
Wo hin nur mit den Passwörtern in Oracle Scripten?
Passwörter "verstecken"
Datenbank Skripte vor Manipulationen schützen
Provisionierung von Dockerhosts und -Containern mit Terraform, Ansible und LXD auf Blech und Cloud
Lästige und aufwändige manuelle Serverinstallation kann auf einfache Art durch automatisierte Provisionierung und Konfiguration der Infrastruktur ersetzt werden. Dieser Vortrag zeigt einen Ansatz, bei dem die Definition der Infrastruktur in voll maschinenlesbarer und ausführbarer Form in einem git repo anstatt in den Köpfen der (oder des) Engineers vorhanden sind.
Es wird gezeigt, wie das Verfahren sowohl auf Blech (d.h. auf lokalen physischen Maschinen) als auch in der Cloud angewendet werden kann, und somit eine grosse Übereinstimmung zwischen Test-/Integrations- und Produktionsinfrastruktur erreicht wird.
Die vorgestellten Werkzeuge sind terraform und ansible für Provisionierung und Konfigurationsmanagement, sowie lxd (nur lokal) und docker für System- und Applikationscontainer. Die vollständige Codebasis ist auf github verfügbar, so dass alle TeilnehmerInnen auch sofort mit eigenen Experimenten loslegen können.
Wieso Informatiker bei der Informationssicherheit scheiternDigicomp Academy AG
Sicherheitsprobleme verfolgen uns bereits seit vielen Jahren. Warum existieren immer noch unsichere Programme? Wieso scheitern Informatiker an der korrekten Programmierung? Warum passieren immer wieder dieselben Fehler? Der Vortrag dreht sich insbesondere um verschiedene Informationsquellen, deren Problematik und konkrete, technische Beispiele.
Referent: Tobias Ospelt
Präsentation zum Thema "Powerful mostly unknown Javascript-Features", gehalten von Entwicklern der Softwareagentur App Aware: Sascha Hameister und Aron Homberg
Django ist ein in Python programmiertes Framework, dass die schnelle Entwicklung von Web-Applikationen ermöglicht. Dabei wird Wert auf sauberen Code und die Wiederverwendbarkeit von einzelnen Komponenten gelegt.
Der Vortrag wurde beim Webmontag Leipzig im März 2010 gehalten.
Mercurial ist ein in Python geschriebenes Revision Control System. Befehle und Funktionen sind einfach zu erlernen.
Da es unabhängig vom einem Server arbeitet kann jeder lokal und auch ohne Internetverbindung Dokumente oder Quellcode damit verwalten. Trotzdem können Mercurial Repositories untereinander Informationen austauschen und so auch über weite Entfernungen zusammen arbeiten.
Mercurial ist komplett in Python geschrieben und lässt sich so einfach erweitern.
Viele bekannte Open Source Projekte setzen Mercurial ein. So zum Beispiel Aptitude, Dovecot, Gajim, Mozilla, OpenOffice, Python, Vim oder Xen.
Mit der Kombination aus Packer, Vagrant und Salt lassen sich vollkommen automatisch Virtuelle Maschinen bauen, die zum Beispiel als Entwicklungsumgebung oder für Continuous Integration (auch in der Cloud) benutzt werden können. Dieser Vortrag führt in alle drei Open Source Werkzeuge ein und demonstriert deren Zusammenspiel.
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
Production-ready Infrastruktur in 3 WochenAndré Goliath
Es gibt sie doch noch: Projekte die man auf der grünen Wiese starten darf - incl. Infrastruktur. Nur AWS als Cloud Provider ist gesetzt. In dieser Session gebe ich nach den ersten Wochen Einblicke und Lessons Learned, wie wir vom Zustand eines weißen Blatt Papiers auf ein Account- und Infrastruktur-Setup gekommen sind, mit dem wir zumindest mal sofort loslegen können ohne die üblichen „Abkürzungen“ bei Qualität und Featureumfang zu gehen. Ein wesentlicher Teil davon ist das Tooling von gruntwork.io, welches in diesem Kontext kurz vorgestellt wird. [Disclaimer: Wir sind auch nur normale Kunden mit einer gruntworks-Subscription ohne weitere Connections dorthin – diese Session wird also explizit keine gruntwork.io Werbeveranstaltung, auch wenn sich das inhaltlich nicht 100%ig vermeiden lässt]
http://www.opitz-consulting.com/go/3-6-11 --- Softwareentwicklung, -test und -betrieb können durch Virtualisierung viele Vorteile erzielen. In diesem Zusammenhang werden häufig Werkzeuge für die Bereitstellung von Umgebungen eingesetzt. Verschiedene Werkzeuge adressieren aber unterschiedliche Einsatzszenarien. Wo im Applikationslebenszyklus können diese Werkzeuge sinnvoll eingesetzt werden und wie sieht es mit Kosten und Nutzen aus? ---- Unser Senior Software Architect Richard Attermeyer stellte bei der W Jax am 5.11.2014 in München die Tools Vagrant, Puppet und Docker im Einzelnen vor und erläuterte ihren Nutzen anhand von Use Cases und Live Demos. ---- Weitere Infos: https://jax.de/wjax2014/sessions/vagrant-puppet-docker-fuer-entwickler-und-architekten ---- Über uns: Als führender Projektspezialist für ganzheitliche IT-Lösungen tragen wir zur Wertsteigerung der Organisationen unserer Kunden bei und bringen IT und Business in Einklang. Mit OPITZ CONSULTING als zuverlässigem Partner können sich unsere Kunden auf ihr Kerngeschäft konzentrieren und ihre Wettbewerbsvorteile nachhaltig absichern und ausbauen.---- Über unsere IT-Beratung: http://www.opitz-consulting.com/go/3-8-10 ---- Unser Leistungsangebot: http://www.opitz-consulting.com/go/3-8-874 ---- Karriere bei OPITZ CONSULTING: http://www.opitz-consulting.com/go/3-8-5
Continuous Integration wird längst in vielen Projekten praktiziert. Kein Wunder, steht für das Tooling doch in vielen Fällen ein Jenkins oder Travis zur Verfügung. Mit GitLab CI ist dies jedoch nicht mehr nötig. Schritt für Schritt wird in dieser Session eine Pipeline mit verschiedenen Test- und Analysetools aufgesetzt -- zur Integration in neue und bestehende Projekte.
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
node.js erlaubt die Ausführung von Javascript auf dem Server. Zusammen mit YUI3 gibt es jetzt auch noch einen echten DOM und plötzlich macht alles Spass :-)
Wenn der größte Teil der Logik in JavaScript stattfindet, dann findet auch der größere Teil der Sicherheitsrisiken dort sein Zuhause. Und auch Angreifer finden mit JavaScript eine interessante neue Spielwiese, denn die Sprache selbst und auch Ihre Heimat in Browser und Node.js bringen neue Probleme.
Genau da setzt der Vortrag an: die verblüffenden Unterschiede von JavaScript zu anderen Sprachen, wenn es um Security geht. Die Risiken und auch die Besonderheiten von Browsern und anderen JavaScript-Engines wie Node.js. Die Security-Implikationen von JavaScript-Frameworks bis hin zu speziellen Problemen wie mXSS, ReDOS und HTML5-Security.
Wie kann ich die Browser Tools zum Auffinden von Fehlern und Schwachstellen in meinem Sourcecode benutzen? Dieser Talk stellt die wichtigsten Features vor.
Frameworks wie Next.js und Nuxt versuchen, Client und Server wieder näher zusammenzubringen und setzen dabei auf die großen SPA-Frameworks React und Vue. Die leichtgewichtige Bibliothek htmx dagegen versucht, das gleiche Ziel auf ganz andere Weise zu erreichen. Muss es denn immer eine SPA sein? Reicht nicht auch in vielen Fällen deutlich weniger Overhead? Wir haben schließlich HTML als Strukturelement und CSS für das gute Aussehen. Genau diesen Ansatz greift htmx auf und erweitert die Fähigkeiten der HTML-Struktur. Serverkommunikation und Eventhandling erreichen mit dieser Bibliothek eine ganz neue Dimension.
Aber was bedeutet das für unsere tägliche Arbeit? Setzen wir in Zukunft alle neuen Applikationen nur noch mit htmx um, oder migrieren wir unsere Vue-Codebasis auf htmx? Diesen und vielen weiteren Fragen widmen wir uns in diesem Vortrag, nicht nur in der Theorie, sondern auch am praktischen Beispiel.
Angular ist die Komplettlösung für die Umsetzung von Webapplikationen im Frontend. Ein so umfassendes Werkzeug hat allerdings auch seine Schattenseiten: Die Einstiegshürde ist relativ hoch. Dieser Vortrag stellt die wichtigsten Elemente des Frameworks wie Komponenten, Direktiven und Services vor. In einem praktischen Beispiel werden die verschiedenen Elemente von Angular Schritt für Schritt zu einer kompletten Applikation zusammengefügt. Damit lernen Sie nicht nur die Elemente des Frameworks kennen, sondern gleichzeitig die wichtigsten Architekturpatterns und zahlreiche Best Practices.
Node.js is a lightweight but yet capable platform for creating powerful web applications. The core of Node.js is kept small and restricted to a limited functionality that is extended by a vast ecosystem. With the right combination of packages you are able to build full-featured web applications. There is nearly no limit in features starting with simple problems such as authentication or logging over web interfaces with REST or GraphQL to a whole application based on a microservices architecture. In this talk I will introduce you to some commonly used packages and show you how to use them by example.
Node.js and microservices go hand in hand. This comes mainly from the design of Node.js. It is a specialised small platform with an enormous package environment. The NPM ecosystem provides a lot of packages you can use to build your microservice. The two most popular frameworks for this job are Express and Seneca. In this talk I will show you how you can communicate synchronously and asynchronously with your microservices and how easy it is to put your Node.js application into a docker container.
Nobody likes to wait for web pages to load in the browser. The longer it takes, the more dissatisfied the users become. Slow web pages lead to a higher bounce rate and the loss of customers. To solve this kind of problems can be very hard sometimes. Before you even start to optimise your page, you have to understand the workflows a browser performs in order to display a page on the screen. In this talk you will get some insights in the critical rendering path and the javascript engine of your browser that help you to find performance problems and solve them. I will show you also some tools and best practices that make your life easier when it comes to performance.
Lange Wartezeiten und mangelnde Responsivität unserer Webapplikation führen zu unzufriedenen Benutzern, was sich in hohen Absprungraten und Abwanderung zur Konkurrenz oder einfach der Weigerung, die Applikation zu verwenden, niederschlägt. Das Problem einer langsamen Applikation lässt sich jedoch leider nicht ganz so einfach lösen. Wichtig für eine nachhaltige Lösung ist das Verständnis der Abläufe im Browser. Aus diesem Grund beschäftigen wir uns hier mit Konzepten wie dem Critical Rendering Path und einigen Charakteristiken der JavaScript-Engines. Im Zuge dieses Vortrags werden einige der häufigsten Problemstellungen von Webapplikationen analysiert und Lösungsansätze und Best Practices zur Behebung der Performanceprobleme vorgestellt.
Features einer Applikation werden häufig implementiert, weil die Verantwortlichen vermuten, dass diese Funktionalitäten einen Mehrwert für die Benutzer der Applikation bieten. Je nach Umfang wird mehr oder weniger Geld investiert. Ohne weitere Unterstützung sind und bleiben es jedoch Vermutungen. Eine bessere Lösung bieten hier A/B-Tests. Features werden kostengünstig in einer oder mehreren Varianten umgesetzt und mit einer Kontrollimplementierung verglichen. Die Umsetzung, die sich als die beste herausstellt, wird überarbeitet und bleibt in der Applikation erhalten. Diese Vorgehensweise lässt sich sehr gut in node.js-Applikationen integrieren. Mithilfe von A/B-Tests können Sie Ihre Applikation an den Anforderungen Ihrer Benutzer ausrichten.
Eine Sammlung von Best Practices für Applikationen mit AngularJS. Der Vortrag stellt Strukturen und Konventionen vor, mit denen sich auch umfangreiche Applikationen wartbar und erweiterbar halten lassen.
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Warum ECMAScript 6 die Welt ein Stückchen besser machtSebastian Springer
Wo die Neuerungen von ECMAScript 5 recht unspektakulär waren, sind die Features des neuen Sprachstandards umso interessanter. ECMAScript 6 versucht einige Anforderungen zu erfüllen, mit denen man als JavaScript-Entwickler täglich konfrontiert ist. Klassische Beispiele sind hier Promises zum Umgang mit asynchronen Funktionen, ein Module Loader zur Strukturierung der Applikation, Generatoren und Iteratoren oder aber ein neuer Gültigkeitsbereich für Variablen. Aber nicht nur große Änderungen, sondern auch sinnvolle Erweiterungen bestehender Objekte wie String und Array halten mit dem neuen Standard Einzug in den Browser. Problematisch wird die Situation jedoch, wenn man in den Genuss verschiedener Features kommen möchte, die aktuell noch von keinem Browser unterstützt werden. Hier schafft Traceur, der ECMAScript-6-Compiler von Google, Abhilfe.
In diesem Vortrag werden drei zentrale Fragen gestellt (und beantwortet):
Wie bringe ich meine Idee schnell auf den Markt?
Wie finde ich heraus, ob meine Idee gut ist?
Wie kann ich auf geänderte Anforderungen reagieren?
Wie erstelle ich Webapplikationen mit Node.js. Vorgestellt werden verschiedene Frameworks wie Express.js oder Koa. Außerdem wird auf Skalierung eingegangen.
Translate your angular application with angular translate by Pascal Precht. It's a module consisting of filters, services and directives for translating various strings.
6. Strict Mode
JavaScript soll robuster und sauberer werden.
Function Scope wird besser geschützt. Caller und Callee
soll es in Zukunft nicht mehr geben. Auch auf Arguments
kann man nicht mehr von außen zugreifen.
8. JavaScript und Dynamik
console.log = function () {
alert(arguments[0]);
}
In JavaScript kann nahezu alles überschrieben werden. So
können Wrapper um wichtige Funktionen und Objekte wie
z.B. console.log gelegt werden.
In Node.js kann man da auch einiges machen…
9. JavaScript und Dynamik
var b = require('./b');
console.log(b.b);
console.log(a);
a.js
a = 'Wert von A';
module.exports = {
b: 'Wert von B'
};
b.js
Ausgabe?
$ node a.js
Wert von B
Wert von A
10. JavaScript und Dynamik
var b = require('./b');
console.log(b.b);
console.log(a);
a.js
a = 'Wert von A';
module.exports = {
b: 'Wert von B'
};
b.js
Ausgabe?
$ node a.js
HEHE!HEHE!
console.log = function () {
process.stdout.write('HEHE!');
};
12. Namespacing
Mit diesen globalen Variablen und der Möglichkeit des
Überschreibens ist es sehr einfach Dummheiten zu machen.
Deshalb ist es immer gut, Quellcode in eine Immediate
Function zu packen, um die verwendeten Variablen besser
unter Kontrolle zu haben.
14. Angriffsvektoren
Welche Ressourcen kann ein Angreifer in unserem System
attackieren?
Welche Art von Angriff kann erfolgen?
Wie kann man diesen Angriffen begegnen?
16. Memory
Arbeitsspeicher des Systems.
Wird verwendet, um Objekte zu speichern.
Wird regelmäßig durch den Garbage Collector aufgeräumt.
Achtung: Node.js Prozesse haben meist eine längere
Laufzeit. Ein Memory Leak hat hier erhebliche Auswirkungen.
19. Memory
Der Speicherverbrauch wird gefährlich, wenn wir dem
Benutzer einen Teil der Kontrolle überlassen, z.B. wie viele
Elemente generiert werden, was in Objekte eingelesen wird,
…
20. Memory
Erstellung und Größe von Objekten kontrollieren.
Benutzereingaben immer validieren und sinnvoll limitieren.
22. Netzwerk
Kommunikation zwischen Client und Server. Meist auf Basis
von HTTP.
Empfangen von HTML, CSS, JavaScript und Mediendaten.
Senden von Informationen.
Vom Client initiiert. In der Regel unidirektional.
23. Netzwerk
DOS: Denial of Service. Ein Angreifer macht viele Anfragen
auf unser System.
Das System behandelt die Anfragen wie reguläre Anfragen.
Es bleiben kaum Ressourcen für sinnvolle Anfragen übrig.
25. Netzwerk
Maßnahmen gegen DOS: Systeme abschirmen. Firewall-
Regeln => Admin Stuff.
Ziel ist, dass die Anfragen nicht mehr bis zum System
durchkommen.
26. Netzwerk
Zugriffe loggen. Mustererkennung und Logfile-Auswertung.
Achtung: Datei nicht zu groß werden lassen, das kann
wiederum zu einer anderen Art von Attacke werden.
Lösung: logrotate, etc.
var morgan = require('morgan');
var fs = require('fs');
var accessLogStream = fs.createWriteStream(__dirname + '/access.log',
{flags: 'a'});
app.use(morgan('combined', {stream: accessLogStream}));
28. Netzwerk
Was können wir jetzt in der Applikation tun?
Anfragen schnell beantworten oder abweisen, wenn
bestimmte Muster zutreffen. Eingehende IP-Muster
blockieren.
app.get('/', function (req, res) {
console.log(req.connection.remoteAddress);
res.send('Hello World!');
});
31. Speicher
Langfristiger Speicher auf der Festplatte. Zum Persistieren
von Informationen in Form von Dateien und Verzeichnissen.
Synchroner und asynchroner Zugriff möglich.
36. CPU
Rechenzeit der CPU, die der Node.js-Prozess nutzt. Node.js
ist zunächst Single-Threaded. Es können Kindprozesse
erzeugt werden. Im Node.js-Prozess läuft nur der eigene
Code, alles andere wird ans Betriebssystem ausgelagert.
37. CPUvar express = require('express');
var app = express();
app.get('/', function (req, res) {
console.timeLog('incoming request');
var count = 0;
while(true) {
if (count > 1999999999) {
break;
}
count++;
}
console.timeLog('answering request');
res.send('Hello World!');
})
app.listen(8080);
43. Kindprozesse
Achtung: Jeder Kindprozess bedeutet Overhead, da er
Arbeitsspeicher und CPU-Ressourcen benötigt.
Nicht unlimitiert Kindprozesse forken. Mehr Kindprozesse
als Anzahl der CPU-Kerne bringt keinen wirklichen Mehrwert.
47. Berechtigung
Die Applikation hat die gleichen Berechtigungen, die der
Benutzer hat, der sie startet.
Eine Node.js-Applikation kann mit diesen Berechtigungen auf
die Ressourcen des Rechners zugreifen, z.B. CPU,
Arbeitsspeicher, Speicher.
56. OK, und warum ist das
jetzt so gefährlich?
Jörg Blanke / pixelio.de
57. NPM
Admin-Berechtigung für globale Installation erforderlich, weil
die Software in ein Systemverzeichnis installiert wird.
$ sudo npm install -g karma-cli
58. NPM
Hijacking bekannter Module durch Typos wie z.B. express.js
mit epress.js.
Und wenn diese dann auch noch die ursprüngliche
Funktionalität wrappen, wird es echt übel.
71. Helmet
• contentSecurityPolicy: Vermeiden von Injections von Content.
• hidePoweredBy: x-powered-by ist weg.
• hpkp: HTTP Public Key Pinning - Public Key wird mit einem Server verbunden
(gegen MITM).
• hsts: HTTPS statt HTTP nutzen.
• ieNoOpen: X-Download-Options wird auf noopen gesetzt (für IE)
• noCache: Clientseitiges Caching wird deaktiviert.
• noSniff: Browser weist Antworten mit dem falschen MIME-Type ab (X-
Content-Type-Options).
• frameguard: Seite kann nicht in Frames eingebunden werden, verhindert
Clickjacking.
• xssFilter: X-XSS-Protection Header wird gesetzt.
72. Helmet
Die Features können auch getrennt voneinander eingesetzt
werden.
app.use(helmet.hidePoweredBy());
73. Helmet
$ npm install --save helmet
var express = require('express');
var helmet = require('helmet');
var app = express();
app.use(helmet());
75. SQL Injection
Angriffe auf die Datenbank im Zuge einer regulären Abfrage.
SELECT * FROM users WHERE ID = 1;
UNION SELECT * FROM users;
SELECT * FROM users WHERE ID = 1 UNION SELECT * FROM users;
76. SQL Injection
app.get('/list', function (req, res) {
var id = req.query.id;
var query = 'SELECT * FROM users WHERE id = ' + id;
db.all(query, function (err, rows) {
console.log(err);
res.send(rows);
});
});
http://localhost:8080/list?id=1%20union%20select%20*%20from%20users
SELECT * FROM users WHERE id = 1 union select * from users;
77. SQL Injection
app.get('/list', function (req, res) {
var id = req.query.id;
var query = 'SELECT * FROM users WHERE id = ?';
db.all(query, id, function (err, rows) {
console.log(err);
res.send(rows);
});
});
SELECT * FROM users WHERE id = ‘1 union select * from users’;
http://localhost:8080/list?id=1%20union%20select%20*%20from%20users
79. XSS
Cross-Site Scripting. Benutzer speichert JavaScript-Code,
der auf anderen Systemen ausgeführt wird.
Kann z.B. für Identitätsdiebstahl verwendet werden.
80. XSS
app.get('/list', function (req, res) {
var id = req.query.id;
var query = 'SELECT * FROM users WHERE id = ?';
db.all(query, id, function (err, rows) {
require('fs').readFile('list.html', 'utf-8', function (err,
data) {
data = data.replace('${query}', id);
data = data.replace('${result}', rows);
res.send(data);
});
});
});
<body>
Sie suchten nach: ${query}
${result}
</body>
85. CSRF
Code einschleusen, um mit dem Browser des Benutzers auf
anderen Seiten Aktionen durchzuführen.
Meist ist der Benutzer dazu auf der anderen Seite angemeldet
und führt z.B. unbeabsichtigt Einkäufe oder Ähnliches durch.
86. CSRF
Tokenbasierte Kommunikation zwischen Client und Server.
Anfragen werden nur mit gültigem Token angenommen.
<input type="hidden" value="${csrftoken}">
app.use(csrf());
app.use(function (req, res, next) {
response.locals.csrftoken = request.csrfToken();
});