Learnit Training

“In deze training krijg je de basis voor PHP, waarmee je een goede eerste opzet voor een systeem kan maken. Je kan de situaties inbrengen die voor je eigen werksituatie relevant zijn en daarmee, binnen de kaders van de opleiding, deze voor jezelf vormgeven.” Training: PHP Programmeren Basis - Beoordeling: 7.9

R. Onderdelinden, Nationale Nederlanden

“Learnit heeft een professionele docent bij ons bedrijf langs gestuurd. De docent heeft de grondbeginselen uitstekend uitgelegd zodat het voor ons team begrijpelijk was wat PHP nu is en hoe je ermee kunt programmeren. Daar het de basiscursus betrof, kunnen we nu eenvoudige dingen zelf doen. Ik kijk uit naar een volledige cursus.” Training: PHP Programmeren Basis - Beoordeling: 8.4

Ronald de Bakker, Gemeente Den Haag

“Prima cursus om de basis van PHP en MySQL onder de knie te krijgen. Voordeel van deze opleiding is dat je direct de effecten van de lesstof ziet terugkomen in de opdrachten met aan het eind een zelfgemaakt loginscherm die de input controleert met datgeen wat je zelf in de database hebt gezet.” Training: PHP Programmeren Basis - Beoordeling: 7.9

Stefan van Duijn, ING

“Afhankelijk van de "fundering" die men al heeft bij de start van deze cursus, stemt men de diepgang van de Basis PHP cursus af op de kandidaten, dat is een zeer krachtig concept, waardoor de cursus kan worden toegespitst op de wensen van de cursist.” Training: PHP Programmeren Basis - Beoordeling: 7.4

M.Dijs, Avans Hogeschool

“De toegevoegde waarde was dat de docent ook nog goed kon helpen bij php problemen buiten de cursus om. hij heeft me goed kunnen helpen zodat ik voor mijn werk goed vooruit kan.” Training: PHP Programmeren Basis - Beoordeling: 7.9

R. van Erp, Van Haandel Metaal

“Een pittige cursus waar je zeker een introductie van PHP krijgt.” Training: PHP Programmeren Basis - Beoordeling: 8.1

E. Conlin, Sisyphus Design

“Erg handig is dat je je eigen tempo kan volgen. Als je vervolgens ergens niet uit komt is de docent aanwezig om het uit te leggen.” Training: PHP Programmeren Basis - Beoordeling: 7.7

B. Coppens, Cartel Autoverhuur B.V.

“Ik heb PHP uit de 'abacadabra'-sfeer kunnen halen, dit duwtje in de rug had ik nodig om er zelf op voort te kunnen borduren.” Training: PHP Programmeren Basis - Beoordeling: 9.3

J.F. Altenburg, Stenden Hogeschool

“Uitstekende training die geheel heeft voldaan aan mijn verwachtingen” Training: PHP Programmeren Basis - Beoordeling: 9

A. Verhoeven, Chromalloy Holland B.V.

“Duidelijke theoretische uitleg en praktische oefeningen om tijdens de les uit te voeren. De trainer van Learnit weet de cursus goed aan te passen op de leerlingen. Een geslaagde PHP-basis meegekregen waar ik veel aan ga hebben in de praktijk. Bedankt.” Training: PHP Programmeren Basis - Beoordeling: 8.2

A. Kreupeling

“De cursus gaat diep in op de vragen die worden gesteld. Ben zeer enthousiast over de docent en de cursus zelf. We hebben veel geleerd en niet alleen over zend, maar ook over andere onderwerpen die tot sprake zijn gekomen voor ons.” Training: PHP Zend Framework 2 Programming - Beoordeling: 8.4

P. Cörvers, Social Deal

“Erg prettige sfeer, geen grote groep cursisten. Locatie gunstig t.o.v. Centraal station Utrecht. Lunch prima verzorgd. Je kan in overleg met de trainer veel sturen in de richting die jij graag wilt.” Training: Javascript Basis - Beoordeling: 8.2

E. Roes, ROC A12 locatie Velp

