WordCamp 2016 - PHP7 & 7.1 en Ten tips in ten minutes

Door op | in Weblog

De meeste presentaties op WordCamp duren maximaal 30 minuten. Een ideale lengte waarin je, tot op zekere hoogte, diep genoeg op de materie in kan gaan. En kort genoeg om voldoende concentratie te houden op een onderwerp. Maar sommige onderwerpen zijn zo complex, dat 30 minuten te kort is. In plaats daarvan heeft WordCamp een soort van ‘speeddate’ opgezet voor bepaalde onderwerpen. Hiermee maak je kort kennis met een onderwerp, in de hoop dat er interesse bij je wordt gecreëerd om er op een later moment (zelf) dieper op in te gaan.

Dit zijn twee van dit soort speeddates over vrij technische onderwerpen.

What’s New in PHP7 and what to expect in PHP7.1 (Dan Blows)

Op 3 december 2015 werd PHP7 gelanceerd als officiële release. Toch draaien veel servers nog op oudere versies van PHP. Daarom begint de spreker van de ze presentatie, Dan Blows, ook direct met de grote voordelen van versie 7.

Het grootste verschil is snelheid. PHP7 maakt nu gebruik van een Abstract Syntax Tree wat er voor zorgt dat PHP veel minder geheugen hoeft te gaan gebruiken. En de vraag is dan eigenlijk ook direct, hoeveel sneller is het geworden? Dan Blows heeft een aantal tests uitgevoerd en zag dat PHP7 tenminste 2 keer zoveel verzoeken kan verwerken als PHP 5.6. Daarnaast is de response tijd ongeveer een halfkeer kleiner geworden. Namelijk van 1500ms bij PHP 5.6 naar 650ms bij PHP7. Deze tests zijn uitgevoerd op een server met exact dezelfde configuratie, hardware en tests. Met andere woorden, met een simpele update zorg je er voor dat je websites een stuk sneller worden.

Naast deze snelheidswinst zijn er ook nieuwe functionaliteit toegevoegd aan PHP.

Veel bugs in websites die werken met PHP, komen voort uit het feit dat PHP een 'weak typed' programmeertaal is. Dit houdt in dat een stuk data geen vaste data type heeft en dus ook kan veranderen naar een ander data type. Dit proces heet 'Type Juggling'. Een voorbeeld hiervan:


$var = ‘0’; //$var is nu een string.
$var += 2; //$var is nu een integer
[html]

<p>Alhoewel dit voorbeeld geen problemen oplevert, zijn er talloze gevallen waarbij dit wel het geval is. In PHP7 is het nu mogelijk om Strong Typing te gebruiken. In deze ‘modus’ kan een variabele maar één data type zijn en hierbij zal het bovenstaande voorbeeld een fout opleveren. Het grote voordeel hiervan is dat je gedwongen wordt om dieper na te denken over je code.<br>
Om deze Strict Typing aan te zetten zet je bovenaan je PHP bestand declare(strict_types=1);</p>

<p>Met Strict Typing is het nu ook mogelijk om van te voren, per functie of method, aan te geven wat de return type gaat zijn:</p>
[html]
function greet(): string
{
return ‘foo’;
}

En ook belangrijk bij Strict Typing is het testen wat voor soort datatype een variabele is. Deze tests zijn nu een stuk uitgebreider in PHP7.

Een andere verandering is de uitbreiding van operators. De ene is de nul coalescing operator. Met deze operator kun je een waarde toekennen aan een variabele alleen als deze niet bestaat of leeg is.

$username = $_GET['user'] ?? ‘nobody';

In dit geval wordt er gekeken of $_GET[‘user’] bestaat en niet null is. Is dit het geval, dan wordt deze waarde in $username gezet. Wanneer $_GET[‘user’] niet bestaat of null (of leeg) is wordt de waarde ‘nobody’ in $username gezet.

De andere operator is de zogenaamde ‘spaceship’ operator.


echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

Hier wordt het eerste getal met het tweede getal vergeleken. Wanneer deze even groot zijn, wordt er 0 terug gegeven. Wanneer eerste kleiner is dan de tweede, wordt er -1 teruggegeven. En natuurlijk bij de laatste het tegenovergestelde.

Naast de functie uitbreidingen, is het grootste argument om PHP7 te installeren de enorme snelheidswinst. De Wordpress Core is al helemaal klaar voor PHP7 en de meeste plugins ook. Er is eigenlijk geen excuus meer om PHP7 te gaan gebruiken!

WordPress Hardening – Ten tips in ten minutes

