PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for the ‘Server-Software’ Category

OpenSSL: Heartbleed

with 5 comments

heartbleedIhr habt es wahrscheinlich schon alle mitbekommen, es klafft ein riesiges Loch in der häufig eingesetzten OpenSSL-Bibliothek. Webserver, Mailserver, Jabberserver, alles was irgendwie mit Verschlüsselung zu tun hat ist gefährdet. Ist bereits OpenSSL 1.0.1 bis 1.0.1f im Einsatz (das ist die aktuelle Version, seit 2 Jahren verfügbar) steht ein dringendes Update an auf 1.0.1g.

Nicht betroffen sind OpenSSL 1.0.0 und 0.9.8. Nicht betroffen ist auch OpenSSH (wichtiger Unterschied).

Die Lücke hat den Namen „Heartbleed“ bekommen und ist unter der CVE-Nummer CVE-2014-0160 verzeichnet.

Mit Hilfe dieser Lücke können Angreifer auf „die nächsten 64KB“ des Arbeitsspeichers des Prozesses zugreifen. „Die nächsten“ ist aber variabel, je nachdem wo er gerade landet im Arbeitsspeicher, sodass mit einer gewissen Wahrscheinlichkeit auch der private SSL-Schlüssel zu finden ist. Dieser kann nun von außen ausgelesen werden, ohne dass es Logeinträge gibt, also völlig unsichtbar. Mit Hilfe dieses Private Keys kann der Angreifer die aufgezeichneten Trafficdaten der Vergangenheit entschlüsseln, aber auch in Echtzeit in der Zukunft den Traffic entschlüsseln. Er kann außerdem per Man-in-the-Middle anderen vorgaukeln dass sein Server gültig ist für die jeweilige Domain, und damit Phishing betreiben.

Sehr ausführliche Informationen befinden sich auf der Seite heartbleed.com.

Was ist zu tun:
Weiterlesen »

Written by Michael Kliewe

April 9th, 2014 at 4:34 pm

Verteilung der PHP-Versionen, Verbreitung von 5.5

with 6 comments

php5.5Da PHP 5.6 vor der Tür steht (die Beta müßte jeden Tag erscheinen, und die finale Version dann in einigen wenigen Wochen) fragte ich mich wie es mit der PHP 5.5 Verbreitung aussieht, immerhin ist 5.5 bereits am 20. Juni 2013 veröffentlich worden, also vor fast 10 Monaten. Bei mail.de sind wir erst Anfang Februar auf 5.5 umgestiegen, wir nutzen keine Software im Produktivbetrieb kurz nachdem sie released wurde und warten immer ein paar Wochen ab bis die ersten Bugfix-Releases erschienen sind. Wenn Zeit da ist versucht man sich bereits vorher an einer Testumgebung, aber diesmal fehlte die Zeit dies ausführlich machen zu können Mitte des Jahres. Ende des Jahres hatten wir so viel um die Ohren sodass wir erst Anfang dieses Jahres dazu gekommen sind.

Je größer die Umgebung, je umfangreicher die Applikationen und je mehr unterschiedliche Projekte mit externen Abhängigkeiten man hat, desto aufwändiger sind die Tests und die Änderungen die man machen muss. Mit der Version 5.5 gab es kaum Änderungen an Funktionen um die man sich kümmern muss wie man im Migration Guide 5.5 lesen kann. Wichtig sind vor allem die Backward Incompatible Changes, die Deprecated Features und die Changed Functions. Für uns jedoch war die wichtigste Änderung die Einführung des OpCache, der ehemals als Zend Optimizer+ bekannte Bytecode-Cache der nun mit PHP ausgeliefert wird. Wir nutzten bis dahin seit Jahren APC als Bytecode-Cache und auch als lokalen Usercache. Nun wechseln wir weg von APC hin zu OpCache und APCu. Da wir dort die meisten Probleme erwarteten mußten wir dies besonders gut testen, denn in den letzten Monaten sind noch einige kleine Bugs in APCu aufgetreten.

