De back-end is het hart van je web-applicatie. De server verwerkt en bewaart alle informatie op één plek, waardoor meerdere clients van dezelfde data gebruik kunnen maken. De applicatie biedt de mogelijkheid tot het beheren van de content met een CMS.
Informatie moet op een veilige manier opgeslagen worden en toegankelijk zijn. Onderdelen als authenticatie en autorisatie, hashing en controle van de data zijn enkele voorbeelden.
Deze basis moet stabiel en robuust zijn, daarom willen we er zo min mogelijk aan veranderen. Bij het uitwerken van de code is het belangrijk dat er nagedacht wordt over de kwaliteit van de code. Het moet voor een programmeur niet te veel tijd kosten om onderdelen toe te voegen of aanpassingen te doen zonder het systeem helemaal aan te passen.
Om tot deze kwaliteit te komen is het belangrijk om een ontwerp te maken waarbij functionaliteiten omgezet worden naar technische uitwerkingen. Hoofdonderdelen worden beschreven, de werking van taken wordt technisch toegelicht en ingewikkelde taken worden onderzocht. De keuze voor de uitwerking wordt verantwoord.
Bij het opzetten van de backend kan gebruik gemaakt worden van onderdelen die al bestaan. Denk aan een bestaande library met tools die te specialistisch zijn om zelf te bouwen of het gebruik van een webservice.
Voor dit building block heb ik het project van CLE2 gebruikt. We moesten een reserveringssysteem maken voor een opdrachtgever. Ik had uiteindelijk een website met een registreer/inlog systeem en een reserveringssysteem.
Alle code van de site staat in deze repository: https://bitbucket.org/athomaster/reserveringssysteem-code/src/master/
Ontwerp
Je hebt vooraf nagedacht over technische keuzes en dit heb je inzichtelijk gemaakt. Je kan je project technisch documenteren middels minimaal twee diagrammen (bijv. ERD, klassendiagram en/of flow chart). Je hebt een bestaande library/API toegevoegd (server side) aan je project om functionaliteiten toe te voegen of om het programmeren makkelijker te maken. Je kunt toelichten waarom dit nuttig is.
Ik heb voordat ik aan het project ben begonnen met mijn opdrachtgever besproken welke functionaliteiten de website moet hebben. De website moest een inlogsysteem, account registratie systeem, een systeem om te kijken of een gebruiker is ingelogd en een reserveringssysteem hebben. Toen ben ik gaan nadenken over hoe die systemen moeten functioneren en heb ik pseudocode geschreven voor de systemen.
Inlogsysteem:
Registratie:
Inlog check:
Reservering:
Voor de tabellen in de database heb ik een ERD gemaakt.
Ook heb ik een flowchart gemaakt voor de registratie.
Om de query’s makkelijker te maken in mijn php code heb ik library ‘meekrodb.2.3.class’ gebruikt. Deze library zorgt ervoor dat je gemakkelijk en overzichtelijk query’s zoals select, update, delete en insert kan gebruiken in je php code. Ook kan je heel makkelijk met je database verbinden.
Hetgeen dat ik vooral heel handig vind aan deze library is dat voor de insert en update query’s is dat ik nu heel overzichtelijk de gegevens als een array kan invullen en het niet op een lange rij als verschillende variabelen staat. Zo kan ik ook makkelijker zien of ik een fout of iets dergelijks maak en hoef ik niet de hele tijd heen en weer te scrollen.
Data
Je hebt een webapplicatie gebouwd op de server die gevoed wordt door een database. De database inhoud kan gelezen, bewerkt en verwijderd worden.
Mijn opdrachtgever had als eis voor de website dat alleen mensen die door hun worden betaald een account mogen hebben en dus reserveringen mochten maken op de site. Hiervoor was dus een registratie systeem en een login systeem nodig (om deze te maken heb ik een tutorial gevolgd op internet).
Om een account te registreren op de site heb ik de pagina ‘register.php’ gemaakt. Deze pagina is alleen toegankelijk voor admins. Op deze pagina is een formulier met invul velden waar informatie van de persoon waar het account voor is ingevuld moet worden.
Wanneer er op registreren wordt gedrukt wordt de code hierboven uitgevoerd. Het formulier gaat naar dezelfde pagina (register.php) en voert dan de code in bestand server.php uit. Daar wordt gekeken of er geen query’s in de velden staat. Daarna wordt er gekeken of alle velden zijn ingevuld zoals het moet, en wordt er gekeken of de wachtwoorden overeen komen. Als dit allemaal niet is komt er een error. Als dit allemaal goed is worden alle gegevens aan de database toegevoegd.
Voor het inloggen heb ik een pagina met een formulier met twee invulvelden gemaakt
Als er op submit wordt gedrukt wordt gecheckt of de velden (goed) zijn ingevuld. Als dit is wordt gecheckt of de email in combinatie met het wachtwoord in de database staat. Als dit het geval is worden een aantal sessies aangemaakt die aan de andere pagina’s aangeven dat je bent ingelogd en je wordt doorgestuurd naar de index.php.
Ook heb ik een pagina gemaakt waar de gebruiker zijn/haar eigen account gegevens kan zien en kan aanpassen, en heb ik een pagina gemaakt waar admins alle accounts kunnen zien en kunnen verwijderen.
Ik gebruik een simpele query om de andere gegevens die bij de email horen op te vragen. Dan zet ik die gegevens in een array, en die array laat ik later in de code in html zetten.
Wanneer op wijzigingen opslaan wordt gedrukt wordt gecheckt of er query’s ingevuld zijn. Als dit niet is wordt gecheckt of alle velden goed zijn ingevuld en of de wachtwoorden overeenkomen. Als dit goed is worden de gegevens in de database geupdate.
Om de informatie in het blok weer te geven gebruik ik een simpele query om de informatie die bij de session email hoort in een array te zetten. Dan gebruik ik een foreach loop om elk account in een blok met alle informatie weer te geven.
Wanneer op de knop account verwijderen wordt gedrukt, gaat de pagina weer naar dezelfde pagina en wordt de code uit delete.php uitgevoerd. Er wordt gekeken welk account verwijderd moet worden dmv het userid en daarna wordt een delete query uitgevoerd die alle gegevens van dat account verwijderd.
Hier is nog een simpele demonstratie van dit allemaal.
Beveiliging
Een deel van je website is niet toegankelijk zonder in te loggen. Je form invoer wordt op de server gevalideerd en is beveiligd tegen xss en sql injecties. Wachtwoorden worden veilig opgeslagen.
Ik heb twee toegangs checkers in mijn systeem zitten.
De eerste checkt of er een session[’email’] is gevuld. Deze wordt gevuld bij inloggen. Als die session niet is gevuld wordt je naar de inlogpagina gestuurd en moet je inloggen. Dit is eigenlijk op alle pagina’s van toepassing.
Ook heb ik een check die kijkt of je admin rechten hebt. Bij het registreren van een account kan geselcteerd worden of dat account admin rechten mag hebben. Bij het inloggen wordt dus ook gekeken of het account admin rechten mag hebben en wordt session[‘admin’] = 1. Op de pagina’s waar alleen admins op mogen komen zit een check die kijkt of de session gelijk is aan 1. Als dat niet is wordt de gebruiker naar account.php gestuurd.
Op pagina’s waar admins en normale gebruikers mogen komen zit een check die naar session[‘admin’] kijkt om een variabele een andere waarde te geven. In de header wordt dan gekeken welke waarde die variabele heeft. Als die waarde 1 is wordt de volledige menubalk laten zien. Als die niet 1 is worden alleen de links laten zien in de menubalk waar iedereen die een account heeft op mag komen.
Voor de xss beveiliging heb ik elke keer als ik gegevens uit de database ophaal en die op de pagina echo de variabele waar ik de informatie in heb gezet in een htmlentitie gezet. Dan wordt er geen javascript uitgevoerd.
Voor beveiliging tegen sql-injecties heb ik elke keer als er in invulvelden gegevens worden ingevoerd en er op submit wordt gedrukt een msqli_treal_escape_string gebruikt om te zorgen dat er geen sql query’s in kunnen komen te staan.