Seite wählen

NETWAYS Blog

Funktionales Programmieren in PHP

Letztens bin ich auf Github auf ein interessantes Projekt gestoßen, das ich euch nicht vorenthalten möchte. Ihor Burlachenko bietet mit PHP NSPL eine großartige Bibliothek, um alltägliche Programmieraufgaben elegant und funktional zu lösen. Sein Projekt auf Github ist ausführlich dokumentiert und bietet einige Beispiele. Also am besten gleich vorbeischauen oder hier den ersten Eindruck gewinnen:

// Get user ids
// NSPL
$userIds = map(propertyGetter('id'), $users);
// vs PHP
$userIds = array_map(
    function ($user) {
        return $user->id;
    },
    $users
);
// Filter active users
// NSPL
$activeUsers = filter(methodCaller('isActive'), $users);
// vs PHP
$activeUsers = array_filter(
    $users,
    function ($user) {
        return $user->isActive();
    }
);

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

PHP statt Python

Vor nicht all zu langer Zeit wurde in dem Blog Post (Python statt PHP) das Python Flask Microframework kurz vorgestellt und um PHP jetzt nicht im Regen stehen zu lassen, habe ich mich kurz schlau gemacht und was vergleichbares fürs PHP gefunden.
Darf ich vorstellen: Slim, das PHP Microframework
Damit lässt sich recht schnell was einfaches bauen und ist auch recht einfach aufgesetzt, aber schaut selbst:
Install & Download

composer require slim/slim

Programmcode

get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
$app->run();

Das wars auch schon und jetzt viel Spaß damit.

Store passwords like a boss

Wer eine Web-Anwendung, die zwecks Authentifizierung Passwörter speichert, betreibt, der sollte sich – zwecks Sicherheit – Gedanken machen, welche kryptologische Hashfunktion die Anwendung zwecks Speicherung verwendet – schließlich soll bspw. ein eventueller Datenklau nicht gleich die betroffenen Konten vollständig kompromittieren.
Hintergrund: Wer ein Passwort (im Klartext) kennt, der gibt es einfach an der entsprechenden Stelle ein und hat Gewalt über das entsprechende Konto. Wer „nur“ einen Hash des Passwortes hat, muss letztgenanntes erst via Brute-Force mühsam erraten.
Um letztgenannte Methode zusätzlich zu erschweren – und damit weniger attraktiv zu machen, habe ich folgende PHP-Funktion geschrieben:

function hashPasswordLikeABoss($password) {
    if (CRYPT_SHA512 !== 1)
        throw new Exception('This platform doesn\'t support the algorithm `CRYPT_SHA512\'');
    if (false === ($salt = openssl_random_pseudo_bytes(12)))
        throw new Exception('Failed at openssl_random_pseudo_bytes()');
    $salt = sprintf(
        '$6$rounds=%d$%s',
        mt_rand(50000, 100000),
        str_replace('+', '.', base64_encode($salt))
    );
    if ($salt !== substr(
        $hashed = crypt($password, $salt),
        0,
        strlen($salt)
    ))
        throw new Exception('Failed at crypt()');
    return $hashed;
}

Erklärung

Zuerst wird überprüft, ob der zu verwendende SHA512-Algorithmus von der ausführenden Plattform überhaupt unterstützt wird.
Danach werden via openssl_random_pseudo_bytes() 12 zufällige Bytes für den Salt angefordert. (Das kann ebenfalls fehlschlagen.)
Aus denen werden daraufhin 16 – dank base64_encode(). Dieser Funktionsaufruf dient hauptsächlich dazu, nur die für den Salt zulässigen Zeichen a-zA-Z0-9./ übrig zu lassen. Lediglich eventuelle `+‘-Zeichen müssen noch durch Punkte ersetzt werden.
Um noch einen drauf zu setzen, werden zwischen 50000 und 100000 Runden verwendet – statt standartmäßig 5000.
Daraufhin wird der mit sprintf() zusammen gebaute Salt – zusammen mit dem Passwort – an crypt() übergeben und es wird überprüft, ob das Resultat mit dem übergebenen Salt beginnt, was für einen Erfolg spricht.
Zuletzt wird das gehashte Passwort zurückgegeben.

Fazit

Ob das die NSA von irgendwas abhält, kann ich nicht beurteilen – gegen den random (bad) Guy dürfte es aber allemal reichen.

Alexander Klimov
Alexander Klimov
Senior Developer

Alexander hat 2017 seine Ausbildung zum Developer bei NETWAYS erfolgreich abgeschlossen. Als leidenschaftlicher Programmierer und begeisterter Anhänger der Idee freier Software, hat er sich dabei innerhalb kürzester Zeit in die Herzen seiner Kollegen im Development geschlichen. Wäre nicht ausgerechnet Gandhi sein Vorbild, würde er von dort aus daran arbeiten, seinen geheimen Plan, erst die Abteilung und dann die Weltherrschaft an sich zu reißen, zu realisieren - tut er aber nicht. Stattdessen beschreitet er mit der Arbeit an Icinga Web 2 bei uns friedliche Wege.

Reminder für das Icinga Web 2 Webinar

icinga_logo_200x69 Heute einmal früher als sonst möchte ich auf das Icinga Web 2 Webinar aufmerksam machen, welches bereits nächste Woche Dientag, den 25. November 2014 um 10:30 Uhr stattfindet. Wer daran teilnehmen möchte, kann sich natürlich gerne noch registrieren.
Inhalte werden vor allem die Neuerungen seit dem letzten Webinar sein sowie der Installer und verschiedene Module.
Diejenigen die diese Woche an der OSMC und sogar am Workshop ‚Extending Icinga Web 2‘ teilnehmen, haben natürlich während unseres Webinars noch einmal die Gelegenheit sich alles in Ruhe zeigen zu lassen. Wie immer freuen wir uns natürlich auf eine rege Teilnahme und viel konstruktives Feedback.
Wem die Wartezeit zu lange ist, der kann sich natürlich in unserem Webinar-Archiv das ein oder andere vergangene Webinar-Video noch anschauen.
Vielleicht sieht man sich diese Woche auf der Konferenz – ansonsten hört man sich spätestens nächste Woche Dienstag!

Christian Stein
Christian Stein
Manager Sales

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Manager Sales und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

Weekly Snap: OSBConf, PHP & Puppet Enterprise Installer

weekly snap25 – 29 August got excited about the upcoming OSBConf, the new Puppet Enterprise Installer and hash table keys in PHP.
Eva started the week by counting 92 days to the OSMC with Birger Schmidt’s talk on the Flapjack – Monitoring Notification System.
She followed with a reminder to join next month’s Open Source Backup Conf 2014, as Ronny warned readers about the latest wave of zip file spam.
Johannes then showed how to use objects as hash table keys in PHP and Markus introduced the new Puppet Enterprise Installer.