Weiterlesen »

Written by Michael Kliewe

März 30th, 2014 at 2:55 pm

SPDY Support in den Alexa Top 10k

with 3 comments

SPDYEin Großteil der Browser unterstützt es, und fast alle Webserver ebenso: SPDY, der heiße Kandidat für das neue HTTP 2.0 Protokoll. Nach den ersten Tests der SPDY-Implementation in nginx im Juni 2012 habe ich mich gefragt wie verbreitet die Nutzung mittlerweile ist.

Dazu habe ich die Alexa Top 1 Million Liste als CSV heruntergeladen und die Top 10.000 mit Hilfe des Kommandozeilen-Tools spdycat untersucht. Außerdem kann man auf meiner kleine Unterseite eine URL eingeben und sich das Ergebnis anzeigen lassen. Probiert es einfach mal aus:

http://spdyservertest.phpgangsta.de

Weiterlesen »

Written by Michael Kliewe

Januar 24th, 2014 at 3:43 pm

HSTS – HTTP Strict Transport Security: Hast’s schon?

with 4 comments

Secure HTTPSHSTS steht für HTTP Strict Transport Security und ist ein HTTP-Header, den Webseiten nutzen sollten die per HTTPS erreichbar sind.

Wenn ein Benutzer in seinen Browser „webseite.de“ eintippt wird der Browser zuerst versuchen die Webseite unverschlüsselt per HTTP zu erreichen. Genau das ist aber ein Schwachpunkt wenn man sich in einem unsicheren Netzwerk aufhält oder befürchtet, dass irgendwo auf dem Weg zum Zielserver jemand den Request abfangen und verändern könnte (Hallo NSA!), dann sollte man vermeiden eine Webseite unverschlüsselt per HTTP aufzurufen die auch per HTTPS erreichbar ist. Dazu gibt es beispielsweise das Firefox-Addon HTTPS Everywhere, in dem eine Liste eingebaut ist mit Domains, die besser verschlüsselt angesurft werden sollten. Wer nicht auf dieser Liste enthalten ist oder auch Besuchern, die dieses Firefox-Addon nicht installiert haben, mehr Sicherheit bieten möchte, nutzt HSTS.

Fast niemand tippt bei einer Seite, die per HTTPS erreichbar ist, immer brav manuell „https://webseite.de“ ein, die meisten schreiben einfach „webseite.de“ und werden dann vom Webserver automatisch auf die HTTPS-Variante weitergeleitet.

Weiterlesen »

Written by Michael Kliewe

November 25th, 2013 at 10:42 am

SQL richtig schreiben: Ausnutzung von Indizes

with 6 comments

PerformanceUm SQL kommt man in der heutigen Webentwicklung nicht herum, und jeder von uns kann SQL-Queries erstellen. Doch nicht jeder SQL-Query, der das korrekte Ergebnis zurückliefert, ist optimal aus Sicht der Performance. Hier ein kleines Beispiel:

Wir haben folgende Tabelle:

CREATE TABLE IF NOT EXISTS `Login` (
  `LoginId` int(11) NOT NULL AUTO_INCREMENT,
  `UserId` int(11) NOT NULL,
  `LoginDateTime` datetime NOT NULL,
  PRIMARY KEY (`LoginId`)
)

Nehmen wir an in der Tabelle sind 10.000.000 Zeilen. Es sind 10.000 verschiedene UserIds enthalten und jeder User hat im Schnitt 1.000 Logeinträge in den letzten 3 Jahren produziert. Die Tabelle enthält erstmal keine Indizes.

Die Aufgabe ist die folgende: Hole alle Logeinträge die in den letzten 30 Minuten stattgefunden haben.

Die Queries

Weiterlesen »

Written by Michael Kliewe

März 27th, 2013 at 10:10 am