De tweede speeddate van deze dag had als titel ‘Wordpress Hardening - Ten tips in ten minutes’. Beveiliging van websites, of dit nu Wordpress is of een ander systeem, is erg belangrijk. Het is ook een van de meer ingewikkelde onderwerpen om in te duiken.

Gelukkig heeft Maurizio Pelizzone, de spreker, tien tips op een rij gezet om de basis beveiliging op te schroeven. Want zoals hij al zegt, alles wat verbonden is met het internet is nooit 100% te beveiligen. Maar er zijn simpele stappen die ondernomen kunnen worden om het hackers en andere kwaadwillende het zo moeilijk mogelijk te maken. Wordpress is één van de meest populaire CMS systemen die beschikbaar is. Dit betekend ook dat het voor hackers het meest interessant is om dit te hacken. De meeste hacks ontstaan door:

Menselijke fouten. Bijvoorbeeld doordat een gebruiker een zwakke combinatie van gebruikersnaam en wachtwoord gebruikt. Exploitatie. Wanneer Wordpress zelf en de plugins niet up-to-date worden gehouden, kan een hacker gebruik maken van beveiligingslekken. Updates voorkomen dat kwaadwillende websites kunnen hacken.

Social Engineering. Hier probeert een hacker het vertrouwen te winnen van een administrator om een account aan te maken en op deze manier zichzelf toegang te verschaffen tot de website.

Brute Force attack. Hierbij wordt er doormiddel van een script een combinatie van gebruikersnamen en wachtwoorden gegenereerd en wordt daarmee geprobeerd in te loggen. Deze is nauw verbonden met het eerste punt, gezien een script ingewikkelde login gegevens veel moeilijker kan gokken.

Schrijf en uitvoerrechten. Als een bepaalde map (bijvoorbeeld de map waarin gebruikers bestanden uploaden) uitvoerrechten heeft, kan een kwaadwillende een uitvoerbaar bestand (bijvoorbeeld PHP) uploaden en deze uitvoeren. Deze lijst lijkt vrij beangstigend met alle punten waarop een website gehackt kan worden. Toch zijn er volgens Maurizio een aantal simpele stappen die genomen kunnen worden om de beveiliging van een website op te schroeven.

Prevent user enumeration. Deze is lastig te vertalen, maar het komt op het volgende neer. In de URL van een pagina staan soms de volgende gegevens: www.website.nl?gebruiker=1. Dit geeft veel informatie voor een hacker, omdat deze precies kan zien welke gebruiker welk nummer is en vervolgens hiermee gegevens kan uitlezen.

Beperk gebruikersrechten. Vraag jezelf af, heeft deze gebruiker (of misschien wel elke gebruiker) daadwerkelijk administrator rechten nodig? Het probleem ligt hier ook weer in menselijke fouten. Want mogelijk hebben de meeste accounts een sterk en uniek wachtwoord, er hoeft maar één gebruiker tussen te zitten die dat niet heeft en een hacker kan zich dan toegang verschaffen.

Verberg je login scherm. Door het login scherm niet op de standaard plek te houden, is er een grote kans dat een geautomatiseerd script niet inlog gegevens kan proberen (brute force). Hetzelfde geldt voor het bestand XMLRPC. Deze is erg gevoelig voor brute force attacks.

Verberg foutmeldingen. De redenering is simpel: hoe meer informatie een hacker heeft over je website, hoe groter de kans wordt dat diegene de website kan hacken.

Beperk PHP uitvoerrechten. Deze is al eerder besproken, maar zorgt er dus voor dat er alleen PHP bestanden op bepaalde plekken uitgevoerd kan worden.

Verklein het aantal plugins. Naast dat het er voor zorgt dat je website over het algemeen sneller is, verkleint het ook de kansen dat een hacker je website kan binnendringen.

Gebruik een sterke combinatie van gebruikersnaam en wachtwoord. Deze is al meerdere keren terug gekomen, maar het is een van de meest simpele manieren om je website beter te beveiligen. Zorg er voor dat een wachtwoord lang, willekeurig en uniek is.

Verberg standaard mappen. Veel standaard mappen in Wordpress zijn interessante doelwitten voor hackers, zoals de wp-uploads map. Door deze te verplaatsen voeg je een extra laag beveiliging toe. Dit wordt ook wel Security through Obscurity genoemd. Het is niet een erg effectieve manier van beveiliging, maar elke beveiligingsstap die je neemt is een goede.

Deze werd door Maurizio ‘Blackhole’ genoemd. Wanneer de inlogpagina verplaatst is, is het slim om een soort van ‘val’ voor hackers neer te zetten. Wanneer een hacker probeert om de oude inlogpagina op te vragen, kun je het IP-adres registeren en deze blokkeren van je website. Zo weer je ook verder hack pogingen van deze persoon of script.<.p>