INSTUDERINGSMATERIAL
HEMPROV
👩🎓
Webbserverprogrammering 1
Att plugga inför hemprovet
- Ett hemprov sker på längre tid än ett vanligt, men det kräver också att du skriver mer utförligt.
- Du har tillgång till alla möjliga källor. Google, dina exit tickets, dina egna anteckningar o.s.v
- Varje moment i detta instuderingsmaterial visar vilka delar du ska kunna förklara se under "Att kunna". I slutet av varje moment finns en fördjupning. Där sovrar du ur innehållet så att du själv kan presentera momentet på ditt eget sätt. Du behöver alltså inte ha full koll på alla länkar.
- Hemprovet kommer inte vara poängstyrd utan utifrån kriterierna E - översiktligt C-utförligt A- utförligt och nyanserat
- På ett hemprov krävs ett godkänt svar på några meningar, inte bara en meing, eftersom du har tillgång till dina källor
- Urkund kommer att göras vid inlämning
- Du förbereder dig bäst genom att gå igenom alla delar och försöker förklara på ditt eget sätt. Skriv gärna ner dina förklaringar och klargöranden, rita bilder.
1. Front-end v.s Back-end
Att kunna
- Förklara skillnaden mellan front-end och back-end inom webbutveckling
- Förklara skillnaden mellan statiska och dynamiska webbplatser
- Olika "stackar" för backendteknologier. D.v.s kunna namnge andra än Node.js/Express/MongoDB som vi använt. Eller andra programmeringsspråk som används för back-end.
WEBBLÄSARE
DATABAS
FRONT-END
BACK-END
HTTP Server
APP
FILER

V.S
FRONT-END STACK
BACK-END STACK









WEBBSERVER
FILER

FILER
WEBB-LÄSARE

DATABAS
HÄMTA DATA
SKAPA
WEBBPLATS

TEMPLATE

WEBB-LÄSARE
STATISKA V.S DYNAMISKA WEBBPLATSER
👉 Webbapplikation = Dynamisk sida + Funktionalitet
RENDERING PÅ SERVERSIDAN
Fördjupning
Svenska
Engelska
2. Samspelet mellan klient och server och HTTP-protokollet
Att kunna
- Skillnaden mellan klient och server
- Redogöra för klient-server modellen och hur en webbsida efterfrågas (förfrågan/svar)
- Redogöra översiktligt för HTTP-protokollet
- De olika metoderna i HTTP och vad de innebär
- De olika delarna i en url-adress (protokoll, domännamn, resurs)
HUR EN WEBBSIDA EFTERFRÅGAS
👉 Klient-server modellen (enkla versionen)
KLIENT
SERVER
👩💻

FÖRFRÅGAN (REQUEST)
SVAR (RESPONSE)
HTTP
- HTTP = HyperText Transfer Protocol används när webbläsaren skicka och tar emot information
- En förfrågan kallas för request och webbserverns svar för respons
- HTTP har olika metoder som GET, POST, PUT, DELETE
- GET används för att be om att data från webbservern
- POST används för att skicka data till webbservern
KLIENT
SERVER
👩💻

FÖRFRÅGAN (REQUEST)
SVAR (RESPONSE)
HUR EN WEBBSIDA EFTERFRÅGAS
KLIENT
SERVER
👩💻
KLIENT
KLIENT

HTTP REQUEST
HTTP RESPONSE
https://www.google.com/maps
Protokoll
(http eller https)
Domännamn
Resurs
DNS
DNS uppslag
https://216.58.211.206:443


