Beveiliging door Django

Met Django kan je heel snel web sites en applicaties realiseren. Hoe blijven deze applicaties veilig, ondanks een snelle ontwikkeltijd? Django biedt ons als ontwikkelaar een goede basis om beveiliging waar te maken. Veel zaken waar programmeurs in andere omgevingen rekening mee moeten houden, worden al direct opgelost door Django. Hiermee wordt de ontwikkelaar ontlast en is de aandacht beschikbaar om goed werk te realiseren.

We geven een overzicht:

  • SSL omzetting - Django kan veilig transport van gegevens afdwingen.
  • Formulier validatie - Django controleert ingestuurde gegevens uitgebreid. Inbraakpogingen door extra keuzeopties toe te voegen zijn niet mogelijk; iets waarmee vorig jaar de Apple Store gehackt was.
  • Goede gegevens verwerking - Django voorkomt dat ingevoerde gegevens per ongeluk behandeld worden als systeem opdrachten ("SQL, XSS injection of remote-code execution"). Dit is de meest gebruikte manier om een site te hacken, veel systemen vermengen gebruikersinvoer uiteindelijk met eigen opdrachten zonder enig onderscheid.
  • Gelaagde opbouw - alle regels en beperkingen, omtrent wat iemand mag zien of mag doen, werken overal door.
  • Formulier beveiliging - door CSRF controle kunnen hackers kunnen niet vanaf een externe site gegevens opsturen.
  • Interne checklist - Django controleer bij livegang of alle instellingen correct en veilig staan.
  • Uitbreidbaar - modules voor het beperken van login pogingen, afdwingen van wachtwoordpolicies of toevoegen van tweetraps authenticatie (met SMS) zijn voorhanden.

Django wordt door veel ontwikkelaars onderhouden, die gezamen meer zien dan ieder voor zich. Door de samenwerking zijn veel kleine details op orde:

  • Clickjacking - de pagina's zijn beschermt tegen externe sites die als overlay werken.
  • Cookies - scripts kunnen sessie cookies niet uitlezen.
  • HTTP headers - ongeldige aanvragen worden geweigerd.
  • URL validatie - de URL kan niet gemanipuleerd worden, of ongewenst doorverwijzen naar externe sites.
  • Wachtwoorden zijn versleuteld - bij data-lekken kan niemand kan het originele wachtwoord achterhalen! Staat jouw account al op https://haveibeenpwned.com/?
  • Ingebouwde oplossingen - ontwikkelaars bouwen door op een veilig uitgedacht systeem; permissiebeheer, emails versturen en authenticatie zijn allemaal veilig uitgewerkt.
  • Geen informatielekken - bij foutmeldingen zal Django geen informatie prijsgeven waar aanvallers iets uit kunnen leren.

Uiteraard zijn er nog meer mogelijkheden waar programmeurs wel op moeten letten. Door de basis op orde te hebben, is het veel makkelijker om web sites daarop te controleren.

Veiligheid voorop

Voor de veiligheid van je eigen klanten is beveiliging geen keuze, maar een verplichting.
Daarom worden al onze sites tegenwoordig voorzien van een beveiligde verbinding.

Al onze websites zijn zojuist bijgewerkt, om bestendig te zijn tegen de nieuwste beveiligingsrisico's.

Controleer ook je eigen website op:

https://www.ssllabs.com/ssltest/

Verhuisd!

Vanaf April 2015 zijn we gevestigd in het Kantorenhuis Röntgen. Dit mooie historische pand bevind zich aan de rand van het centrum van Apeldoorn. 

Naast andere bedrijven nemen we plaats in dit pand.

De oorspong van Django

Onze websites ontwikkelen we met Django, een framework (raamwerk) waarbinnen snel en doeltreffend websites gemaakt worden. Wat maakt Django zo goed? Dat heeft vooral te maken met de historie.

Deadlines en noodzaak

Django is ontwikkeld bij de online Lawrence Journal-World krant in 2003-2004. Twee web-ontwikkelaars, Simon Willison en Adrian Holovaty, waren zeer ervaren in het vak, maar hekelden de toenmalige tools die beschikbaar waren. Bovendien waren ze gebonden aan de onwijze tijdsdruk van de journalistieke wereld.