“Deze training is een aanrader als je nog geen ervaring hebt met java script.” Training: Javascript Basis - Beoordeling: 9.8

P. Anuels, Praclox Software B.V.

“De cursus heeft mij een goede start gegeven om het embedded systeem, waar ik op het bedrijf mee werk, beter te leren begrijpen.” Training: C/C++ Embedded development - Beoordeling: 8

R. van Putten, Rhosonics Analytical BV

“Een zeer goede inleiding tot embedded control.” Training: C/C++ Embedded development - Beoordeling: 8.1

O. Einfinger, FMTC

“Ik vind de cursus zeer geschikt voor wie de wereld van embedded system wil begrijpen. De 4 dagen waren wel nodig, er zijn tal van onderwerpen besproken. Zeer interessant.” Training: C/C++ Embedded development - Beoordeling: 8.2

M. Brinker, Ericsson ETM

“Learnit cursus php vervolg was voor mij erg leerzaam. Vond de cursus opbouw zeer persoonsgebonden en je kon echt werken aan je eigen leerdoelen. Door eigen inbreng heel specifiek ingegaan op wat ik zelf wou leren. Ook de locatie was voor mij ideaal en makkelijk te bereiken. Ze waren bij de cursus ook zeer meegaand in onderwerpen die je zelf in brengt.” Training: PHP Programmeren Vervolg - Beoordeling: 8.1

S. Elings, GemeenteOplossingen

“Er hing een goede sfeer bij Learnit. De begeleiding was professioneel en doordat het niet zo'n massale organisatie is, was er veel aandacht voor niveau en wensen van elke cursist individueel.” Training: PHP Programmeren Vervolg - Beoordeling: 8.6

M. Hartog, BPM Medica

[link]

5 redenen om via PDO met je SQL-database te communiceren

Er zijn verschillende manieren om vanuit PHP met een database te communiceren. Sinds PHP 5.1 is daar een mooie extensie bijgekomen: PHP Database Objects (PDO). Gebruik je nog de ouderwetse mysql_connect() en mysql_query() functies? Hier vijf redenen om over te stappen:

  1. Parameter binding

    Het maken van een query met input van website-bezoekers brengt gevaren met zich mee. Input van bezoekers kan gevaarlijke SQL code bevatten. Als de code onderdeel wordt een query is er sprake van een SQL injectie, een veel voorkomend beveiligingslek.

    Met PDO kun je beter wapenen tegen SQL injecties dankzij 'parameter binding'. PDO biedt de mogelijkheid placeholders te gebruiken in je query. Daarmee voorkom je dat er ongewenste SQL code in de query terechtkomt.

  2. Exploits of a mom

    Randall Munroe, xkcd.com, CC BY-NC 2.5

  3. Transactions

    Wijzigingen in je database staan vaak niet op zichzelf. Vaak vraagt één aanvraag van de bezoeker om wijzigingen in meerdere tabellen. Bij het doen van een bestelling in een webshop moet niet alleen de order worden opgeslagen, maar ook de voorraad worden bijgewerkt.

    Mocht één van deze queries niet goed gaan, bijvoorbeeld omdat de voorraad niet toereikend is, komt de database in een inconsistente toestand. Met transacties kun je in zo'n geval een 'rollBack' doen, waarmee alle wijzigingen in de database sinds het begin van de transactie ongedaan worden gemaakt.

  4. 'Universele' interface

    Met PDO ben je niet gebonden aan één database. Maar liefst twaalf databasesystemen worden ondersteund, waaronder MySql, PostgreSQL, Microsoft SQL Server en Oracle. Dankzij PDO kan je programma er op dezelfde manier mee communiceren. Tijdens het verbinden geef je aan wat voor type database het gaat, daarna kun je ze met dezelfde methoden bevragen.

  5. Verdwijnen van oude functies

    De verouderde mysql_*() functies worden niet meer ondersteund vanaf PHP versie 5.5.0. In de nieuwste versies (vanaf PHP 7.0.0) zijn ze zelfs niet meer opgenomen en dus niet meer te gebruiken.

  6. Object georiënteerd

    PDO is geheel object georiënteerd. Je hebt dus alle voordelen van object georiënteerd programmeren, inclusief exceptions. Met exceptions kun je fouten, zoals verbindingsproblemen, op een elegante manier afhandelen.