TCP/IP socket anslutning
HTTP metod + dataförfrågan + HTTP version
HTTP request header (olika inställningar)
HTTP response body (endast om man skickar data med POST)
HTTP metod + dataförfrågan + HTTP version
HTTP response header
HTTP response body
3
1
2
4
Fördjupning
Svenska
Engelska
- Skillnad klient och server https://sv.sawakinome.com/articles/technology/difference-between-client-and-server.html
- HTTP-protokollet https://sv.wikipedia.org/wiki/Hypertext_Transfer_Protocol
- Vad är HTTP? https://topdog.nu/ordlista/http/
- Klient-server modellen https://www.youtube.com/watch?v=B8azMzrluHE
- Klient-server och hur en webbsida efterfrågas https://medium.com/@rickgaurav051190/client-server-request-response-in-laymans-terms-e52f98495c00
- HTTP-protokollet https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Client-Server_overview
- Hur en webbsida efterfrågas https://medium.com/@jen_strong/the-request-response-cycle-of-the-web-1b7e206e9047
3. API:er
Att kunna
- Förklara översiktiligt vad ett API är
- Att man kan hämta data från öppna API:er, ex Spotify, FetchMemes
- JSON är ett vanligt dataformat att få svar från ett API
- Att en metod inom backend är att man endast upprätthåller ett API för att sedan konsumeras på front-end sidan
API
- API = Application Programming Interface
- Används när man vill publicera vissa funktioner i en applikation till internet. Man väljer vilka som ska vara åtkomliga och hur man anropar dem
- Ett stängt API är bara den som gjort api:et som kan använda sig av de funktionerna
- Det finns gott om öppna API:er på nätet
- Ett öppet API kan skyddas av en s.k. API-Key eller andra begränsningar

API
ETT API, FLERA KONSUMENTER
WEBB-LÄSARE
MOBIL-APP
MOBIL-APP
APP
APP








Vad är JSON?
- JSON = JavaScript Object Notation
- Används för att skicka data mellan klienten och servern
- Är språkoberonde men använder samma syntax som Javascript
- Kan användas som ett vanligt objekt i Javascript (JSON.Parse())
- Är ett filformat men har likheter med MongoDB och andra NoSQL-databaser


FILER

DATABAS
HÄMTA DATA
SKAPA
WEBBPLATS

TEMPLATE
WEBB-LÄSARE
DYNAMISKA V.S API-DRIVNA WEBBPLATSER
DATABAS
HÄMTA DATA

WEBB-LÄSARE
TEMPLATE
SKAPA
WEBBPLATS

SKAPA ETT API
KONSUMERA ETT API
RENDERING PÅ SERVERSIDAN
RENDERING PÅ KLIENTSIDAN


Fördjupning
Svenska
Engelska
- Allmänt om olika typer av API:er https://sv.wikipedia.org/wiki/Application_Programming_Interface
- Lite lättskrivet om API:er http://www.tjejerkodar.se/blogg/vad-ar-api/l
- Mer om API https://www.portablamedia.se/vad-ar-api-er-och-hur-anvander-man-dem/
- och mer https://techworld.idg.se/2.2524/1.564936/sa-skapar-du-ett-eget-api
- Video som förklarar API https://www.youtube.com/watch?v=Rha1_St_9kw
- Video om JSON https://www.youtube.com/watch?v=_NFkzw6oFtQ
- Använda API i praktiken https://www.youtube.com/watch?v=rJaXOFfwGVw
4. REST API
Att kunna
- Förklara översiktiligt vad ett REST API
- Vad är syftet med REST API:er?
- Vad har HTTP och CRUD med REST API att göra?
REST API
REpresentational State Transfer

