Security voor websites
In het kader van mijn studie Informatica ben ik de afgelopen periode aan de slag gegaan met het thema safety, security en privacy. Ik vond security altijd al interessant en het is een complex vakgebied waar alle websites mee te maken hebben. Ik heb een artikel geschreven voor school over website security en ik ben benieuwd wat jullie hiervan vinden. Overigens weet ik niet of het in deze categorie thuis hoort.
Je mag niet denken dat jouw website niet waardevol is voor hackers en daarom toch nooit gehackt zal worden. De meerderheid van de inbraken op websites zijn niet om jouw gegevens te stelen of het beschadigen van jouw website, maar in plaats daarvan proberen hackers de server te gebruiken als e-mail relay voor spam of het inrichten van een tijdelijke webserver, normaal om bestanden van een illegale aard te plaatsen. Hacking wordt regelmatig uitgevoerd door geautomatiseerde scripts, geschreven om het internet af te zoeken in een poging om bekende beveiligingsproblemen in de software te benutten.
Er zijn diverse kwetsbaarheden op het internet te vinden. Het internet is van oorsprong ook niet met beveiliging in het achterhoofd opgezet. HTTP is onveilig en kwetsbaar voor spionageaanvallen die, wanneer belangrijke informatie zoals creditcardgegevens en aanmeldingsgegevens worden buitgemaakt, aanvallers toegang geven tot online accounts en gevoelige informatie.
Tijdens mijn onderzoek voor school heb ik het volgende onderzocht: “Hoe kunnen wij websites beveiligen tegen hackers?”. In dit artikel wil ik dit onderwerp centraal brengen door in te gaan op mogelijke beveiligingsproblemen en daarbij ook een aantal veiligheidstips geven. Het doel van dit onderzoek was het uitzoeken van de beveiliging van websites. Ik wil dit aan de hand van verschillende methodes in kaart brengen.
In dit onderzoek wil ik mijn ervaring op het gebied van beveiliging voor websites meegeven. Ik wil wat gaan vertellen over de twee meest voorkomende beveiligings-issues welk zijn vermeld door het Open Web Application Security Project (OWASP). Ook wil ik wat vertellen over het opslaan van wachtwoorden en het wachtwoordbeleid, het op een veilige manier bestanden uploaden en op een veilige manier internetten door SSL.
SQL injectie
Volgens de top 10 van Open Web Application Security Project (OWASP), een open source-project rond computerbeveiliging, is SQL injectie het meest voorkomende probleem op het internet wat betreft het fenomeen datalekken. Bij SQL injectie wordt de invoer van gebruikers op een website niet goed beveiligd, waardoor de aanvaller direct met de database kunnen communiceren en zo toegang tot allerlei vertrouwelijke gegevens krijgen. Dit kan gebeuren door het veranderen van bijvoorbeeld de get in je url of je input door te zeggen, dat je een value geeft maar ondertussen een database tabel leegt of verwijdert.
Een voorbeeld van een SQL injectie is het volgende: "SELECT * FROM table WHERE column = '" + parameter + "';"
De gebruiker typt bijvoorbeeld "Jansen' OR 'a' = 'a" als parameter. Het resulterende statement is dan: "SELECT * FROM table WHERE column = 'Jansen' OR 'a' = 'a';"
Omdat "'a' = 'a'" altijd waar is, voldoet nu elk record aan de gestelde voorwaarde. Hierdoor is het voor een hacker mogelijk om extra informatie op te halen uit de database. Maar dezelfde methode levert ook de mogelijkheden om nieuwe informatie toe te voegen, bestaande informatie te bewerken of informatie te verwijderen.
Aan de hand van escaping kunnen we de injectie tegen gaan. In PHP kan dit met de functie mysql_real_escape_string. Deze functie plaatst een backslash (\) voor specifieke karakters. Het systeem weet dat enkel het letterteken bedoeld wordt, en niet meer de scheidende functie van het afbakenen van gegevens.
Preprared statements
Een andere manier om SQL injectie te voorkomen is door prepared statements te gebruiken, de meeste web talen hebben deze functie en het is eenvoudig te implementeren. Deze prepared statements bieden de programmeur de mogelijkheid tot het creëren van query's die veiliger zijn, waarvan de performance beter is en die eenvoudiger te noteren zijn. Het grote voordeel van prepared statements is dat een bepaalde query op een efficiënte manier vele malen achter elkaar uitgevoerd kan worden.
Bij het gebruik van prepared statements wordt er allereerst een template van de uit te voeren query naar de server gestuurd. Deze wordt door de server gecontroleerd op syntax fouten en uitgevoerd om te controleren of de query logisch is. Vervolgens wordt deze opgeslagen in een speciale buffer.
Databasepermissies
Naast het beveiligen van je query’s is het ook mogelijk om de schade te beperken. Schade kan beperkt worden door alleen de strikt nodige permissies te verlenen.
Cross-site Scripting
Cross-site Scripting (XSS) is een vergelijkbaar probleem, dat opduikt wanneer een aanvaller aan de hand van JavaScript of andere scripting code kwaadaardige code in de website probeert te injecteren. De aanvaller maakt namelijk gebruik van een bug in een website om kwaadaardige code te injecteren in een link naar een website. Wanneer iemand op de link klikt wordt de geïnjecteerde code meegestuurd en kan zo worden uitgevoerd in de browser van de gebruiker, doorgaans met het doel om de aanvaller toe te staan om informatie (bijvoorbeeld cookies) te stelen van de computer van het slachtoffer.
Door middel van XSS kan je cookie gestolen worden waardoor een aanvaller alle gegevens die in het cookie zijn opgeslagen kan bekijken. Via een gestolen cookie waarin een SessieID staat, kan een aanvaller soms ook de sessie van een slachtoffer overnemen. Zo kan het gebeuren dat bijvoorbeeld cookies van administrators, die belangrijke informatie bevatten, uitgelezen kunnen worden. Dat is natuurlijk iets wat je wilt voorkomen.
Wanneer er op een pagina dynamische content (bijvoorbeeld dat van een gebruiker) getoond wordt, is het belangrijk dat dit geen HTML-code kan zijn. Als dit wel het geval is, dan kan de gebruiker HTML-code invoegen, en dat is niet de bedoeling.
Beveiligen tegen XSS
Een manier om een deel van deze aanvallen tegen te gaan is het gebruik maken van bestaande collecties, bestaande uit interfaces en klasses, of functies. Htmlspecialchars is een functie in php voor het bewerken van user-input voordat deze in html wordt getoond. Karakters als '<', '>' en aanhalingstekens worden vervangen door html-entiteiten, zodat ze door de browser niet als onderdeel van de html-code worden verwerkt. Naast een functie als htmlspecialchars kunnen we ook nog gebruik maken van collectie. Een voorbeeld hiervan is HTML Purifier. HTML Purifier wordt gebruikt om de gebruikersinput te filteren op schadelijke invoer.
Bestanden uploaden
Naast bovenstaande problemen is het ook belangrijk om de invoer van bestanden te beveiligen. Het is een groot veiligheidsrisico als gebruikers toestemming hebben om bestanden te uploaden naar een website, zelfs als het alleen gaat om hun avatar te veranderen. Het risico is dat een geüploade bestand, hoe onschuldig het kan lijken, een script kan bevatten die als hij wordt uitgevoerd de beveiliging van de website kan open zetten.
Als je een upload formulier voor bestanden hebt, dan moet je alle bestanden met grote argwaan behandelen. Als je toestaat dat gebruikers foto's uploaden, kun je de bestandsextensie of het MIME-type niet vertrouwen. Dit is om te controleren of het bestand een plaatje is, omdat deze gemakkelijk vervalst kunnen worden. Zelfs het openen van het bestand of het gebruik van functies om de beeldgrootte te controleren zijn niet een volledig bewijs.
Uiteindelijk wil je de gebruikers niet de mogelijkheid geven om een bestand welk zij uploaden te kunnen uitvoeren. Standaard webservers zullen niet proberen om bestanden met afbeelding extensies uit te voeren. Het is echter ook niet aan te raden om alleen te vertrouwen op de controle van de extensie als een bestand met de naam image.jpg.php bekend is om hier doorheen te komen.
Sommige opties zijn om het bestand bij het uploaden te hernoemen om zeker te zijn van de juiste bestandsextensie, of door de permissies te veranderen, bijvoorbeeld chmod 0666 zodat het niet kan worden uitgevoerd. Bij gebruik van *nix kun je een .htaccess bestand (zie hieronder) aanmaken, dat alleen toegang aan bestanden geeft om de eerder genoemde dubbele extensie aanval te voorkomen.
Uiteindelijk is de aanbevolen oplossing om directe toegang tot de geüploade bestanden te voorkomen. Op deze manier, worden alle bestanden geüpload naar de website en opgeslagen in een map buiten de webroot of in de database als een blob. Als de bestanden niet rechtstreeks toegankelijk zijn, moet je een script maken om de bestanden van de persoonlijke map te halen en te weergeven in de browser. De afbeelding tag in HTML ondersteunt een src attribuut. Hierin geven we niet de directe link, welk normaal verwijst naar een afbeelding, maar geven we een bestand mee waar in de afbeelding wordt opgehaald. Hierdoor zal de juiste content-type in de HTTP-header worden weergeven. Voorbeeld:
De meeste hosting providers regelen de server configuratie voor je, maar als jij de hosting van jouw website op jouw eigen server regelt dan wil je zo min mogelijk dingen instellen.
Een aantal beveiligingstips:
Iedereen weet dat het verstandig is om gebruik te maken maken van complexe wachtwoorden, maar dat betekent niet dat mensen dit ook daadwerkelijk doen. Het is cruciaal om sterke wachtwoorden te gebruiken op een website of waar dan ook, maar het is evenzeer ook belangrijk aan te dringen op goede wachtwoorden in de praktijk voor jouw gebruikers om de veiligheid van hun persoonlijke gegevens te beschermen.
Ook al vinden veel gebruikers het misschien niet leuk, toch zal de handhaving van een wachtwoordbeleid helpen om hun informatie op lange termijn te beschermen. Zo is het handig om minimale eisen te stellen aan het wachtwoord zoals een minimum van acht tekens, waaronder een hoofdletter, een cijfer, een speciaal teken en een kleine letter.
Wachtwoorden moeten altijd worden opgeslagen als versleutelde waarden, bij voorkeur met behulp van een enkele hash-algoritme, zoals SHA. Met behulp van deze methode betekent dat wanneer jij jouw gebruikers authenticeert je alleen maar versleutelde waarden hoeft te vergelijken. Voor extra beveiliging van jouw website is het een goed idee om de wachtwoorden te coderen met een salt, een hulpmiddel voor het afleiden van sleutels in cryptografie, per wachtwoord geef je een unieke salt dit zorgt voor extra veilige wachtwoorden.
In het geval dat iemand jouw wachtwoorden probeert te hacken en stelen, dan kan met behulp van hash wachtwoorden de schade beperkt worden, zoals het decoderen van het wachtwoord is dan niet mogelijk. Het beste wat een hacker zou kunnen doen is een brute-force attack. Hierbij worden alle mogelijke combinaties van beschikbare tekens geprobeerd. Wanneer bij het opslaan van het wachtwoord een salt gebruikt wordt, dan is het proces tot kraken van het wachtwoord langzamer. Dit komt omdat elke schatting per wachtwoord + salt afzonderlijk is.
SSL
SSL is een protocol dat wordt gebruikt om veiligheid te bieden via het internet. Het is een goed idee om een veiligheidscertificaat te gebruiken wanneer je jouw persoonlijke gegevens gebruikt tussen de website en een webserver of database. Aanvallers kunnen wanneer de communicatie medium niet veilig is informatie vastleggen en dit gebruiken om toegang te verkrijgen tot jouw gebruikersaccounts en persoonlijke gegevens.
SSL wordt door miljoenen websites gebruikt voor de beveiliging van de internetverbinding, zoals online aankopen, financiële transacties of het versturen van persoonsgegevens. Hierdoor zal alle informatie tijdens het transport vertrouwelijk blijven en niet leesbaar zijn door derden. Websites die over deze beveiliging beschikken zijn herkenbaar aan het gesloten slotje en de https:// in de adresbalk. Zo ziet u dit bijvoorbeeld op de inlogpagina van uw bank. Voor een SSL verbinding is een SSL Certificaat noodzakelijk.
Een SSL Certificaat is bovendien erg belangrijk voor de identiteit van de website en de eigenaar daarvan. Het geeft vertrouwen. Bezoekers van de website weten dat er veilig met hun persoonsgegevens wordt omgegaan en kwaadwillenden dit niet kunnen 'afluisteren'. Door het certificaat weten ze bovendien dat de gegevens alleen bij de eigenaar terecht zullen komen. Ook het belang van een gerenommeerd merk, dat bekend staat om een gedegen validatie en door grote bedrijven wordt gebruikt, mag niet worden onderschat. Door een bekende naam zullen bezoekers de site sneller vertrouwen.
Conclusie
Je kan niet alles voorkomen, maar een groot deel van de problemen ligt al bij de basis. In dit artikel hebben we het over een aantal beveiligingsproblemen gehad en hoe we dit kunnen voorkomen aan de hand van tips. Om antwoord te kunnen geven op de vraag: “Hoe kunnen wij websites beveiligen tegen hackers?”, gaan we kijken naar de verschillende beveiligingsmethodes.
- Bij SQL injecties moeten we onze invoer escapen. Wanneer er niet gekozen is voor escaping is het belangrijk om prepare statements te gebruiken.
- Om Cross-site Scripting te voorkomen moet de invoer gefilterd worden van schadelijke invoer en/of vervangen worden door HTML-entiteiten.
- Beperkingen stellen bij het uploaden van bestanden en het niet weergeven van de oorspronkelijke bestandsnamen en locatie helpt bij het voorkomen van uitvoerbaar bestanden.
- Een goed wachtwoordbeleid zorgt er al voor dat een hacker moeilijker het systeem kan betreden mocht hij een wachtwoord hash tot zijn beschikking hebben.
- Met een SSL certificaat stellen we eind-gebruiker gerust, dat zijn gegevens veilig opgeslagen worden.
Bovenstaande punten zorgen bij elkaar al voor een veiligere website, maar echter zijn er in de praktijk veel meer problemen en is het veel werk om het tegen te gaan. Hier is kennis maar ook hulp voor nodig.
Discussiepunten
In mijn onderzoek heb ik gezocht naar manieren om mijn websites te beveiligen tegen hackers. Hieronder een aantal vragen naar jullie toe:
- Heb jij een beveiliging ingebouwd voor bestanden uploaden? Zo ja op wat voor manier gebruik jij het?
- Wat mis jij voornamelijk nog in dit artikel?
- Maak jij ook gebruik van een wachtwoord beleid? En codeer je deze ook met hashes + salts?
In het kader van mijn studie Informatica ben ik de afgelopen periode aan de slag gegaan met het thema safety, security en privacy. Ik vond security altijd al interessant en het is een complex vakgebied waar alle websites mee te maken hebben. Ik heb een artikel geschreven voor school over website security en ik ben benieuwd wat jullie hiervan vinden. Overigens weet ik niet of het in deze categorie thuis hoort.
Je mag niet denken dat jouw website niet waardevol is voor hackers en daarom toch nooit gehackt zal worden. De meerderheid van de inbraken op websites zijn niet om jouw gegevens te stelen of het beschadigen van jouw website, maar in plaats daarvan proberen hackers de server te gebruiken als e-mail relay voor spam of het inrichten van een tijdelijke webserver, normaal om bestanden van een illegale aard te plaatsen. Hacking wordt regelmatig uitgevoerd door geautomatiseerde scripts, geschreven om het internet af te zoeken in een poging om bekende beveiligingsproblemen in de software te benutten.
Er zijn diverse kwetsbaarheden op het internet te vinden. Het internet is van oorsprong ook niet met beveiliging in het achterhoofd opgezet. HTTP is onveilig en kwetsbaar voor spionageaanvallen die, wanneer belangrijke informatie zoals creditcardgegevens en aanmeldingsgegevens worden buitgemaakt, aanvallers toegang geven tot online accounts en gevoelige informatie.
Tijdens mijn onderzoek voor school heb ik het volgende onderzocht: “Hoe kunnen wij websites beveiligen tegen hackers?”. In dit artikel wil ik dit onderwerp centraal brengen door in te gaan op mogelijke beveiligingsproblemen en daarbij ook een aantal veiligheidstips geven. Het doel van dit onderzoek was het uitzoeken van de beveiliging van websites. Ik wil dit aan de hand van verschillende methodes in kaart brengen.
In dit onderzoek wil ik mijn ervaring op het gebied van beveiliging voor websites meegeven. Ik wil wat gaan vertellen over de twee meest voorkomende beveiligings-issues welk zijn vermeld door het Open Web Application Security Project (OWASP). Ook wil ik wat vertellen over het opslaan van wachtwoorden en het wachtwoordbeleid, het op een veilige manier bestanden uploaden en op een veilige manier internetten door SSL.
SQL injectie
Volgens de top 10 van Open Web Application Security Project (OWASP), een open source-project rond computerbeveiliging, is SQL injectie het meest voorkomende probleem op het internet wat betreft het fenomeen datalekken. Bij SQL injectie wordt de invoer van gebruikers op een website niet goed beveiligd, waardoor de aanvaller direct met de database kunnen communiceren en zo toegang tot allerlei vertrouwelijke gegevens krijgen. Dit kan gebeuren door het veranderen van bijvoorbeeld de get in je url of je input door te zeggen, dat je een value geeft maar ondertussen een database tabel leegt of verwijdert.
Een voorbeeld van een SQL injectie is het volgende: "SELECT * FROM table WHERE column = '" + parameter + "';"
De gebruiker typt bijvoorbeeld "Jansen' OR 'a' = 'a" als parameter. Het resulterende statement is dan: "SELECT * FROM table WHERE column = 'Jansen' OR 'a' = 'a';"
Omdat "'a' = 'a'" altijd waar is, voldoet nu elk record aan de gestelde voorwaarde. Hierdoor is het voor een hacker mogelijk om extra informatie op te halen uit de database. Maar dezelfde methode levert ook de mogelijkheden om nieuwe informatie toe te voegen, bestaande informatie te bewerken of informatie te verwijderen.
Aan de hand van escaping kunnen we de injectie tegen gaan. In PHP kan dit met de functie mysql_real_escape_string. Deze functie plaatst een backslash (\) voor specifieke karakters. Het systeem weet dat enkel het letterteken bedoeld wordt, en niet meer de scheidende functie van het afbakenen van gegevens.
Preprared statements
Een andere manier om SQL injectie te voorkomen is door prepared statements te gebruiken, de meeste web talen hebben deze functie en het is eenvoudig te implementeren. Deze prepared statements bieden de programmeur de mogelijkheid tot het creëren van query's die veiliger zijn, waarvan de performance beter is en die eenvoudiger te noteren zijn. Het grote voordeel van prepared statements is dat een bepaalde query op een efficiënte manier vele malen achter elkaar uitgevoerd kan worden.
Bij het gebruik van prepared statements wordt er allereerst een template van de uit te voeren query naar de server gestuurd. Deze wordt door de server gecontroleerd op syntax fouten en uitgevoerd om te controleren of de query logisch is. Vervolgens wordt deze opgeslagen in een speciale buffer.
Databasepermissies
Naast het beveiligen van je query’s is het ook mogelijk om de schade te beperken. Schade kan beperkt worden door alleen de strikt nodige permissies te verlenen.
Cross-site Scripting
Cross-site Scripting (XSS) is een vergelijkbaar probleem, dat opduikt wanneer een aanvaller aan de hand van JavaScript of andere scripting code kwaadaardige code in de website probeert te injecteren. De aanvaller maakt namelijk gebruik van een bug in een website om kwaadaardige code te injecteren in een link naar een website. Wanneer iemand op de link klikt wordt de geïnjecteerde code meegestuurd en kan zo worden uitgevoerd in de browser van de gebruiker, doorgaans met het doel om de aanvaller toe te staan om informatie (bijvoorbeeld cookies) te stelen van de computer van het slachtoffer.
Door middel van XSS kan je cookie gestolen worden waardoor een aanvaller alle gegevens die in het cookie zijn opgeslagen kan bekijken. Via een gestolen cookie waarin een SessieID staat, kan een aanvaller soms ook de sessie van een slachtoffer overnemen. Zo kan het gebeuren dat bijvoorbeeld cookies van administrators, die belangrijke informatie bevatten, uitgelezen kunnen worden. Dat is natuurlijk iets wat je wilt voorkomen.
Wanneer er op een pagina dynamische content (bijvoorbeeld dat van een gebruiker) getoond wordt, is het belangrijk dat dit geen HTML-code kan zijn. Als dit wel het geval is, dan kan de gebruiker HTML-code invoegen, en dat is niet de bedoeling.
Beveiligen tegen XSS
Een manier om een deel van deze aanvallen tegen te gaan is het gebruik maken van bestaande collecties, bestaande uit interfaces en klasses, of functies. Htmlspecialchars is een functie in php voor het bewerken van user-input voordat deze in html wordt getoond. Karakters als '<', '>' en aanhalingstekens worden vervangen door html-entiteiten, zodat ze door de browser niet als onderdeel van de html-code worden verwerkt. Naast een functie als htmlspecialchars kunnen we ook nog gebruik maken van collectie. Een voorbeeld hiervan is HTML Purifier. HTML Purifier wordt gebruikt om de gebruikersinput te filteren op schadelijke invoer.
Bestanden uploaden
Naast bovenstaande problemen is het ook belangrijk om de invoer van bestanden te beveiligen. Het is een groot veiligheidsrisico als gebruikers toestemming hebben om bestanden te uploaden naar een website, zelfs als het alleen gaat om hun avatar te veranderen. Het risico is dat een geüploade bestand, hoe onschuldig het kan lijken, een script kan bevatten die als hij wordt uitgevoerd de beveiliging van de website kan open zetten.
Als je een upload formulier voor bestanden hebt, dan moet je alle bestanden met grote argwaan behandelen. Als je toestaat dat gebruikers foto's uploaden, kun je de bestandsextensie of het MIME-type niet vertrouwen. Dit is om te controleren of het bestand een plaatje is, omdat deze gemakkelijk vervalst kunnen worden. Zelfs het openen van het bestand of het gebruik van functies om de beeldgrootte te controleren zijn niet een volledig bewijs.
Uiteindelijk wil je de gebruikers niet de mogelijkheid geven om een bestand welk zij uploaden te kunnen uitvoeren. Standaard webservers zullen niet proberen om bestanden met afbeelding extensies uit te voeren. Het is echter ook niet aan te raden om alleen te vertrouwen op de controle van de extensie als een bestand met de naam image.jpg.php bekend is om hier doorheen te komen.
Sommige opties zijn om het bestand bij het uploaden te hernoemen om zeker te zijn van de juiste bestandsextensie, of door de permissies te veranderen, bijvoorbeeld chmod 0666 zodat het niet kan worden uitgevoerd. Bij gebruik van *nix kun je een .htaccess bestand (zie hieronder) aanmaken, dat alleen toegang aan bestanden geeft om de eerder genoemde dubbele extensie aanval te voorkomen.
code:
1
2
3
4
5
| deny from all <Files ~ "^\w+\.(gif|jpe?g|png)$"> order deny,allow allow from all </Files> |
Uiteindelijk is de aanbevolen oplossing om directe toegang tot de geüploade bestanden te voorkomen. Op deze manier, worden alle bestanden geüpload naar de website en opgeslagen in een map buiten de webroot of in de database als een blob. Als de bestanden niet rechtstreeks toegankelijk zijn, moet je een script maken om de bestanden van de persoonlijke map te halen en te weergeven in de browser. De afbeelding tag in HTML ondersteunt een src attribuut. Hierin geven we niet de directe link, welk normaal verwijst naar een afbeelding, maar geven we een bestand mee waar in de afbeelding wordt opgehaald. Hierdoor zal de juiste content-type in de HTTP-header worden weergeven. Voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
| <img src="viewFile.php?id=1234" /> <?php // viewFile.php // Fetch filename from database based on $_GET["id"] … header('Content-Type: image/gif'); readfile('images/uploads/'. $fileName); ?> |
De meeste hosting providers regelen de server configuratie voor je, maar als jij de hosting van jouw website op jouw eigen server regelt dan wil je zo min mogelijk dingen instellen.
Een aantal beveiligingstips:
- Zorg ervoor dat je de firewall instelt, en blokkeer alle niet essentiële poorten. Indien mogelijk alleen toegang geven tot poort 80 en 443 voor de buitenwereld.
- Mocht je bestanden willen uploaden via een file transfer protocol (FTP) dan is het verstandig om alleen gebruik te maken van veilige transport methodes zoals SFTP of SSH.
- Laat de database op een andere server draaien dan de webserver. Door dit te doen is de database server niet direct toegankelijk vanaf de buitenwereld en kan alleen de webserver intern toegang krijgen. Hierdoor verklein je de kans tot het blootstellen van alle gegevens.
Iedereen weet dat het verstandig is om gebruik te maken maken van complexe wachtwoorden, maar dat betekent niet dat mensen dit ook daadwerkelijk doen. Het is cruciaal om sterke wachtwoorden te gebruiken op een website of waar dan ook, maar het is evenzeer ook belangrijk aan te dringen op goede wachtwoorden in de praktijk voor jouw gebruikers om de veiligheid van hun persoonlijke gegevens te beschermen.
Ook al vinden veel gebruikers het misschien niet leuk, toch zal de handhaving van een wachtwoordbeleid helpen om hun informatie op lange termijn te beschermen. Zo is het handig om minimale eisen te stellen aan het wachtwoord zoals een minimum van acht tekens, waaronder een hoofdletter, een cijfer, een speciaal teken en een kleine letter.
Wachtwoorden moeten altijd worden opgeslagen als versleutelde waarden, bij voorkeur met behulp van een enkele hash-algoritme, zoals SHA. Met behulp van deze methode betekent dat wanneer jij jouw gebruikers authenticeert je alleen maar versleutelde waarden hoeft te vergelijken. Voor extra beveiliging van jouw website is het een goed idee om de wachtwoorden te coderen met een salt, een hulpmiddel voor het afleiden van sleutels in cryptografie, per wachtwoord geef je een unieke salt dit zorgt voor extra veilige wachtwoorden.
In het geval dat iemand jouw wachtwoorden probeert te hacken en stelen, dan kan met behulp van hash wachtwoorden de schade beperkt worden, zoals het decoderen van het wachtwoord is dan niet mogelijk. Het beste wat een hacker zou kunnen doen is een brute-force attack. Hierbij worden alle mogelijke combinaties van beschikbare tekens geprobeerd. Wanneer bij het opslaan van het wachtwoord een salt gebruikt wordt, dan is het proces tot kraken van het wachtwoord langzamer. Dit komt omdat elke schatting per wachtwoord + salt afzonderlijk is.
SSL
SSL is een protocol dat wordt gebruikt om veiligheid te bieden via het internet. Het is een goed idee om een veiligheidscertificaat te gebruiken wanneer je jouw persoonlijke gegevens gebruikt tussen de website en een webserver of database. Aanvallers kunnen wanneer de communicatie medium niet veilig is informatie vastleggen en dit gebruiken om toegang te verkrijgen tot jouw gebruikersaccounts en persoonlijke gegevens.
SSL wordt door miljoenen websites gebruikt voor de beveiliging van de internetverbinding, zoals online aankopen, financiële transacties of het versturen van persoonsgegevens. Hierdoor zal alle informatie tijdens het transport vertrouwelijk blijven en niet leesbaar zijn door derden. Websites die over deze beveiliging beschikken zijn herkenbaar aan het gesloten slotje en de https:// in de adresbalk. Zo ziet u dit bijvoorbeeld op de inlogpagina van uw bank. Voor een SSL verbinding is een SSL Certificaat noodzakelijk.
Een SSL Certificaat is bovendien erg belangrijk voor de identiteit van de website en de eigenaar daarvan. Het geeft vertrouwen. Bezoekers van de website weten dat er veilig met hun persoonsgegevens wordt omgegaan en kwaadwillenden dit niet kunnen 'afluisteren'. Door het certificaat weten ze bovendien dat de gegevens alleen bij de eigenaar terecht zullen komen. Ook het belang van een gerenommeerd merk, dat bekend staat om een gedegen validatie en door grote bedrijven wordt gebruikt, mag niet worden onderschat. Door een bekende naam zullen bezoekers de site sneller vertrouwen.
Conclusie
Je kan niet alles voorkomen, maar een groot deel van de problemen ligt al bij de basis. In dit artikel hebben we het over een aantal beveiligingsproblemen gehad en hoe we dit kunnen voorkomen aan de hand van tips. Om antwoord te kunnen geven op de vraag: “Hoe kunnen wij websites beveiligen tegen hackers?”, gaan we kijken naar de verschillende beveiligingsmethodes.
- Bij SQL injecties moeten we onze invoer escapen. Wanneer er niet gekozen is voor escaping is het belangrijk om prepare statements te gebruiken.
- Om Cross-site Scripting te voorkomen moet de invoer gefilterd worden van schadelijke invoer en/of vervangen worden door HTML-entiteiten.
- Beperkingen stellen bij het uploaden van bestanden en het niet weergeven van de oorspronkelijke bestandsnamen en locatie helpt bij het voorkomen van uitvoerbaar bestanden.
- Een goed wachtwoordbeleid zorgt er al voor dat een hacker moeilijker het systeem kan betreden mocht hij een wachtwoord hash tot zijn beschikking hebben.
- Met een SSL certificaat stellen we eind-gebruiker gerust, dat zijn gegevens veilig opgeslagen worden.
Bovenstaande punten zorgen bij elkaar al voor een veiligere website, maar echter zijn er in de praktijk veel meer problemen en is het veel werk om het tegen te gaan. Hier is kennis maar ook hulp voor nodig.
Discussiepunten
In mijn onderzoek heb ik gezocht naar manieren om mijn websites te beveiligen tegen hackers. Hieronder een aantal vragen naar jullie toe:
- Heb jij een beveiliging ingebouwd voor bestanden uploaden? Zo ja op wat voor manier gebruik jij het?
- Wat mis jij voornamelijk nog in dit artikel?
- Maak jij ook gebruik van een wachtwoord beleid? En codeer je deze ook met hashes + salts?