Länkar
Bloggsida:
https://als070414ps.hemsida.eu/webbserver/projekt/p02/index.php
cSource:
https://als070414ps.hemsida.eu/webbserver/source.php?path=projekt/p02
Uppgifter till testanvändare på sidan (om du inte skapar egen):
email: email@mail.com | lösenord: lösenord
Id till testanvändare2 som har några inlägg och bloggar: 7
Idé och syfte
Idén är att jag ska skapa en hemsida där användare kan skapa konton och lägga ut inlägg som andra användare kan se.
Mål
Målet med projektet är att vem som helst ska kunna skapa en profil, en blogg med några inlägg i, som sedan går att dela till andra användare. Dessa andra användare ska även ha möjligheten att kommentera på alla olika inlägg.
Planering
Under projektets gång planerar jag att testa allt och göra ändringar vid behov.
Under projektets gång ska jag:
- Skriva en kravspecifikation
- Göra en första ER-modell på min databas
- Skapa databasen i Redgate data modeller
- Importera databasen till phpMyAdmin (lokalt)
- Påbörja programmering av hemsidan och uppdatera ER-modell samt databas eftersom, utifrån kraven
- Slutföra hemsidan
- Ladda upp kod via fileZilla och skapa databas i oderland via cPanel
- Göra en slutgiltig testning utav hemsidan
Kravspecificering:
Ska:
- Användare ska kunna skapa konton med e-post och lösenord
- Användare ska kunna logga in med sina konton
- Inloggade användare ska kunna skapa bloggar
- I sina bloggar ska användare kunna skapa inlägg
- Inlägg ska kunna ses utav andra användare
- All information ska lagras i en databas
Bör:
- Inlägg ska kunna innehålla olika typer av ”block”. (Text, Bild, Rubrik, Länk)
- Inloggade användare ska kunna kommentera på inlägg
- Flera Användare ska kunna vara delaktiga i en blogg
- Alla en användares bloggar och inlägg ska vara tillgängliga utifrån användares profil.
- Lösenord i databasen ska vara krypterade
- Grundläggande säkerhet, inget användarinmatat ska kunna föra dig till en annan sida
- Användare ska kunna ta bort sina inlägg, kommentarer, bloggar och sin profil.
Kan:
- Sökfunktion – Användare ska kunna söka upp andra användares profiler
- Följ-funktion – De senaste inläggen utav användare man följer ska synas på din ”Hem”- sida.
- Funktion för att byta lösenord
- ”Kom ihåg mig” -funktion
- Möjlighet att redigera inlägg
- Roller med olika tillstånd
- Beskrivningar på bloggar och profiler
ER-Modeller
Första ER_modell:

Första databasmodellen:

Förändringar
Medans jag jobbade med projektet insåg jag att massvis med kolumner i mina tabeller behövdes, tydligast var när jag jobbade med kommentarer och insåg att själva kommentaren inte lagrades någonstans. I post la jag till bl.a `author` och `authorId`, som egentligen är detsamma som `displayName` och `userId` i user. Jag borde kanske egentligen dragit en koppling mellan user och post istället men detta var den enklaste och bästa lösningen för mig när jag kodade.
Slutgiltig ER-modell:

Slutgiltiga databasmodellen:

Säkerhet
SQL-injektion
Jag har ett grundläggande skydd mot SQL-injektion eftersom jag använder mig utav PDO (PHP Data Objects), vilket innebär att SQL-frågan byggs upp före informationen användaren uppger skickas in.
XSS-attack
Jag har även ett skydd mot XSS-attacker. All data som lagras i databasen är exakt det som användaren skrev in, därmed kan användaren skriva farlig javaskript i ett inlägg, men före någonting skrivs ut så konverteras det till vanlig text, så hela javaskriptet skrivs ut, det exekveras inte. konverteringen sker via php-funktionen htmlspecialcharacters.
Kryptering av lösenord
För extra säkerhet krypteras alla lösenord före de läggs in i databasen, detta görs via php-funktionen password_hash. (krypteringen ser ut på följande sätt:
$password = $_POST[”password”] $enc_password=password_hash($password, PASSWORD_DEAFULT);), som just nu använder bcrypt-algoritmen för att hasha lösenordet, men algoritmen kan ändras till starkare i framtiden.
Otillåten åtkomst
Varje gång en sida laddas i projektet så kollar den om sessionen är satt eller inte. Sessionen dör efter 24 minuter (standardvärde) eller efter man loggar ut. Därmed går det inte att logga ut och sedan trycka ”tillbaka” och komma in igen.
Säkerhetsrisk
det finns en säkerhetsrisk som jag är medveten om. Vid filuppladdning så har jag ingen check att det faktiskt är en bild som laddas upp. detta är helt och hållet mitt fel och inte alls bra. Det är på detta vis då filuppladdning är svårt. riktigt svårt faktiskt.
Utvärdering och reflektion
Jag borde börjat jobba med projektet mycket bättre i tid. Allt jag ville ha gjort blev inte gjort, ex. beskrivningar och funktion att ta bort inlägg. Det är egentligen inte jätteviktiga saker men jag hade varit mer nöjd om jag hade fått gjort det. Med det sagt är jag ändå nöjd med projektet, jag fick lära mig mycket nytt om databaser, som jag kanske inte använt helt effektivt under projektet, men vilket ändå fungerade ganska bra. Något som inte heller framgår på sidan är att man inte kan ladda upp bilder större än 2MB.
Problem på vägen
Jag stötte inte på vidare många stora problem, lite allmänna problem med databaser, vilket är naturligt eftersom det är det första projektet där jag faktiskt använder mig utav databaser. Det största problemet jag stötte på var att om man försökte lägga till eller ta bort ett block medans man skriver ett inlägg så försvann allting man redan skrivit. Det gäller fortfarande för bilder men det går nog att lösa ganska enkelt, just nu orkar jag bara inte riktigt med det. Jag löste det genom att göra om ”lägg till” och ”ta bort” – knapparna till submit-knappar som laddar om sidan. Det man redan matat in lagras då i post och läggs in i value-taggarna på de olika input- taggarna.