CRUD
- Inom datavetenskap har vi fyra grundläggande funktioner för att uppnå datapersistens*. Dessa är: CREATE, READ, UPDATE, DELETE = CRUD
*beständighet. Möjlighet att spara data även och datorn/programmet stängs av. Databaser är en teknik att uppnå detta.
Vad är ett REST API?
- Ett sätt att bygga api:er som bygger på funktioner i HTTP-protokollet och CRUD
- Ej bundet till något programmeringsspråk
URI | Metod | Beskrivning |
---|---|---|
/posts | GET | Hämtar alla inlägg |
/posts | POST | Lägger till nytt inlägg |
/posts/{id} | GET | Hämtar specifikt inlägg |
/posts/{id} | PUT | Ersätter ett inlägg med annat |
/posts/{id} | DELETE | Tar bort specifikt inlägg |
Utgår från en s.k endpoint (ex https://api.instagram.com/v1 )
Scenario: Vi vill sätta upp routes för en webbapplikation som ska vara en blog.
Users
Posts
Images
Comments
Likes
e.t.c...
Olika resurser på en blog
Posts
http://www.exampeblog.com/addNewPost
ENDPOINT
URL
/getPost
/updatePost
/deletePost
/getPostByUser
/deletePostByUser
INTE BRA 👎
👉 Endpoints ska endast innehålla resursnamn som posts, users, comments etc och använda HTTP-metoder för beteende
REST API
en mappning, regler hur ett API ska sättas upp
/getPost
/updatePost
/deletePost
/addNewPost
GET /posts/7
PUT /posts/7
DELETE /posts/7
POST /posts
id för ett inlägg
/getPostByUser
/deletePostByUser
GET /users/7/posts
DELETE /users/7/posts/9
CREATE
READ
UPDATE
DELETE
HTTP-metoder
Använda CRUD
Fördjupning
Svenska
Engelska
- Video som förklarar REST API https://www.youtube.com/watch?v=Q-BpqyOT3a8
- https://www.edureka.co/blog/what-is-rest-api/
- Använda API i praktiken https://www.youtube.com/watch?v=rJaXOFfwGVw
5. Databaser
Att kunna
- Vad är en databas?
- Förstå begreppet och innebörden av CRUD
- Kunna beskriva huvudsakliga skillnaden mellan en relationsdatabas och en icke-relationsdatabas (dokumentdatabas)
- Kunna översiktligt beskriva en relationsdatabas som SQL
- Kunna översiktligt beskriva en NoSQL-databas som MongoDB
Vad är en databas?
- En organiserad samling av data (data = information) på ett sådant sätt att det är lätt att söka efter och hämta enskilda bitar information, samt även ändra informationen.
- Är persistent, d.v.s försvinner inte när man avslutar programmet eller stänger av datorn.
- Om man vill skapa en databas vill man gör en modell som beskriver verkligheten. Till exempel göra en beskrivning hur en webbutik ser ut och fungerar (produkter, priser, kunder, lagerstatus...). Eller i vårt fall en blog (användare, inlägg, kommenterar, bilder..).
CRUD
- Inom datavetenskap har vi fyra grundläggande funktioner för att uppnå datapersistens*. Dessa är: CREATE, READ, UPDATE, DELETE = CRUD
*beständighet. Möjlighet att spara data även och datorn/programmet stängs av. Databaser är en teknik att uppnå detta.
Olika databaser
- Det finns flera olika databaser. En vanlig uppdelning är mellan relationsdatabaser (SQL) och icke-relationsdatabaser (NoSQL).
- En relationsdatabas som SQL eller mySQL är uppbyggt av tabeller
- En icke-relationsdatabas som MongoDB är uppbyggt av dokument.
- I stacken Node.js + Express är MongoDB vanligast och den databas vi ska använda mest i kursen.
Databasen

Introduktion till MongoDB
Databas
NoSQL
DATABAS innehåller en eller flera "collections" såsom users, posts, etc.
SQL
"Tabell"
"Rader"


COLLECTION
innehåller ett flertal "document"
DOCUMENT
innehåller "key-value pairs"
SQL
"Tabell"
"Rader"



Relationsdatabasen SQL
Vad är en relationsdatabas?
En relationsdatabas är en databas där information ("data") är organiserad i relationer (även kallade tabeller) bestående av raderoch kolumner (fält). En unik nyckel identifierar varje rad.
Vad är SQL?
- Structured Query Language
- SQL är ett språk för att lagra, manipulera och hämta data från en relationsdatabas
- SQL är standarden för relationsdatabaser. Men andra som MySQL, Oracle, MS Access använder SQL som språk
Exempel från phpmyadmin

Hur olika tabeller relaterar till varandra

När PHP och MySQL används ihop
En tabell från en databas i MySQL

Lite inblick i SQL-kommandon
Fördjupning
- Allmänt om databaser http://www.databasteknik.se/webbkursen/databaser/index.html
- Om relationsdatabaser och SQL http://weber.itn.liu.se/~stegu76/TNMK30-2015/SQLintro-2006.pdf
- Om relationsdatabaser och SQL https://www.ludu.co/course/lar-dig-sql/relation-database
- Skillnad NoSQL (MongoDB) och SQL https://sv.tipsandtrics.com/how-mongodb-database-can-better-organize-your-data-767816
- Skillnad relationsdatabas och NoSQL https://blog.panoply.io/sql-or-nosql-that-is-the-question
- Skillnad relationsdatabas och NoSQL https://www.geeksforgeeks.org/difference-between-sql-and-nosql/
Svenska
Engelska
6. Tekniska miljön Node.js/Express/MongoDB
Att kunna
- Översiktligt vad Node.js är
- Översiktligt vad NPM är
- Synkron vs asynkron programmering och hur detta kan uppnås i Javascript (d.v.s async/await)
- Översiktligt om ramverket Express
- Vad routing innebär
- Vad programmet Postman kan användas till
- Vad en miljövariabel är
- ÖVersiktiligt vad Mongoose är
- Vad en templatemotor
Introduktion till Node.js + NPM



EcmaScript versioner


Största uppdateringen
Första release
NODE.JS ÄR EN RUNTIME MILJÖ FÖR JAVASCRIPT SOM BYGGER PÅ GOOGLES OPEN-SOURCE V8 JAVASCRIPT MOTOR





JS i browser v.s med Node.js

- Single-threaded, event-driven och icke-blockerande I/O-modell 🤔 👍
- Javascript på både klient- och serversidan 👍
- NPM - gigantiskt bibliotek med open-source moduler som förenklar din kodning 👍
- Paypal, Uber, Linkedin och Netflix är några exempel på företag som använder Node.js.
- Bra community 👍

ANVÄNDNING
FÖRDELAR
- Köra Javascript på servern!
- ...och applikationer för back-end (främst NoSQL som databas)
- Datastreaming (typ Youtube)
- Chattapplikationer i realtid
MINDRE BRA
- Applikationer med CPU-intensiva processer på server-sidan


- Viktigt del när man jobbar med Node.js
- Npm innehåller paket med färdig kod som man kan återanvända i sitt projekt
- Hundratusentals paket och det kommer dagligen upp nya
- Open Source
NPM
Node.js ”pakethanteringsystem”

VI KOMMER ATT ANVÄNDA FLERA PAKET FRÅN NPM SÅSOM RAMVERKET EXPRESS m.fl
Asynkron JavaScript

Synkron programmering
console.log("Statement 1"):
console.log("Statement 2"):
console.log("Statement 3"):
Kod läses rad för rad, uppifrån och ner. När en funktion är klar, kör nästa.
En del rutiner tar tid. Exempel HTTP-requests eller hämta från databas. Hur hantera detta?
Problemet

En kö av instruktioner/funktioner
sånt som blockar!

Single-threaded
Javascript/Node.js är
Statement 1
Statement 2
Statement 3
Statement 4
HTTP REQUEST
🕰
HÄMTA FRÅN DB
🕰
BLOCKERANDE 👎
Asynkront!
Vår räddning...
Statement 1
Statement 2
Statement 3
CALLBACK
HTTP REQUEST
🕰
ICKE-BLOCKERANDE 👍
HTTP REQUEST
Starta exekveringen nu, men avsluta senare
"BAKGRUNDEN"
Asynkron Javascript
Single-thread
Här ska vår kod köras.
Bara en tråd.
👨💻
👩🎤
🕵️♀️
🧙♂️
Läsa stor fil
Login
Streama
Requesta ngt
"Bakgrunden"
Här ska tidskrävande proccesser köras!
Obs! Förenklad version 🙀
när klar

När är async bra?
När saker måste ske i viss ordning
- Hämta data
- Göra något med datan
- Uppdatera gränsnittet
Typ det vi vill göra 👩💻


Leder till snårig kod. Kallas Callback Hell.
Don't go there😈
Asynkrona metoder
- callbacks
- promises
- async functions



Till vår räddning 🤩
Kan ff användas i mindre omfattning...


Introduktion till ramverket
Vad är ett ramverk?
eng. framework
Enkelt uttryckt är det en kombination av färdigskriven kod och regler för struktur för program. Det bygger på det befintliga programspråket och syftet med ett ramverk är att det ska gå snabbare att utveckla och underhålla kod för applikationer.
Vad är Express?
Express är ett ramverk för att skapa webbapplikationer på server-sidan (backend) på plattformen Node.js.
Det vi kommer använda från ramverket Express är att skapa en http-server, hantering hur olika routes sätts upp för att svara mot en speciell request metod såsom GET, POST, PUT, DELETE, för att skapa ett enkelt API. Vi ska även använda något som kallas för middleware.

Varför ska vi använda Express?
- Mest populära webbapplikationsramverket för Node.js
- Express vanlig i stacken MEAN (MongoDB, Express, Angular (eller React)*, Node.js
- Mer flexbilet och frihet än andra ramverk
- Bra community
* är ett frontend ramverk som är för omfattande att gå in på i denna kurs
Med routing anger vi att vissa sökvägar för vår webbapplikation ska trigga igång specifika koddelar.
Vad är routing?
Exempelvis en viss route i vår webbapplikation ska ansvara för att när:
- http://exampleblog.com/posts efterfrågas, så ska användaren kunna se alla inlägg
- http:/exampleblog.com/posts/new efterfrågas, så ska användaren kunna skapa ett nytt inlägg

Skapa routes i Express
/* 7 RESTful routes */
app.get("/dogs", function (request, response) {
response.send("Alla hundar visas");
});
app.get("/dogs/new", function (request, response) {
response.send("Visa formulär för att skapa ny hund");
});
app.post("/dogs", function (request, response) {
response.send("Skapa ny hund");
});
Skapa routes i Express
/* 7 RESTful routes fortsättning */
app.get("/dogs/:id", function (request, response) {
response.send("Visa specifik hund");
});
app.get("/dogs/:id/edit", function (request, response) {
response.send("Visa formulär för att uppdatera specifik hund");
});
app.put("/dogs/:id", function (request, response) {
response.send("Uppdatera specifik hund");
});
app.delete("/dogs/:id", function (request, response) {
response.send("Ta bort spcifik hund");
});
Testa ett API med programmet POSTMAN

Postman är som en webbläsare där bara datat som skickas visas. Det är bra för att verifiera att alla endpoints och HTTP-metoder verkligen skickar data eller tar met data.
Miljövariabler
Vi behöver hantera variabler som är beroende på vilken utvecklingsmiljö programmet körs på, eller inställningar på servern.
Dessa variabler som exempelvis port, databasuppkoppling, databasnamn, användarnam, lösenord, m. fl., kallas för miljövariabler (eng. environment variables) och behöver hanteras separat och vara åtskilda från applikationen (exempelvis i egen fil)
D.v.s en vacker dag vill vi drifta vår applikation från att köra lokalt till live på internet :-)
Mongoose
Mongoose är ett bibliotek som sköter databashantering för MongoDB på Node.js
Det är Mongoose funktioner vi kommer använda för databasuppkoppling, skapa modell för våra inlägg, samt CRUD-funktionerna för databashantering
Som templatemotor ska vi använda JavaScript templating (EJS) vilken hjälper oss att rendera HTML-sidor med dynamisk information från JavaScript. D.v.s med en templatemotor kan vi generera delar av HTML-koden och skriva ut innehåll från variabler i JavaScript, så att sidornas innehåll blir dynamiskt.
Templatemotor
Det finns även andra templatemotorer som Pug (https://pugjs.org/) och Handlebars (https://handlebarsjs.com/)
Fördjupning
- Om Node-js och NPM http://www.tjejerkodar.se/blogg/vad-ar-node-js/
- Asynkron vs synkron Javascript https://webbling.se/index.php/Introduktion_till_asynkron_programmering , https://xn--zta-qla.com/sv/blog/asynkrona_funktioner.htm
- Om Express och EJS hhttps://dbwebb.se/kunskap/grunderna-i-express-med-nodejs#om
Svenska
Engelska
7. Authentisering och Säkerhet
Att kunna
- Sessions
- Cookies
- Att det finns olika authentiseringstrategier: Session-baserad och Token-baserad
- Kryptering av lösenord
- Sårbarheter: Brute Force Attacks, Cross-site-scripting (XSS), SQL/NoSQL Injektioner
- HTTPS
HTTP Sessioner
HTTP är ett protokoll som är s.k "stateless". Klienten måste upprätthålla en ny anslutning till servern vid ny förfrågan och därmed finns det inget sätt att hålla reda på status, inloggningstid etc från den klient som är ansluten. D.v.s för varje gång man ansluter till servern måste man tala om för servern vem man är :-). Den "minns" inte det!
Problemet
Istället för att varje gång ange användarnamn, lösenord eller annan information vid besök på en sida så kan webbläsaren spara den informationen. Authentiseringsuppgifterna ges alltså till servern när man authentiserar sig. Servern skickar tillbaka informationen om att man är authentiserad (session-id) till webbläsaren. För varje ny anslutning till servern skickas den informationen från webbläsaren så att servern nu vet vem man är :-)
Lösning

