<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beiträge von Niklas Thür - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/dm171558/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/dm171558/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Wed, 20 Feb 2019 00:12:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://mobile.fhstp.ac.at/wp-content/uploads/2025/03/icon-120x120.webp</url>
	<title>Beiträge von Niklas Thür - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/dm171558/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Simple Continuous Deployment für Node.JS</title>
		<link>https://mobile.fhstp.ac.at/allgemein/8286/</link>
		
		<dc:creator><![CDATA[Niklas Thür]]></dc:creator>
		<pubDate>Wed, 20 Feb 2019 00:11:55 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=8286</guid>

					<description><![CDATA[<p>Node.JS Server sind in der heutigen Welt doch sehr häufig gesehen, wenn es um Backends für Apps geht. Sei es nun eine REST Schnittstelle oder Websockets oder dergleichen. Doch wie bekomme ich jetzt schnell und einfach meine Node.js Anwendungen auf meinen Server? Wie zum Beispiel einen Ubuntu Server. Ich möchte euch eine einfache Möglichkeit zeigen <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/8286/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/8286/">Simple Continuous Deployment für Node.JS</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Node.JS Server sind in der heutigen Welt doch sehr häufig gesehen, wenn es um Backends für Apps geht. Sei es nun eine REST Schnittstelle oder Websockets oder dergleichen. Doch wie bekomme ich jetzt schnell und einfach meine Node.js Anwendungen auf meinen Server? Wie zum Beispiel einen Ubuntu Server.</p>



<p>Ich möchte euch eine einfache Möglichkeit zeigen wie man schnell und einfach mit den beiden Tools PM2 und Codeship seine Anwendung auf einen Server deployed. Zunächst einmal was ist PM2? PM2 Runtime ist ein Produktionsprozess-Manager für Node.js-Anwendungen mit integriertem Load Balancer. Es ermöglicht Anwendungen für immer am Leben zu erhalten, sie ohne Ausfallzeiten neu zu laden und allgemeine Devops-Aufgaben zu vereinfachen. </p>



<h2 class="wp-block-heading">PM2</h2>



<p>Um PM2 zu installieren, kann man einfach node verwenden:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>npm install pm2 -g</p></blockquote>



<p>Für die CLI Autocompletion dann noch folgenden Befehl:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>pm2 completion install</p></blockquote>



<p>Nun fügt man seinem Node.js Projekt eine PM2 Konfigurationsdatei hinzu. Standardmäßig sucht pm2 nach den Namen ecosystem.config.js. Eine Datei kann wie folgt aussehen:&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>module.exports = {<br>apps: [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name:&#8221;MeinServerName&#8221;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script: &#8220;dist/index.js&#8221;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env_production: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NODE_ENV: &#8216;production&#8217;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; ],<br>&nbsp;&nbsp;&nbsp; deploy: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; production: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user: &#8216;prod&#8217;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; host: &#8216;server.fhstp.ac.at&#8217;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref: &#8216;origin/master,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repo: &#8220;https://github.com/User/repo.git&#8221;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path: &#8216;/srv/production&#8217;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;post-deploy&#8217;: ‘npm install &amp;&amp; pm2 startOrRestart ecosystem.config.js &#8211;env production&#8217;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>};</p></blockquote>



<p>Die Konfigurationsdatei ist in zwei Teile aufgeteilt. In dem
Bereich „apps“ geben wir an unter welchen Namen die Applikation laufen soll.
Bei „script“ geben wir an mit welcher Datei die Applikation gestartet werden
soll und dann können wir noch das node Environment spezifizieren. Dieser
Bereich wird also gebraucht um die Applikation am Server laufen zu lassen. </p>



<p>Der zweite Teil (deploy) spezifiziert wie die Applikation auf unserem Server deployed werden soll. Hier spezifizieren wir zunächst mit welchen Benutzer pm2 die Applikation deployen soll. Demnach ist es ein Benutzer auf zb unserem Ubuntu Server. </p>



<p>Danach geben wir den Host Namen oder die IP-Adresse unseres Servers an. Die Zeilen „ref“ und „repo“ geben an von welchen Repository und welchem Branch PM2 die App clonen soll. Wo das ganze gespeichert wird gibt man bei „path“ an. Der Befehl „post-deploy“ spezifiziert dann noch was nach dem deploy unserer Applikation ausgeführt werden soll. In diesem Beispiel installieren wir zunächst die node_modules und starten danach unsere Applikation mit dem Befehl pm2 startOrRestart.</p>



<p>Damit man nicht immer ein Passwort eingeben muss, empfiehlt es sich einen SSH Key für den Benutzer zu erstellen. Nun kann man seine Applikation bereits von seinem Computer aus (auch am PC muss man pm2 installieren) auf den Server deployen. Beim ersten Mal muss man hierfür den Befehl <strong>pm2 deploy production setup</strong> ausführen. Nach dem ersten Setup muss man nun immer nur den Befehl <strong>pm2 deploy production</strong> ausführen.</p>



<p>Damit pm2 automatisch startet, wenn der Server rebootet
wurde muss noch folgender Befehl am Server verwendet werden:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>pm2 startup</p></blockquote>



<p>Mit dem Befehl <strong>pm2 list</strong> sieht man nun alle laufenden PM2 Prozesse.</p>



<h2 class="wp-block-heading">Codeship</h2>



<p>Nun haben wir einen einfachen Weg unsere Node.js Applikation
am Server zu deployen allerdings passiert dies immer noch nicht automatisch.
Hierfür können wir das Tool Codeship verwenden. Codeship verwendet Virtuell
Machines (VMs) um die Applikationen in einem isolierten Umfeld zu starten und Tests
laufen zu lassen. Da jedes Projekt seine eigene VM hat können wir diese auch
individuell konfigurieren. So können wir zum Beispiel pm2 installieren oder wir
könnten eine Datenbank installieren.</p>



<p>Wenn ihr euch einen Account erstellt habt und eine Organisation erstellt habt, können wir beginnen ein neues Projekt hinzu zu fügen. </p>



<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="1540" height="672" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.44.55-1540x672.png" alt="" class="wp-image-8291"/></figure>



<p>Hierfür spezifizieren wir zunächst ein Repository in dem unsere Node.js Applikation gehostet ist. </p>



<figure class="wp-block-image"><img decoding="async" width="1540" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.45.06-1540x800.png" alt="" class="wp-image-8292" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.45.06-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.45.06-770x400.png 770w" sizes="(max-width: 1540px) 100vw, 1540px" /></figure>



<figure class="wp-block-image"><img decoding="async" width="1540" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.45.37-1540x800.png" alt="" class="wp-image-8293" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.45.37-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.45.37-770x400.png 770w" sizes="(max-width: 1540px) 100vw, 1540px" /></figure>



<p>Zum Schluss müssen wir noch einen Projekttyp auswählen. Für uns reicht der Basic Typ.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1540" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.46.19-1540x800.png" alt="" class="wp-image-8294" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.46.19-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.46.19-770x400.png 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>



<p>Es öffnen sich nun die Codeship Einstellungen. Im ersten Tab
Tests können wir die Tests die wir für unsere Applikation ausführen lassen
wollen spezifizieren. Doch zunächst können wir im Bereich „Setup commands“ die
Befehle angeben um die node modules und pm2 zu installieren.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.47.21-1.png" alt="" class="wp-image-8305" width="434" height="190"/></figure></div>



<p>Danach können wir eine Testpipeline erstellen. In diesem
Beispiel starten wir die Tests einfach mit dem Befehl npm tests.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.48.08-1.png" alt="" class="wp-image-8306" width="471" height="227"/></figure></div>



<p>Im Tab Deploy können wir spezifizieren wie die Applikation deployed
werden soll wenn die Tests erfolgreich waren. Für PM2 erstellen wir zunächst
eine neue Pipeline für den Branch master.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-20-um-00.09.02-2.png" alt="" class="wp-image-8309" width="477" height="114"/></figure></div>



<p>Danach erstellen wir ein „Custom Script“ und geben einfach
wieder den Befehl an, den wir auch bereits vorher schon verwendet haben. </p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.48.35-1.png" alt="" class="wp-image-8307" width="433" height="193"/></figure></div>



<p>Im Tab Build Triggers können wir nun noch angeben wann ein
Codeship Build gestartet werden soll. Ich habe hier die beiden Branches master
und develop angegeben. Dies bedeutet, dass für diese beiden Branches die Tests
gestartet werden. Allerdings wird nur bei einem Build für den master Branch der
Deployment Prozess gestartet.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.49.00-2.png" alt="" class="wp-image-8311" width="493" height="374"/></figure></div>



<p>Das einzige was nun noch zu tun bleibt ist den SSH Key von
Codeship auf unseren Server zu kopieren. Diesen findet ihr im Tab General.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2019/02/Bildschirmfoto-2019-02-19-um-23.50.11.png" alt="" class="wp-image-8300" width="510" height="261"/></figure></div>



<p>Sowohl PM2 als auch Codehsip bieten noch viele weitere Konfigurationsmöglichkeiten
aber schon mit diesen wenigen Schritten haben wir einen Continuous Deployment
Prozess geschaffen der uns automatisch für die beiden Branches develop und
master Tests laufen lässt und für Master Commits die Applikation danach
automatisch auf unseren Ubuntu Server deployed.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/8286/">Simple Continuous Deployment für Node.JS</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Web Security Headers</title>
		<link>https://mobile.fhstp.ac.at/security/web-security-headers/</link>
		
		<dc:creator><![CDATA[Niklas Thür]]></dc:creator>
		<pubDate>Tue, 18 Sep 2018 08:18:53 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=7969</guid>

					<description><![CDATA[<p>Viele von euch denken sich jetzt sicherlich: &#8220;Oh mein Gott Security. Schnell den Post wieder schließen&#8221;. Ich gebe zu es ist durchaus ein mühsames Thema, aber absolut notwendig in der heutigen Zeit! Gerade wenn man als Entwickler im Web unterwegs ist sollte man zumindest von den Web Security Headern gehört haben. Deshalb geht es in <a class="read-more" href="https://mobile.fhstp.ac.at/security/web-security-headers/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/security/web-security-headers/">Web Security Headers</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Viele von euch denken sich jetzt sicherlich: &#8220;Oh mein Gott Security. Schnell den Post wieder schließen&#8221;. Ich gebe zu es ist durchaus ein mühsames Thema, aber absolut notwendig in der heutigen Zeit! Gerade wenn man als Entwickler im Web unterwegs ist sollte man zumindest von den Web Security Headern gehört haben. Deshalb geht es in diesem Artikel auch nicht darum wie man die Security Header umsetzt. Stattdessen beschreibe ich kurz, was HTTP Security Header sind und wozu sie nützlich sein können. Außerdem gibt dieser Artikel einen Überblick über die wichtigsten Security Header die heute verwendet werden.</p>
<p>Jeder der im Web arbeitet kennt (sollte) das HTTP-Protokoll. Es wird überall im Web verwendet und ist daher eines der wichtigsten Kommunikationsprotokolle. Mit der Einführung der Internet of Things (IoT) wurde die Notwendigkeit, das HTTP-Protokoll zu sichern, noch größer als bisher. Die Vorteile von HTTP sind seine Einfachheit und seine breite Verfügbarkeit von Software-Implementierungen. Die Nachteile sind allerdings, dass es keine Sicherheitsimplementierung gibt.</p>
<p>Aus diesem Grund wurde das HTTPS-Protokoll entwickelt. HTTPS umschließt HTTP in TLS-Zertifikaten (Transport Layer Security), was der erste Schritt zum Sichern der Kommunikation über das Internet war. Aber nur die Verwendung des HTTPS-Protokolls, ist immer noch nicht ausreichend. Um die Kommunikationssicherheit auf ein höheres Niveau zu bringen, verwenden IT-Security Experten jetzt die HTTP-Response-Header. Diese sind einfache Key-Value Paare, um Sicherheitsrichtlinien von Servern auf Clients zu übertragen. Einer der ersten Security Header ist der HTTP Strict Transport Security-Header, der den Browser des Benutzers zwingt, nur HTTPS-Anforderungen für die Kommunikation mit einer Domäne zu verwenden. Außerdem haben die Entwickler von Browsern mehr und mehr Security-Header wie X-Frame-Options eingeführt. Dieser informiert den Browser darüber, wie Daten interpretiert werden müssen und wo sie angefordert werden dürfen.</p>
<h2>Was sind HTTP Security Header?</h2>
<p>Ein HTTP-Header ist ein Key-Value-Paar, das Metadaten über den Inhalt der Antwort beschreibt. HTTP-Security Header geben einem User Agent (z.B: Browser) Informationen über die Verarbeitung des Inhalts in der Antwort. Anbieter von Browsern veröffentlichten neue HTTP-Header, um die korrekte Interpretation der empfangenen Daten sicherzustellen und ihre Benutzer zu schützen. Im Gegensatz zu HTTPS ändert es nicht, wie die Daten übertragen werden. HTTPS verschlüsselt zum Beispiel Daten, aber die Header können User Agents beschränken, um Anfragen nur an einige vertrauenswürdige Domains statt an jede verfügbare Domain zu richten.</p>
<h2>Unterschied zwischen HTTPS und Security Headers</h2>
<p>HTTPS schützt nur die Daten von Requests und Responses. HTTP-Security Headers liefert stattdessen Informationen über die Daten und darüber, wie der Client damit umgehen soll. Während HTTPS für die Verwaltung sicherer Verbindungen zuständig ist, sind HTTP-Header dafür verantwortlich, wie der Inhalt angezeigt wird und von welchen Domänen ein User Agent andere Informationen wie Stylesheets, Skript-Dateien oder Bilder anfordern darf. Der Benutzer soll mit diesen Headern vor Angriffen wie Clickjacking oder Cross-Site Scripting (XSS) geschützt werden.</p>
<h2>Die bekanntesten Security-Header</h2>
<h3 class="p1">Referrer-Policy</h3>
<p>Ein Client kann einen Referer [sic!] &#8211; Request-Header enthalten, der angibt auf welcher Webseite der Benutzer zuvor war, beziehungsweise von welchem Server der Benutzer umgeleitet wurde. Dieser Header wird hauptsächlich für Analysen verwendet und sollte niemals als Authentifizierungsmethode verwendet werden. Ein Server möchte diese Art von Informationen jedoch möglicherweise nicht teilen. Hierfür kann der Server eine Referrer-Policy verwenden. Wenn der Wert dieses Headers beispielsweise kein Verweis ist, sollte ein Client niemals einen Referer-Header an diese Site oder an die erste Anfrage an einen anderen Webserver senden.</p>
<h3 class="p1">Content-Security-Policy</h3>
<p>Dieser Header wird verwendet um zu steuern, von welchen Domänen eine Quelle wie ein Stylesheet oder ein Skript geladen werden kann. Jede andere Domäne wird nicht in Betracht gezogen und verhindert somit einen XSS-Angriff.</p>
<h3 class="p1">Public Key Pinning</h3>
<p>Ein Webserver kann das Risiko von Man-in-the-Middle-Attacken (MIT) reduzieren, indem er seinen öffentlichen Schlüssel, der dann in nachfolgenden TLS-Verbindungen verwendet wird, in die allererste HTTP-Antwort einfügt. Der User Agent speichert es und verwendet nur noch diesen spezifischen Schlüssel für zukünftige Anfragen. Ein Angreifer könnte jedoch den Header so manipulieren, dass ein Benutzer den falschen öffentlichen Schlüssel speichert.</p>
<h3 class="p1">X-Frame-Options</h3>
<p>Dieser Header soll  Clickjacking-Angriffe verhindern. Mit den Optionen DENY, SAMEORIGIN oder einer Gruppe zulässiger Domänen muss ein Client überprüfen, ob ein HTTP-Inhalt in einem Frame angezeigt werden kann. Clickjacking wird durchgeführt, indem eine andere Website in einen unsichtbaren Iframe geladen und über den geladenen Inhalt gelegt wird. Wenn ein Opfer versucht, auf eine Schaltfläche zu klicken, um beispielsweise einen Dialog zu schließen, löst es eine Aktion im Iframe aus, beispielsweise eine Anmeldung an ein E-Mail-Konto.</p>
<h3 class="p1">X-XSS-Protection</h3>
<p>Ein Webserver kann die XSS-Erkennung auf einem Client-Webbrowser aktiv aktivieren. Der Server verwendet hierfür den X-XSS-Protection-Header. Mit der Option 0 sollte ein Client den XSS-Schutz nicht deaktivieren. Wenn Sie ihn jedoch auf 1 setzen, sollte der Web-Browser versuchen, das XSS zu bereinigen und die Seite dennoch rendern. Fügt man Optionsmodus = Block hinzu, wird dem Webbrowser geraten, den Inhalt nicht zu rendern. Ein Webserver kann auch eine URL bereitstellen, um eine Erkennung von XSS zu melden. Da es noch nicht standardisiert ist, unterstützen nicht alle Browser diesen Header.</p>
<h3 class="p1">X-Content-Type-Options</h3>
<p>Setzt ein Webserver diesen HTTP-Header mit der Option nosniff, interpretiert der Webserver MIME-Dateien nur so wie sie deklariert sind. Wenn beispielsweise eine JavaScript-Datei als reiner Text deklariert ist, sollte sie nicht ausgeführt werden.</p>
<h3 class="p1">Cross-Origin Resource Sharing</h3>
<p>Die Cross-Origin Resource Sharing (CORS) ist kein einzelner HTTP-Header, sondern ein Set von vielen Headern. Normalerweise führt ein Webbrowser nur Anforderungen an einen Server mit demselben Ursprung durch. Wenn ein Webserver wünscht, dass eine andere Webanwendung auf seine Ressourcen zugreift, muss er den Header Access-Control-Allow-Origin mit den zulässigen Domänen angeben. Alternativ kann auch ein * zurückgeben werden. Dieser gibt an, dass alle Domänen zulässig sind.</p>
<h3 class="p1">HTTP Strict Transport Security (HSTS)</h3>
<p>HTTP Strict Transport Security (HSTS) ist ein serverseitiger Sicherheitsmechanismus, der z.B: Webbrowser dazu zwingt, Verbindungen nur über HTTPS herzustellen. Viele Websites wie Banken setzen auf sicheren end-to-end Transport, um die Daten ihrer Nutzer zu schützen. Leider erlauben Browser normalerweise ihren Benutzern, diese Schutzmechanismen zu deaktivieren, um nutzbar zu sein. Wenn zum Beispiel ein Zertifikat eines Webservers abgelaufen ist, erlaubt der Browser dem Benutzer zu entscheiden, ob weiterhin mit dem Server kommuniziert werden soll. Dieses Verhalten wird oft als &#8220;click(ing) through&#8221;-Security beschrieben. Mit HSTS kann dieses Verhalten verhindert werden.</p>
<p>Hat man HSTS konfiguriert, transformiert der Browser alle unsicheren URIs (http: //) auf HSTS-Hosts in sichere URIs (https: //), bevor die Anforderungen gesendet werden. Wenn somit irgendwo im Code eine Ressource wie ein Bild über eine unsichere HTTP-Verbindung angefordert wird, macht der Browser automatisch eine HTTPS URI daraus. Außerdem werden alle sicheren Anfragen beendet, wenn ein Fehler oder eine Warnung auftritt. Etwa 85% der weltweit verwendeten Browser unterstützen den HSTS-Mechanismus.</p>
<h2>Schlusswort</h2>
<p>Auch mit diesen Headern gibt es immer noch genug Sicherheitslücken die ein Hacker ausnutzen kann, aber die Verwendung reduziert dieses Risiko zumindest schon mal. Leider (wie oft in der Security) sind manche Header wie z.B: der HSTS etwas mühsam und zeitaufwendig bei der Umsetzung.</p>
<p>P.S. Die meisten von euch werden schonmal einen dieser Header verwendet haben, auch wenn es euch vielleicht nicht aufgefallen ist.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/security/web-security-headers/">Web Security Headers</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Die neue Vue-Material Installation?</title>
		<link>https://mobile.fhstp.ac.at/development/webdevelopment/die-neue-vue-material-installation/</link>
		
		<dc:creator><![CDATA[Niklas Thür]]></dc:creator>
		<pubDate>Wed, 06 Dec 2017 23:16:01 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[Material Design]]></category>
		<category><![CDATA[Scss]]></category>
		<category><![CDATA[Vue-Material]]></category>
		<category><![CDATA[Vue.js]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=7404</guid>

					<description><![CDATA[<p>Es gibt nun seit ein paar Wochen eine neue Version von Vue-Material. Dies sieht man auch sehr schnell, wenn man ihre Webseite aufruft. Als kleiner Tipp solltet ihr die Dokumentation der alten Vue-Material Version suchen findet ihr dies entweder in eurem Projekt unter node_modules/vue-material/dist/docs wo ihr dann einfach die index.html aufrufen könnt. Oder alternativ findet <a class="read-more" href="https://mobile.fhstp.ac.at/development/webdevelopment/die-neue-vue-material-installation/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/die-neue-vue-material-installation/">Die neue Vue-Material Installation?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Es gibt nun seit ein paar Wochen eine neue Version von Vue-Material. Dies sieht man auch sehr schnell, wenn man ihre Webseite aufruft. Als kleiner Tipp solltet ihr die Dokumentation der alten Vue-Material Version suchen findet ihr dies entweder in eurem Projekt unter node_modules/vue-material/dist/docs wo ihr dann einfach die index.html aufrufen könnt. Oder alternativ findet ihr die Dokumentation noch unter dem folgenden Link:</p>
<p><a href="https://vue-material-old.netlify.com/#/">https://vue-material-old.netlify.com/#/</a></p>
<p>Das neue Vue-Material bietet ein paar coole neue Features wie zum Beispiel verbesserte Formular Komponenten oder zusätzliche Styling Optionen für zB die Snackbar. Möchte man nun die neue Version verwenden, stößt man schnell auf ein Problem. Während die Installation noch keine Herausforderung bereitstellt, sieht es bei der Konfiguration schon ganz anders aus. Aber ich beginne zunächst mal mit der Installation.</p>
<h1>Installation</h1>
<p>Die Installationsanleitung von Vue-Material findet ihr unter:</p>
<p><a href="https://vuematerial.io/getting-started">https://vuematerial.io/getting-started</a></p>
<p>Wie bereits bekannt können wir Vue-Material mit npm oder yarn installieren und die entsprechenden Kommandozeilen Befehle sind wie folgt:</p>
<pre>$ npm install vue-material@beta --save
$ yarn add vue-material@beta</pre>
<p>&nbsp;</p>
<p>Um Vue-Material nun verwenden zu können öffnen wir unsere src/main.js Datei und fügen folgende Codezeilen hinzu:</p>
<pre>import Vue from 'vue'
//import VueMaterial after Vue
import VueMaterial from 'vue-material'
import 'vue-material/dist/vue-material.min.css'

Vue.use(VueMaterial)</pre>
<p>&nbsp;</p>
<p>Bis jetzt gibt es keinen Unterschied zu der früheren Version von Vue-Material.</p>
<h1>Konfiguration</h1>
<p>Nach der Installation kommt die Konfiguration. Schaut man sich die Dokumentation des alten Vue-Materials an, konfiguriert man sein Theme auch gleich in der src/main.js Datei. Das Ganze kann dann wie folgt aussehen:</p>
<pre>Vue.material.registerTheme('default', {
primary: {
color: 'yellow',
hue: '600',
textColor: 'black'
},
accent: 'blue',
warn: 'deep-orange',
background: 'white'
})</pre>
<p>&nbsp;</p>
<p>In der früheren Version wird mein Theme nun erfolgreich auf die Vue-Material Komponenten angewendet und ich bin somit fertig.</p>
<h1>Die neue Konfiguration</h1>
<p>In der neuen Version schaut das ganze leider etwas anders aus. Öffnet man die neue Konfigurationsanleitung (<a href="https://vuematerial.io/themes/configuration">https://vuematerial.io/themes/configuration</a>) sieht man nun plötzlich folgenden Codeschnipsel:</p>
<pre>@import "~vue-material/dist/theme/engine"; // Import the theme engine

@include md-register-theme("default", (
 primary: md-get-palette-color(blue, A200) // The primary color of your application));

@import "~vue-material/dist/theme/all"; // Apply the theme</pre>
<p>Man findet noch einige Möglichkeiten wie ich das Theme weiter anpassen kann, aber keinerlei Informationen wo ich diesen Code eingeben soll. Diejenigen unter euch die mit SCSS vertraut sind merken vielleicht, dass es sich bei diesem Codeschnipsel um SCSS Code handelt. Dies bedeutet, dass es nicht in meine src/main.js Datei gehören kann. Stattdessen muss man sich jetzt pro Theme das man registrieren möchte am besten eine eigene SCSS Datei anlegen.</p>
<p>Hierfür legen wir uns nun zunächst in unserem src Ordner einen neuen Ordner themes an. Und in diesem Ordner erstellen wir noch gleich eine Datei default.scss. Das Ganze sieht dann wie folgt aus:</p>
<p><img loading="lazy" decoding="async" class=" wp-image-7415 aligncenter" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.07.31.png" alt="" width="265" height="329" /></p>
<p>&nbsp;</p>
<p>Öffnen wir nun unsere default.scss Datei. Hier kann ich nun den Codeschnipsel von der Anleitung auf der Webseite einfügen. Für mein Theme sieht das ganze wie folgt aus:</p>
<p>&nbsp;</p>
<pre>@import "~vue-material/dist/theme/engine"; // Import the theme engine

@include md-register-theme("default", (
primary: md-get-palette-color(orange, 400), // The primary color of your application
accent: md-get-palette-color(pink, 300) // The accent and secondary color
));

@import "~vue-material/dist/theme/all"; // Apply the theme</pre>
<p>&nbsp;</p>
<p>Nun habe ich quasi mein Default Theme erstellt und wende das Theme auf alle Komponenten an. Was nun noch fehlt ist ein Import in der App.vue Datei. Wir haben zwar ein Theme registriert und sagen auch dass er das Theme auf alle Komponenten anwenden soll, aber das wird erst angewandt wenn wir das Theme in einer .vue Datei importieren. Ich möchte mein default Theme auf mein gesamtes Projekt anwenden und deshalb importiere ich es in der App.vue Datei. In meinem Projekt sieht diese Datei nun so aus:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-7417 size-full" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20.png" alt="" width="1234" height="1228" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20.png 1234w, https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20-150x150.png 150w, https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20-32x32.png 32w, https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20-50x50.png 50w, https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20-64x64.png 64w, https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20-96x96.png 96w, https://mobile.fhstp.ac.at/wp-content/uploads/2017/12/Bildschirmfoto-2017-12-07-um-00.09.20-128x128.png 128w" sizes="auto, (max-width: 1234px) 100vw, 1234px" /></p>
<p><strong>Wichtig: Das Style Tag muss zusätzlich noch lang=&#8221;scss&#8221; dabeistehen haben!</strong></p>
<h1>Schlusswort</h1>
<p>Nun sind wir fertig und euer Theme wird nun endlich wieder auf eure Komponenten angewendet.</p>
<p>Solltet ihr mit einem bestimmten Theme nur spezifische Komponenten anpassen wollen, dann importiert ihr einfach nur die entsprechenden Komponenten in eurer theme.scss Datei. Zum Beispiel:</p>
<pre>@import "~vue-material/dist/components/MdButton/theme"; 
@import "~vue-material/dist/components/MdToolbar/theme";</pre>
<p>Zum Schluss sei noch kurz angemerkt, dass es sich bei dieser Version um eine <strong>Beta</strong> handelt und es daher sein kann, dass nicht alles <strong>100%</strong> funktioniert!</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/die-neue-vue-material-installation/">Die neue Vue-Material Installation?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#8220;Print-to-Mobile&#8221; &#8211; SocketQuiz</title>
		<link>https://mobile.fhstp.ac.at/allgemein/print-to-mobile-socketquiz/</link>
		
		<dc:creator><![CDATA[Niklas Thür]]></dc:creator>
		<pubDate>Mon, 16 Oct 2017 09:06:26 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[ESLint]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[pm2]]></category>
		<category><![CDATA[Sequelize]]></category>
		<category><![CDATA[Socket.io]]></category>
		<category><![CDATA[Typescript]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=7148</guid>

					<description><![CDATA[<p>Idee / Motivation Bei dem Projekt SocketQuiz handelt es sich um ein Quiz Applikation bei der eine Person ein Quiz starten bzw. freigeben kann. Alle Personen die den QR Code des Spiels scannen oder den Spielecode eingeben, können diesem Quiz beitreten. Alle Spieler können anschließend einen Playername eingeben und warten dann auf den Spielbeginn. Sobald <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/print-to-mobile-socketquiz/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/print-to-mobile-socketquiz/">&#8220;Print-to-Mobile&#8221; &#8211; SocketQuiz</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Idee / Motivation</h1>
<p>Bei dem Projekt SocketQuiz handelt es sich um ein Quiz Applikation bei der eine Person ein Quiz starten bzw. freigeben kann. Alle Personen die den QR Code des Spiels scannen oder den Spielecode eingeben, können diesem Quiz beitreten. Alle Spieler können anschließend einen Playername eingeben und warten dann auf den Spielbeginn. Sobald alle Spieler dem Quiz beigetreten sind, kann der Quizleiter das Quiz starten. Daraufhin erhalten alle Spieler die erste Frage. Beantwortet ein Spieler die Frage sieht er sofort ob sie richtig oder falsch war. Haben alle Spieler die Frage beantwortet schaltet der Spielleiter die nächste Frage frei.</p>
<h1>Funktionen der Applikation</h1>
<h2>Spielleiter</h2>
<p>&nbsp;</p>
<p><strong>Login</strong><br />
Der Spielleiter kann sich mit seinen Zugangsdaten in der Applikation einloggen. Er sieht dann eine Übersicht all seiner Quizes.</p>
<p><strong>Freigabe</strong><br />
Der Spielleiter kann ein Quiz freigeben oder deaktivieren. Nur wenn ein Quiz freigegeben ist können Spieler diesem beitreten.</p>
<p><strong>Leitung</strong><br />
Sobald ein Quiz freigegeben wurde, wird der Spielleiter zur Quiz Administration weitergeleitet. Hier wird nun der QR Code und der Game Code des Quizes angezeigt. Die Spieler können nun dem Quiz beitreten. Danach kann der Spielleiter auf den &#8220;Start&#8221;-Button klicken um die erste Frage freizugeben. Beim Spielleiter so wie bei den Spielern wird die Frage und alle Antwortmöglichkeiten angezeigt. Haben alle Spieler die Frage beantwortet kann der Spielleiter mit dem &#8220;Next&#8221;-Button die nächste Frage freigeben. Sollte es sich um die letzte Frage handeln, wird der &#8220;Next&#8221;-Button zum &#8220;Finish&#8221;-Button. Der Spielleiter kann nun das Spiel beenden und bekommt die drei besten Spieler angezeigt.</p>
<h2>Spieler</h2>
<p><strong>Beitreten</strong></p>
<p>Der Spieler hat zwei Möglichkeiten um einem Quiz beizutreten. Die erste Möglichkeit ist das Scannen des QR-Codes und die zweite die Eingabe des Game Codes. Sobald der Spieler einem Quiz beigetreten ist, kann er/sie einen Namen eingeben.</p>
<p><strong>Beantworten</strong></p>
<p>Der Spieler kann freigeschaltete Fragen beantworteten und sieht sofort sein Ergebnis. Abschließend sieht er/sie wieviele Fragen er/sie falsch und richtig beantwortet hat.</p>
<p>&nbsp;</p>
<h1>Umsetzung</h1>
<p>Die Applikation besteht aus einem Client und einem Serverteil. Die Client Applikation &#8211; sowohl der Spielleiter als auch der Spieler Part &#8211; habe ich mit dem Framework <a href="https://angular.io/">Angular</a> umgesetzt. Um ein Design, das den Material Design Richtlinien entspricht, verwenden zu können, habe ich das <a href="https://material.angular.io/">Angular Material</a> Plugin verwendet. Für die Erstellung der QR-Codes habe ich das Plugin <a href="https://github.com/monospaced/angular-qrcode">angular-qrcode</a> verwendet. Außerdem wurde für die WebSocket Kommunikation mit dem Server das <a href="https://www.npmjs.com/package/ng2-socket-io">Socket.io Plugin</a> für Angular verwendet.</p>
<p>Bei dem Server handelt es sich um einen <a href="https://nodejs.org/en/">Node.js</a> Server der mit <a href="https://www.typescriptlang.org/">Typescript</a> und <a href="https://eslint.org/">ESLint</a> programmiert wurde. Für die Kommunikation mit dem Client wurde auch hier die <a href="https://socket.io/">Socket.io</a> Library verwendet. Um die Quizes und die Benutzer Daten zu speichern wurde eine MySQL Datenbank verwendet. Für einen schnelleren und einfacheren Zugriff auf die Datenbank, habe ich das ORM Mapping von <a href="http://docs.sequelizejs.com/">Sequelize</a> verwendet. Um den lokalen Server auf den richtigen Serven zu deployen habe ich den Process Manager <a href="http://pm2.keymetrics.io/">pm2</a> verwendet.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/print-to-mobile-socketquiz/">&#8220;Print-to-Mobile&#8221; &#8211; SocketQuiz</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