Opmerking: Is de PDO Extensie niet beschikbaar op het systeem waar je website op draait, en gebruik je een MySQL database? Stap dan over op mysqli. Minder universeel en elegant dan PDO, maar biedt ook parameter binding, transactions en stored procedures.

[link]

Bezoekerswachtwoorden veilig opslaan met PHP? Gebruik Hashing!

Ook deze week was het weer flink raak: de wachtwoorden van miljoenen internet gebruikers liggen op straat. Terwijl de maker van de website dit eenvoudig hadden kunnen voorkomen.

Wat is het gevaar?

In tegenstelling tot computers zijn mensen niet echt goed in onthouden. Toch moet je overal wachtwoorden voor onthouden. Met als gevolg dat veel mensen één wachtwoord gebruiken voor meerdere websites. Dit brengt een groot beveiligingsrisico met zich mee. Als een wachtwoord uitlekt zijn gelijk alle accounts toegankelijk waar dit wachtwoord is hergebruikt.

Hoe voorkom je diefstal van bezoekerswachtwoorden?

De beste oplossing om wachtwoorden niet te laten stelen, is ze simpelweg niet te bewaren! In plaats daarvan gaan we de hash van het wachtwoord opslaan. Een hashfunctie maakt een wachtwoord onherkenbaar. Op basis van de hash is het onmogelijk de invoer te achterhalen. Een hashfunctie levert altijd hetzelfde resultaat op bij dezelfde invoer. Een sterke hashfunctie zorgt daarbij ook voor dat twee verschillende teksten niet in dezelfde hash resulteren (als dit wel gebeurt is er sprake van een collision). Zelfs als het hackers lukt om een database met hashes te bemachtigen hebben ze nog geen wachtwoorden in handen.

Hoe gebruik je de hash functies van PHP?

Sinds PHP 5.5 is het erg eenvoudig geworden om wachtwoorden te hashen met behulp van de functie password_hash(). Deze functie heeft één verplicht argument: het wachtwoord. Daarbij kan met het tweede argument aangegeven worden welk hashing algoritme er gebruikt moet worden. Als je dit niet opgeeft wordt er standaard gebruik gemaakt van het sterke BCrypt algoritme. Naast hashing voegt deze functie ook een Salt toe, die beschermt tegen Rainbow Tables. Het genereren van de hash gaat als volgt:

 
  $wachtwoord = 'Geheim-Wachtwoord';
  $hash = password_hash($wachtwoord, PASSWORD_BCRYPT);
  echo $hash;

De gegenereerde hash is een tekenreeks van 60 karakters en kan er als volgt uit zien: $2y$10$Se3mLsHueAYTM­3G4Wd9hTuyfzPCRYtafI­mcOSO2U0H4290jPU.SGO. Uit deze hash is het onmogelijk het wachtwoord te achterhalen. Deze hash kun je dus veilig in je database opslaan.

Om te controleren of iemand een correct wachtwoord heeft ingevoerd gebruiken we de functie password_verify(). Deze geven we twee argumenten mee, het wachtwoord dat is ingevoerd bij inloggen en de hash die we hadden opgeslagen.


  $hash = '$2y$10$Se3mLsHueAYTM3G4Wd9hTuyfzPCRYtafImcOSO2U0H4290jPU.SGO';
  $wachtwoord = 'Onzin';

  if (password_verify( $wachtwoord, $hash)){
      echo 'Correct wachtwoord';
  } else {
    echo 'Incorrect wachtwoord';
  }

In dit geval zal het gebruikerswachtwoord een andere hash opleveren dan in onze database stond opgeslagen. Zo kunnen we controleren of het ingevoerde wachtwoord correct is, zonder het originele wachtwoord op te hoeven slaan. Zelfs als een hacker toegang krijgt tot onze database is er geen wachtwoord te vinden.