Text
Idén kring sessioner
Hur kan man tekniskt använda sig an HTTP sessioner?
Jo, med Cookies 🍪
En cookie är data (text) som kan skickas mellan server och klient över HTTP protokollet och kan lagras i webbläsaren.
Klient (webbläsare)
Server
Cookie

HTTP-protokollet har två delar. Header och Body.
Skapa en cookie



Läsa en cookie
Cookies skickas över HTTP och sparas i webbläsaren
Authentisering med HTTP Sessioner (m.h.a cookies)
Detta är autentiseringsstrategin bakom Passport-Local och att vi använder paketet client-sessions. D.v.s det vi använder oss av på bloggen.

Authentiseringsstrategi: Använda tokens
- Behöver inte sessioner utan användarinformationen sparas i en s.k access token som utgår efter viss tid.
- JSON Web Token (JWT) har en bred användning och är en öppen standard https://jwt.io/
- Säkrast att spara denna token i HTTPonly cookie (är även möjligt i webbläsarens egna lagring: Local storage)
En JWT token har olika delar i avkodningen
Du behöver inte förstå de olika delarna, bara ett en token uppdelad i olika delar för säkersskäl!


Hur JSON Web Token (JWT) authentisering fungerar
FÖRDJUPNING: Du behöver inte kunna detta exakt till hemprovet.
Hotbild: Brute Force Attacks
En brute-force-attack är en metod för att systematiskt gissa ett lösenord genom att testa alla möjliga tecken i alla möjliga positioner. Angriparen försöker inte vara listig och endast testa vanliga lösenord som ”password”, skippa komplexa lösenord eller endast testa vanliga sätt för att göra lösenord unika (som ”secret01”, ”secret02” osv). Utan angriparen testar allt – därav namnet brute-force-attack. Kan angriparen genomföra den här typen av attack utan att några motåtgärder sätts in, så kommer angriparen till slut få fram lösenordet.
Skydda sig mot Brute Force Attacker
- Begränsa antalet inloggningsförsök
- Spärra kontot när ett misslyckad försök skett
- Använda Captcha "jag är ingen robot"
- Kryptera lösenorden i databasen
Webbplatsägarens ansvar
- Välja långa och svårgissade lösenord
- Byt lösenordet regelbundet
Enskilde användarens ansvar
Kryptering av lösenord
SPARA ALDRIG OKRYPTERADE LÖSENORD I DATABASEN
En hashfunktion är så kallad envägskryptering, vilket betyder att det inte går att återskapa originaldatat från den krypterade (eller hashade) strängen. Det finns många olika hasfunktioner, mer eller mindre avancerade och tar olika lång tid att kryptera. md5, sha256, scrypt, argon2. Den som är vanlig och rekommenderas nu är bcrypt.
Problemet med att enbart hasha lösenordet är att en eventuell hacker då kan skapa en databas som innehåller hashvärden av alla ord i en ordlista, och om inte det skulle räcka för att knäcka lösenord, så kan en hacker generera alla kombinationer upp till n tecken [a-zA-Z0-9] samt diverse icke alfanumeriska tecken. Därför bör man lägga till ett salt som är samma för alla användare. Saltet bör vara långt, gärna över 20 tecken och ha samma krav som ett vanligt lösenord. Alltså bestå av siffror och icke alfanumeriska tecken.
Kryptering av lösenord