Uit noodzaak zijn ze oplossingen gaan ontwikkelen die hun werk makkelijker maakten. Hun ervaring en eerdere pogingingen maakten het verschil - ze wisten heel goed wat ze wilden maken. Goed uitgedachte code en duidelijke scheidingen van ieders verantwoordelijkheid. Geen PHP meer, maar Python werd de ontwikkeltaal. Met dit CMS was het volgende mogelijk: de eerste programmeur bouwde snel datamoddelen, vervolgens kon de redacteur al gegevens invullen - terwijl de andere ontwikkelaar nog bezig was met de presentatie (templates/css) op de website en eventuele backend! Complete applicaties werden soms in dagen of zelfs uren gerealiseerd! Het bleek een gouden combinatie.

Open Source

Midden 2005 werd Django gebruikt op de meeste sites van The World Company. Mede door de populariteit van Ruby on Rails werd besloten om het framework voor iedereen beschikbaar te stellen als Open Source. Dat het team ontzettend geprofiteerd had van de beschikbare Open Source code droeg hier ook aan bij.

Tegenwoordig wordt Django gebruikt op toonaangevende sites, zoals Disqus, Instagram, The Guardian, Mozilla, National Geographic, Pinterest, the Onion en de NASA. Jaarlijks komen ontwikkelaars bij elkaar op de DjangoCon om hun ervaringen te delen, en van elkaar te leren.

Webshops op snelheid

In ons werkveld heb je kant en klare pakketten, en je hebtbouwpakketten. Soms kun je een webshop makkelijk maken met een klant-en-klaar product, maar voor complexere e-commerce vraagstukken wordt dat alleen maar lastig. Dan is zo'n kant-en-klaar oplossing een blok aan het been.

Daarom maken we graag gebruik van Oscar. Een relatief nieuw software pakket met een aantal voordelen:

  • Het werkt veel sneller dan Magento!
  • Alles is aan te passen aan je wensen
  • Productvariaties en andere uitbreidingen zijn in te passen.
  • Goed te koppelen aan de systemen van leveranciers.

Dit is nu toegepast in de websites van WakaWaka, Solar for Syria en Solar for Philippines.
Daarmee werd het mogelijk om aan de eisen te voldoen, o.a.:

  • Meertaligheid
  • Meerdere valuta
  • Producten op meerdere websites tonen.
  • Orders van alle websites centraal verwerken.
  • Orders automatisch doorsturen naar distributeurs.
  • Verzendkosten op regio en gewicht.
  • Selectie van distributeur op regio.

Ofwel, aanrader om iets mee te doen!

Meertaligheid alom

Meertaligheid in een website. Een lastig punt. Tenminste, als je CMS dat nog niet ondersteund. Hier liepen we vorig jaar ook tegenaan. We hadden het al op de planning staan en vroegen onze klanten er ook om.

Een kort onderzoek leerde dat in de Django wereld al diverse pogingen gedaan zijn om meertaligheid te realiseren. Op de DjangoCon Europe 2011 in Amsterdam zei een spreker (Jonas Obrist) ook heel mooi: ik heb X ontwikkeld, maar dat moet je niet meer gebruiken. Vervolgens heb ik met Y een volgende poging gedaan, maar dat moet je niet gebruiken. Ik ben nu met poging 3 bezig om een vertalingen op een fatsoenlijke manier te bouwen, en hopelijk wordt dat wat. Het tekende de complexiteit.

Helaas bleek in 2013 dat ook deze poging (nu genaamd django-hvad) niet toepasbaar was in bestaande systemen. Dat heeft ons er toe gezet om zelf met de ervaringen van onze voorgangers iets nieuws te realiseren. Heel simpel beginnen, en vooral geen complexe technieken gebruiken die integratie konden dwarsbomen. Dit bleek een succes!

Het zou alleen bedoeld zijn voor ons CMS, maar het bleek veel breder inzetbaar te zijn. Inmiddels is dit uitgegroeid tot een eigen Open Source project, django-parler, en wordt dat op diverse plekken gebruikt.

Zo ook voor onze klanten:

En hun reactie? Ze zijn enthousiast! "1 CMS waarin je een overzicht hebt alle talen. Dat heeft Cola-Cola niet eens", aldus Tjebbe Tjebbes van WakaWaka. "Ik heb toen onderzoek gedaan, en zij hebben per land een andere website, en een ander systeem". Als we willen, kunnen we zo een site voor een nieuwe taal realiseren!

Technisch geneuzel, e-mail overzetten

Hoe zet je email over van 1 Gmail account naar een andere? Dat lijkt een onmogelijke opgave. Toch is het best goed te doen, alleen moet je het even weten:

De eindgebruiker versie

  • Je activeert bij Gmail de optie voor IMAP.
  • Je voegt beide e-mail accounts toe aan een ouderwetse desktop email client. (bijvoorbeeld Mozilla Thunderbird)
  • Je sleept de inhoud per map naar de andere account.

Wel nu, wat doe je als je veel mappen hebt, en meerdere accounts wilt samenvoegen?

De techneuten versie

Er is ook een tooltje, die dat heel slim aanpakt. Het kan zelfs vertalingen omzetten (Bijvoorbeeld "Trash" wat in de andere account "Prullenbak" heet). Het kost even wat uitzoekwerk, maar als techneut kun je daar toch wat mee. Hierbij het commando om de email over te zetten van een Nederlandse naar Engelse GMail account:

imapsync --host1 imap.gmail.com --host2 imap.gmail.com --port1 993 --port2 993 --ssl1 --ssl2 --user1 EMAIL1 --user2 EMAIL2 --password1 PASS1 --password2 PASS2  --exclude 'Gmail' --regextrans2 's/Verzonden berichten$/Sent Mail/g' --regextrans2 's/Prullenbak$/Trash/' --regextrans2 's/Concepten$/Drafts/g' --exclude='\[Gmail\]$' --exclude 'Alle berichten' --exclude 'Belangrijk' --exclude 'Met ster'

sim-pel. Nouja, bijna dan. :-)
Deze tool heeft ons in ieder geval een hoop tijd bespaart!

DjangoCon EU 2013

Deze week wordt op DjangoCon Europe 2013 in Warschau gehouden. Er zijn 3 dagen met presentaties gehouden, en daarna 2 dagen samen werken aan het verbeteren van ons geliefde web framework. DjangoCon heeft dit jaar een bijzondere locatie waarop de conferentie plaatsvond:

 

We hebben zelf een korte presentatie gegeven van django-fluent CMS; het CMS wat we gebruiken voor projecten en ook op deze site gebruikt is.

Hier zijn de slides:

Vanaf vandaag is de documentatie van het CMS ook beschikbaar op django-fluent.org!

Goede backups

Backups, misschien wel het meest gehekelde punt in de IT. Dat roept ook een paar vragen op:

  • Is er een backup?
  • Kan je de backup terugzetten?
  • Hoe maak je die backup?

Vraag 2 lijkt een beetje gek om te stellen, maar sta er maar bij stil: als je niets kunt terugzetten, wat heb je dan? Een hoop willekeurige data. Maar geen backup.

Gelukkig bestaan hiervoor een paar handige oplossingen, die ook verschillende zaken kunnen backuppen. De database moet immers los een backup hebben, en alle bestanden van de website ook. Ons doel is simpel:

  • Databases voor iedere dag in de week kunnen terugzetten.
  • De gehele server compleet iedere dag backuppen.
  • Losse bestanden makkelijk uit een backup kunnen halen.

De gehele server zeg je? Ja. Als Apple ons 1 ding geleerd heeft met TimeMachine, is het wel dat je maar beter alles kunt backuppen, in plaats van een beetje. Je weet maar nooit waarvoor je het nodig hebt. Dankzij rsnapshot kan dit ook efficient; zo zijn van iedere dag wijzigingen van de server opgeslagen.

Afsluitend voor de techneuten onder ons, zijn er een paar zaken waar je je in kunt verdiepen: rsyncrsnapshotrdiff-backupduplicity, automysqlbackup en autopostgresqlbackup. Mocht je nog andere oplossingen kennen, dan horen we dat graag!