Hur Passport-Local gör detta åt oss! Det är inte så svårt att göra på egen hand, använd gärna paketet bcrypt
Vår hashade lösenord
Saltet
Hotbild: Cross-Site-Scripting (XSS)
Från Wikipedia_
"Cross site scripting, XSS, är ett datorrelaterat säkerhetsproblem. XSS-säkerhetsbrister kan exempelvis användas till att kapa inloggningar genom att stjäla webbkakor eller för att modifiera en webbsidas utseende och funktionalitet.
Ett exempel på hur XSS kan modifiera en sidas utseende vore om ett formulärsfält där det är meningen att text ska skrivas inte är skyddat mot HTML-kod. Då kan användaren lägga in stora bilder eller ramar som tar upp plats och förstör utseendet på sidan. Även länkar till skadliga sidor kan då planteras där.
XSS kan också användas för att stjäla information från andra användare. Exempelvis kan vi tänka oss en webbplats där man kan skicka meddelanden till varandra. Om sajten inte är skyddad mot XSS så kan användaren X skicka ett meddelande till användare Y och få honom att klicka på en länk som via javascript automatiskt skickar hemlig information om användaren Y till användaren X. Med den informationen kan exempelvis användare X logga in som användare Y."
Exempel: Cross-Site-Scripting (XSS)

Skydda sig mot Cross-Site-Scripting (XSS)
Viktigt att granska och rensa indata på skadlig kod. Exempelvis från att ändra "farliga" tecken som finns i körbara skript till "ofarliga" tecken. Detta kan man göra på olika sätt. Man kan också validera så att endast vissa värden är möjliga.
Hotbild: SQL-injektioner (också NoSQL-injektioner)
SQL-injektioner är ett vanligt säkerhetsproblem på webbsidor. Det uppstår genom att okontrollerad data skickas direkt in i en SQL-fråga. På så sätt ändras SQL-anropets ursprungliga funktionalitet till något annat. En SQL-injektion är ett säkerhetshål som kan uttnyttjas på många olika sätt. Databaser kan raderas, lösenord stjälas o.s.v
Skydda sig mot SQL/NoSQL-injektioner
Granska och rensa data så att skadliga databasfunktioner inte kan köras. Det brukar vara inbyggt i ramverken. Ex att använda Mongoose för NoSQL är ett bra skydd.
Avända HTTPS
HTTPS gör att webbkommunikation sker genom en privat och skyddad kanal över internet. En webbplats bör alltid använda HTTPS. Särskilt om man har formulär eller visar upp innehåll som är unik för respektive användare.
Det extra S:et i HTTPS står för secure. Det är alltså en säkrare variant av HTTP. I grunden fungerar de två protokollen på liknande sätt, men med en fundamental skillnad: över HTTP-protokollet krypteras informationen som skickas mellan klient och server med SSL (Secure Socket Layer)
Fördjupning
- Om sessioner och kakor
- Om kakor (cookies) https://sv.wikipedia.org/wiki/Webbkaka
- Om kryptering och salt https://it-ord.idg.se/ord/salt/
- Om XSS https://www.sentor.se/kunskapsbank-it-sakerhet/appsakerhet/vad-innebar-cross-site-scripting-xss/ https://www.xn--itskerhet-x2a.com/cross-site-scripting/
- Bra video om authentisering allmänt och specifikt för Node.js https://www.youtube.com/watch?v=j8Yxff6L_po
- Om sessioner, cookies och tokens https://www.youtube.com/watch?v=T4Df5_cojAs&feature=emb_rel_pause
- JSON Web token https://en.wikipedia.org/wiki/JSON_Web_Token
- Hur SQL Injektioner fungerar https://www.w3schools.com/sql/sql_injection.asp
Svenska
Engelska
Instuderingsmaterial till hemprov
By Sandra Larsson
Instuderingsmaterial till hemprov
Webbserverprogrammering 1
- 232