Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the simple-lightbox domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /www/htdocs/w010b2f5/page_m/wp-includes/functions.php on line 6121

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the advanced-responsive-video-embedder domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /www/htdocs/w010b2f5/page_m/wp-includes/functions.php on line 6121

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501

Deprecated: Use of "parent" in callables is deprecated in /www/htdocs/w010b2f5/page_m/wp-content/plugins/simple-lightbox/includes/class.options.php on line 501
Sicherheit – mkleine.de https://mkleine.de Alles rund um Softwareentwicklung Sat, 12 May 2018 07:36:40 +0000 de hourly 1 fail2ban und mysql 5.7 – Filter funktioniert nicht direkt https://mkleine.de/blog/2017/08/11/fail2ban-und-mysql-5-7-filter-funktioniert-nicht-direkt/ Fri, 11 Aug 2017 21:34:30 +0000 http://mkleine.de/?p=1852 Normalerweise legt man einfach eine neue Datei nach /etc/fail2ban/jail.d/mysql.conf, aktiviert das richtige Jail und schon funktioniert alles. Leider nicht so im Falle von mysql 5.7 – scheinbar hat sich da der Logeintrag etwas geändert. Meine Datei sieht jetzt so aus:

[mysqld-auth]
enabled = true
logpath = /var/log/mysql/error.log

Und den Filter musste ich wie folgt anpassen:

failregex = ^%(__prefix_line)s(\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[Warning\] Access denied for user '\w+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$
            ^%(__prefix_line)s(?:\d+ |\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[\w+\] Access denied for user '[^']+'@'<HOST>'

Die erste Zeile habe ich dabei nicht angefasst, sondern nur die zweite hinzugefügt. Statt einer Warning erscheint bei mySQL 5.7 nur noch „Note“. Der reguläre Ausdruck ist natürlich relativ allgemein, aber funktioniert für mich wunderbar. Endlich werden die ganzen Login-Versuche auf root entsprechend geblockt.

Testen kann man das ganze wie folgt:

fail2ban-regex /var/log/mysql/error.log /etc/fail2ban/filter.d/mysqld-auth.conf

Bei mir sieht die Ausgabe nun so aus:

Lines: 492 lines, 0 ignored, 54 matched, 438 missed [processed in 0.07 sec] 
Missed line(s): too many to print.  Use --print-all-missed to print all 438 lines

Sieht also sehr gut aus!

]]>
Kostenlose PlugIns für Lightroom – It’s a trap! https://mkleine.de/blog/2017/08/10/kostenlose-plugins-fuer-lightroom-its-a-trap/ Thu, 10 Aug 2017 07:46:10 +0000 http://mkleine.de/?p=1850 Gestern Abend habe ich nach einem PlugIn für meine Freundin gesucht, mit welchem Sie schönere Online-Gallerien aus Lightroom exportieren kann, in welchen der Kunde direkt die gewünschten Fotos auswählen und zurückmelden kann. Daraufhin bin ich auf fontoGallery (fonto.pl) gestoßen, was angeblich genau dies tut.

Jetzt hatte ich zwar keine Ahnung wie solche PlugIns aufgebaut sind, aber irgendwie wollte ich dann doch mal genauer drauf schauen. In diesem Fall werden auch einfach nur mit LUA-Script HTML-Dateien zusammengebaut und dann per FTP auf einem Server geschoben. Das ganze Auswählen usw. übernimmt viel zu viel Javascript und den Mailversand dann PHP.

Jetzt bin ich kein Fan davon, irgendwelche PHP-Dateien automatisch auf meinen Server kopieren zu lassen, die dann dort treiben können was sie wollen. Beim genaueren Hinsehen waren in den Dateien zusätzlich irgendwelche mySQL-Funktionen, welche sich versuchen als root mit dem lokalen Server zu verbinden und das schlimmere: Die Mails mit der Auswahl der Fotos wird über einen polnischen SMTP-Server mit irgendeinem dubiosen Script verschickt.

Konfiguration für die SMTP-Server gibt es nur in den Config-Files, aber natürlich nicht auf der Lightroom-Oberfläche. Damit wären die meisten Anwender wahrscheinlich auch überfordert denke ich.

Die Code-Qualität war insgesamt super bescheiden. Alles mögliche auskommentiert, zig includes auf irgendwelche Fallback-Dateien und sehr viel dubioser Code welchen ich mir gar nicht weiter anschauen wollte. Dementsprechend habe ich natürlich auch ein Review im Adobe-Marktplatz hinterlassen.

Das schlimme daran war natürlich, dass die Extension vorher 4,5 von 5 Sterne hatte. Niemand schaut sich das an. Fotografen sind natürlich auch keine Entwickler und es geht meistens nur um das Ergebnis. Umso mehr muss man vorsichtig sein, was für Software man sich in seine Systeme holt. Nur weil auf den ersten Blick erstmal alles funktioniert, weiß man natürlich nicht was im Hintergrund so abläuft.

Also: Installiert nicht irgendwelche Extensions von Marktplätzen. Auch, wenn Sie gut bewertet sind. Das heißt am Ende gar nichts. Und wie würden das Eure Kunden finden, wenn deren Daten nur für eine Online-Gallerie über fremde Server im Ausland gehen, wo man nichtmal die Betreiber kennt?

Ich baue jedenfalls jetzt meine eigene Gallerie für Nadine. Ist am Ende gar nicht so viel Aufwand. Und ich weiß genau was im Hintergrund dann passiert. Ehrliche Software erkennt man am Ende daran, dass sie auf GitHub liegt und jeder dazu eingeladen ist den Quellcode einzusehen.

In diesem Beitrag kann man übrigens „Lightroom“ gegen den Namen einer Software Eurer Wahl tauschen. Für WordPress verhält es sich ganz genauso.

]]>
Sicherheitslücke TC7200 – Benutzerdaten auslesen https://mkleine.de/blog/2014/09/12/sicherheitsluecke-tc7200-benutzerdaten-auslesen/ Fri, 12 Sep 2014 18:09:28 +0000 http://mkleine.de/?p=1277 Dass der TC7200 von Unitymedia kein Wunderwerk der Technik ist, sollte mittlerweile vielen aufgefallen sein. Vielen Funktionen sind rein dekorativ und haben keinerlei Einfluss, wenn diese verändert werden. Unitymedia selbst nimmt sich dieser Problematik nicht an, und weicht aus, sobald man diese Themen anspricht.

Durch ein anderes Thema im Blog wurde ich von einem Leser darauf hingewiesen, dass der TC7200 eine Sicherheitslücke aufweist. Die Gerätekonfiguration kann ohne vorigen Login einfach heruntergeladen werden. Das heißt, dass jeder Benutzer, welcher Teil des Netzwerks ist, auch die Konfiguration herunterladen kann.

Mehr als einen Browser braucht man dazu nicht:

http://192.168.xx.1/goform/system/GatewaySettings.bin

xx ist dabei natürlich durch das jeweilige Netzwerk auszutauschen.

Und wirklich – schon hat man die Konfiguration geladen. Enthalten ist die komplette Konfiguration des Routers. So ist es ein leichtes, das Passwort heraus zu bekommen, denn Benutzername und Passwort zur Gerätekonfiguration stehen am Ende der Datei. Der Angreifer muss sich also nichtmal die Mühe machen, die Dateistruktur genau zu studieren, sondern logt sich einfach selbst in das Backend ein und konfiguriert was er möchte.

Hier ist dringend ein Patch fällig.

Ob die Konfiguration auch von außen geladen werden kann, habe ich nicht probiert. Dazu müsste aber normalerweise Port-Forwarding (Port 80) auf den eigenen Router konfiguriert werden – und das macht ja eigentlich (hoffentlich) niemand.

Und wer weiß, eventuell wird mit einem Firmware-Update auch irgendwann der „Bridge-Modus“ Wirklichkeit, und ist dann mehr als nur pure Dekoration.

]]>
Unitymedia – TC7200 mit eigenem Router betreiben https://mkleine.de/blog/2014/06/05/unitymedia-tc7200-mit-eigenem-router-betreiben/ Thu, 05 Jun 2014 18:52:34 +0000 http://mkleine.de/?p=1156 Vor einiger Zeit habe ich mein Paket bei Unitymedia gewechselt. Bisher hatte ich 3Play mit 32Mbit. Irgendwann habe ich mal ein HD-Paket dazu gebucht (mit CI+ Modul). Da ich das Fernsehen aus dem 3Play nicht mehr nutzte, musste eine andere Lösung her – so war ein Wechsel zu 2Play 100 die beste Wahl. Leider bekommt es Unitymedia nicht hin, dass man 3Play 100 mit einem CI+ Modul nutzt (da muss man immer den Receiver nehmen).

Also habe ich nun zwar zwei Verträge, aber das macht es auch ein wenig individueller. Heute habe ich die neue Hardware angeschlossen und alles funktioniert auch wunderbar. Allerdings möchte ich kein extra WLAN aufspannen, und auch sonst keine Funktionalität des TC7200 von Technicolor nutzen. Dafür habe ich schließlich meinen Apple AirPort Extreme schon sehr lange im Einsatz. Außerdem ist dort alles bereits konfiguriert und ich habe keine Lust alle Geräte im Haushalt umzukonfigurieren.

Der Betrieb geht zwar, aber das erste was mein AirPort zu meckern hatte, war logischerweise, dass zwei verschiedene Geräte im Netz DHCP spielen und Adressen vergeben – das ist einer zu viel und führt in jedem Fall irgendwann zu Problemen. Zum Glück vergeben beide Geräte in unterschiedlichen Netzwerken IPs, sodass es nicht allzu tragisch war.

Im ersten Schritt musste ich also den AirPort auf BridgeMode umstellen. So bekam ich eine IP aus dem Netz des TC7200 (192.168.0.33). An dem Netz erkennt man dann schnell, wie man zur Konfigurationsoberfläche kommt. Einfach einen Browser nehmen und auf http://192.168.0.1/login.asp gehen.

Doch wie lauten die Benutzerdaten für die Verwaltungsoberfläche? Hier war Unitymedia sehr kreativ, und widerspricht damit bestimmt auch irgendwelchen Richtlinien für Routerzugänge. Soweit ich weiß, muss jedes ausgelieferte Gerät einen individuellen Zugang bekommen – die Telekom macht das zum Beispiel auch so. Hier machen wir es uns einfach:

  • Benutzername: admin
  • Passwort: admin

Unitymedia TC7200 Login

Da wären wir also. Als erstes habe ich

  • den DHCP deaktiviert. Das geht unter Grundeinstellung / Lokales Netzwerk (LAN)
  • die Firewall abgeschaltet. Unter Fortgeschritten / Firewall / Firewall-Schutz einfach auf Aus stellen

Nun kann man unter System / Switch Modus (lustige Übersetzung, sollte bestimmt „Modus ändern“ heißen) eigentlich den Router in den Bridge-Mode versetzen. Wenn ich das aber mache, passiert nichts. Ich lande wieder auf derselben Seite und es ist wieder „Router-Modus“ ausgewählt. Egal was ich sonst so einstelle, es wird einfach nicht anders. Wenn ich mir den POST der Form ansehe, passiert nichts, außer eine 302-Weiterleitung auf die vorige Seite. Auch der Versuch, die Form mit jQuery abzusenden hat nichts verändert (ja, hier läuft wirklich jQuery).

Ein Gespräch mit der Hotline (nach 25 Minuten in der Warteschleife) hat auch nichts gebracht, da der „Techniker“ am anderen Ende nichts mit den Wörtern Bridge-Mode oder SNMP (worüber man diesen auch aktivieren könnte) anfangen konnte. Viel mehr hat man mir geraten, für 5€ mehr im Monat, direkt auf eine FRITZ!Box zu wechseln (das wäre dann sicherlich die FRITZ!Box 6360 Cable).

Fazit: Irgendwie läuft das Ganze aus einem unverständlichen Grund nicht. Das heißt, ich kann Port Forwarding momentan nicht nutzen. Somit beschränkt sich meine Hausautomatisierung auf das lokale Netzwerk. Der AirPort Extreme läuft im Bridged Mode (ja, der kann sowas…) und ich habe den DHCP am TC7200 wieder aktiviert und vergebe den gleichen Adressbereich wie am AirPort (einfach, um stress vorzubeugen). Ist doch alles irgendwie Mist. Sobald es was neues gibt, gibt es hier ein Update.

Hier kommt man zu dem offiziellen Beitrag von UPC-Cablecom (was ja eigentlich Unitymedia in der Schweiz sein sollte).

Update 27.06.2014

Im folgenden der Mailverkehr mit Unitymedia. Irgendwie alle nicht besonders kompetent. Problem geschildert und folgende Antwort bekommen:

Sehr geehrter Herr Kleine,

leider ist ein Betrieb des TC7200 als bridge nicht möglich. Auch ein umschalten des Anschluss auf ein anderes Endgerät können wir leider nicht anbieten.

Was soll man dazu sagen? Einfach nicht mit dem Problem beschäftigt. Meine Antwort:

Guten Tag,

wie kommt es dann, dass diese Option in der Firmware enthalten ist? Sind noch mehr Funktionen an diesem entsorgungswürdigen Stück Hardware nur als Deko implementiert?

Komisch ist, dass ihr Schweizer Unternehmen genaustens die nötigen Schritte an dem TC7200 auf der offiziellen Homepage beschreibt. Also muss es gehen!

Ich bin Softwareentwickler und brauche beruflich ein voll funktionsfähigen Internetanschluss ohne Kompromisse. Ein entsprechender Router steht mir bereits zur Verfügung und war jahrelang erfolgreich im Einsatz. Durch die Umstellung auf den TC7200 wurde mein Anschluss extremst abgewertet und ist quasi nurnoch zum Surfen nutzbar.

Daher kann ich die von Ihnen gegebene Antwort so nicht hinnehmen. Als Unternehmen in der Größenordnung können Sie doch nicht einfach die eigentlich guten Anschlüsse durch mieserable Hardware beschneiden und die Kundengeräte (sprich meinen eigenen Router) komplett unbrauchbar machen!

Ich freue mich also auf einen konstruktiven Lösungsvorschlag, abseits von einer per Textbausteinen generierten 0815-Kundensupportmail.

Mit freundlichen Grüßen

Matthias Kleine

Darauf schreibt Unitymedia eine sehr ausführliche Antwort – nicht:

Sehr geehrter Herr Kleine,

leider können wir Ihnen keine Alternative anbieten.

Da mir das etwas zu knapp war, folgende Mail von mir (eigentlich nur ein Forward der vorigen Mail plus folgendem Text):

Siehe unten.

ACHTUNG: Diese Mail enthält technische Fragen – wenn Sie sich nicht im Stande fühlen diese technischen Fragen zu beantworten, leiten Sie die Mail bitte INTERN an einen TECHNIKER weiter. Es muss doch wohl möglich sein, dass man eine kompetente Antwort bekommt.

BITTE GEHEN SIE AUF JEDEN PUNKT EIN.

leider können wir Ihnen keine Alternative anbieten.“ ist keine Antwort.

Viele Grüße

Matthias Kleine

Ich denke, das ist fast Ausweglos…

Hier die Antwort:

Sehr geehrter Herr Kleine,

vielen Dank für Ihre Anfrage.

Leider ist ein Betrieb des TC7200 als Bridge nicht möglich. Auch ein Umschalten des Anschluss auf ein anderes Endgerät können wir leider nicht anbieten.

Kontakt über UPC Cablecom

Da die UPC Cablecom eine Schwestergesellschaft von Unitymedia ist, die die selbe Hardware vertreibt und eine entsprechende Anleitung bereitstellt, wie man den TC7200 in den Bridge-Mode versetzt, wollte ich es mal über diesen Weg probieren. Also fix das Kontaktformular ausgefüllt.

Guten Tag,

ich bin Kunde bei der Deutschen Schwestergesellschaft Unitymedia und brauche dringend Ihre Hilfe.

Seit der Umstellung auf 100MBit/s habe ich kein einfaches Modem mehr bekommen, sondern einen TC7200-Router. Da der Funktionsumfang des Gerätes nicht gerade meinen Wunschvorstellungen entspricht, und ich auch ein eigenes Gerät besitze, würde ich den TC7200 gerne im Bridge-Mode betreiben.

Dazu habe ich folgende Anleitung auf Ihren Seiten gefunden:
https://support.upc-cablecom.ch/app/answers/detail/a_id/6324/kw/bridge

Diese Einstellung existiert zwar, aber lässt sich nicht umstellen (springt jedes Mal nach dem Speichern wieder auf Router-Mode zurück). Der Unitymedia-Support will oder kann mir einfach nicht helfen – die Existenz der Einstellung wird totgeschwiegen und mir versucht zu vermitteln, dass es nicht möglich sei.

Jetzt erhoffe ich mir von Ihnen, dass ich eine kompetentere Antwort erhalte oder einen Tipp, warum sich diese Einstellung bei mir nicht ändern lässt. Generell scheint das Gerät diesen Modus ja zu unterstützten (sonst würden Sie ja keine Anleitung dazu bereitstellen).

Viele Grüße,

Matthias Kleine

Für die Kontaktanfrage muss man etwas schummeln. Die Kundennummer von Unitymedia wird als gültig akzeptiert. Aber die PLZ und Stadt aus Deutschland nicht. Hier habe ich Bern genommen. Die Telefonnummer muss ebenfalls aus der Schweiz sein. Da habe ich einfach die Support-Nummer von UPC Cablecom angegeben. Auf die Antwort ware ich noch – welche hoffentlich per Mail, und nicht per Post verschickt wird.

Update 17.08. – die Antwort:

Sehr geehrter Herr Kleine

Vielen Dank für Ihre Rückmeldung.

Ein Support von der Schweiz aus ist leider nicht möglich. All unsere Tools und auch die Kundendatenbank sind ausschliesslich auf die Schweiz ausgelegt.

Wir bitten Sie um Verständnis.

Freundliche Grüsse

Barbara Henggeler
Kundenberater, upc cablecom

Also, auch kein Fortschritt.

Update 09.09. – Unitymedia-Techniker

Heute hatte ich aus einem anderen Anlass einen Unitymedia-Techniker im Haus. Dort habe ich dieses Thema erneut angesprochen (so von Techniker zu Informatiker). Er hat mir ausdrücklich davon abgeraten, eine Fritz!Box von Unitymedia zu nehmen. Mit diesen Geräten hat AVM wohl nicht mehr sonderlich viel zu tun, und die komplette Software wurde von Unitymedia selbst entwickelt. Für 100Mbit braucht man wohl ein Cisco-Modem. Daher habe ich noch einmal folgende Anfrage gestellt:

Guten Tag,

seit einiger Zeit habe ich Probleme mit meinem TC7200, mehrere Dienste sind nicht mehr verfügbar und nutzbar, da die Hardware einfach schlecht ist.

Aus diesem Anlass, möchte ich Sie bitten, mir ein CISCO-Modem zur Verfügung zu stellen. Gerne bin ich bereit, das Gerät zu kaufen.

Bitte teilen Sie mir die entsprechenden Kosten für das Gerät und den Umstellungsaufwand mit, für welchen ich gerne aufkomme.

Meine Kundennummer lautet: xxxxxxxxxxxxxx

Viele Grüße

Update 17.09. – Social Media Links

Ich habe noch einmal alle Kanäle bei Unitymedia angetriggert (Facebook, Twitter, E-Mail). Bisher relativ erfolglos. Man versucht mir lediglich die Fritzbox (Telefon Komfort) anzubieten, oder einen Wechsel auf ein Business-Paket.

Ich bitte um Likes, Retweets und Kommentare/Antworten. Gemeinsam können wir mehr erreichen.

Update 01.10. – FritzBox ist angekommen

Am letzten Samstag (27.09.) habe ich dann doch mal den Unitymedia-Store aufgesucht. Hier habe ich ein paar Fragen gestellt und es ist sehr wohl durchgesickert, dass der TC7200 ein großes Problem ist und viele Kunden damit auch so ihre Probleme haben. Angeblich arbeitet man sogar an einem neuen Modem – nur weiß niemand ob und wann das wirklich auf den Markt kommt.

Auch hier wurde mir mehrfach zugesichert, dass es keine Cisco-Modems mehr gibt. Zwar beweisen die Kommentare hier das Gegenteil, aber da muss man glaube ich schon sehr lange für telefonieren und zufällig an die richtigen Leute in der Hotline geraten – ansonsten hat man wirklich keine Chance an so ein Modem zu kommen. Keine Ahnung warum die so ungern rausgegeben werden, aber irgendwie wird das mit allen Mitteln vermieden.

Da ich irgendwie kein Bock mehr auf das Ganze Thema habe, habe ich mittlerweile doch die Telefon Komfort Option dazu gebucht – heute ist dazu auch schon eine FritzBox 6360 Cable eingetroffen. Top! Nach einem Anruf bei Unitymedia wurde mir zugesichert, dass das Teil schnellstmöglich freigeschaltet wird (binnen 24 Stunden).

[asa]B00A17VNLM[/asa]

Man muss dazu sagen, dass das Paket normalerweise auch noch 30 Euro Einrichtungsgebühr kostet. Die werden mir aber nun erlassen (theoretisch zumindest – das glaube ich erst, wenn das auch auf keiner Rechnung auftaucht).

Ansonsten habe ich gelernt, dass die Business-Pakete zwar etwas teurer sind, aber auch ohne Probleme von Privatpersonen gebucht werden können. In diesen bekommt man nicht nur eine statische IPv4-Adresse (oder sogar mehrere), sondern auch eine Fritzbox 6360. Damit können also auch die DS-Lite-Probleme von einigen Benutzern gelöst werden.

Update 07.10. – Wieder IPv4

Nach einem kurzen Telefonat mit einem sehr netten Mitarbeiter von Unitymedia, wurde ich heute wieder auf IPv4 umgestellt. Nach einer langen Zeit der Umstellung (Anfang Juni bis Anfang Oktober) bin ich nun wieder auf einem grünen Ast und alles läuft wie gewünscht.

Wenn alles läuft, sollte man kein Upgrade machen.

]]>
Automatische Updates unter WordPress 3.7 (abschalten?) https://mkleine.de/blog/2013/10/29/automatische-updates-unter-wordpress-3-7-abschalten/ Tue, 29 Oct 2013 18:26:44 +0000 http://mkleine.de/?p=802 Das sicher größte Feature von WordPress 3.7 sind die automatischen Updates. In diesem Beitrag möchte ich kurz auf diese eingehen, und erläutern wann sich WordPress automatisch aktualisiert und warum man diese Funktion eventuell abschalten sollte. Grund für den Beitrag sind natürlich meine eigenen Gedanken über dieses Blog, da auch ich eben endlich mal auf Version 3.7 gegangen bin.

Für mich war der erste Grund die Updates abschalten zu wollen, dass ich nicht möchte dass wegen fehlender Kompatibilität zu irgendwelchen PlugIns oder Themes mein Blog nicht mehr erreichbar ist während ich nichts dagegen tun kann und eventuell auch erst sehr spät davon erfahre. Natürlich schließen diese Updates eventuell sehr schwere Sicherheitslücken und von diesem Standpunkt ist es sicherlich auch zu verkraften wenn die Seite durch inkompatible Software mal für ein paar Stunden vom Netz geht. Das Risiko möchte man aber spätestens dann nicht mehr, wenn man etwas mehr Traffic auf der Seite hat. Nun sichert WordPress zwar zu, dass die Updates keine Major-Changes enthalten und, wenn ich ehrlich bin, ist es mir auch so gut wie noch nie passiert dass ein Update Probleme gemacht hat, aber ich möchte es dennoch vermeiden.

Wirklich genial finde ich den Fakt, dass die Entwickler an die fortgeschrittenen Benutzer und andere Entwickler gedacht haben. So werden die automatisch Updates nicht durchgeführt sobald eine Versionskontrolle erkannt wird.

Seit 4 Monaten steht der Beitrag nun schon auf „Entwurf„. Mittlerweile ist WordPress 3.8 erschienen und ich hatte nicht ein einziges Mal ein Problem mit einem Update. Ich muss aber zugeben, dass ich auch nur ein einziges Mal eine Mail zu einem automatisch ausgeführten Update bekommen haben. Das heißt nun entweder, dass die automatisch Updates nur einmal genutzt wurden, oder bei der ersten Aktualisierung die Benachrichtigungen wieder abgeschaltet wurden.

Ich sehe jedenfalls keinen Grund mehr, die automatischen Updates abzuschalten. Falls man es doch tun möchte, muss man in die Config einfach folgendes einfügen:

define( 'AUTOMATIC_UPDATER_DISABLED', true );
]]>
Eigenes Lizenzsystem mit PHP umsetzen https://mkleine.de/blog/2013/08/20/eigenes-lizenzsystem-mit-php-umsetzen/ Tue, 20 Aug 2013 18:49:13 +0000 http://mkleine.de/?p=734 Mehr aus Neugier möchte ich schon länger ein eigenes Lizenzsystem mit PHP umsetzen. Allerdings hatte ich bis heute noch keine Ahnung wie man so etwas überhaupt angeht oder realisiert. Das Problem dabei ist, dass man bei PHP den Code einfach nach der entsprechenden Logik durchsuchen kann und so das System eventuell sehr leicht umgehen könnte.

Anforderungen und Überlegungen

Im Idealfall kann ich im Schlüssel sogar weitere Informationen hinterlegen – dabei denke ich an einen Lizenznehmer, eine IP-Adresse, Domain oder den Namen des Lizenznehmers. Diese Daten sollen natürlich auch wieder entschlüsselt werden können. Das heißt, dass ich nach Eingabe des Schlüssels dann Texte wie „Lizensiert für Max Mustermann“ einblenden kann. So wäre auch ein Schlüssel denkbar, welcher seine Gültigkeit nach einer bestimmten Zeit wieder verliert.

Es wäre natürlich ein leichtes, wenn man einfach eine API einrichtet welche den Schlüssel validiert. So könnte man immerhin die Logik auf ein zentrales System auslagern, auf das Dritte keinen Zugriff haben. Aus meiner Sicht kommt so ein System aber nicht in Frage. Immerhin möchte auch ich nicht, dass beispielsweise jedes PlugIn in meiner WordPress-Instanz „nach Hause telefoniert“.

Da man für ein symmetrisches Verschlüsselungssystem den Schlüssel im Code hinterlegen müsste, kommt so ein System für mich im ersten Schritt nicht in Frage. In dem Fall wäre es so einfach sich einen neuen Schlüssel zu erstellen, dass sich jeder einen eigenen Schlüssel ganz einfach erstellen kann. Dafür lohnt sich meiner Meinung nach der Aufwand nicht, welcher in so ein System gesteckt werden müsste.

Libraries und Frameworks

Nach einger Recherche im Netz und sehr vielen Infos (die ich Teilweise nichtmal komplett verstanden habe, da es sehr Mathematisch wurde), bin ich auf ein paar PHP-Erweiterungen gestoßen. Folgende Erweiterungen muss ich mir also genauer ansehen und verstehen: OpenSSL, MCrypt. MCrypt fällt dabei scheinbar direkt raus, da nur symmetrische Verschlüsselungen unterstützt werden. Für mein Problem also nicht brauchbar.

OpenSSL entpuppte sich aber schnell als eine super Alternative. Hier muss man als erstes zwei Schlüssel (keys) erstellen – einen privaten (private) und einen öffentlichen (public). Der Vorteil daran: Alles was mit dem public key verschlüsselt wird, kann nur mit dem private key entschlüsselt werden und andersrum. Das heißt, dass die Lizenzinformationen mit dem privaten Schlüssel erstellt werden und dann an den Kunden gegeben werden können. In der Software ist dann der öffentliche Schlüssel hinterlegt. Hier können die entsprechenden Daten aus dem Key entschlüsselt werden. Arbeitet man zusätzlich mit serialize und unserialize, kann man komplette Objekte oder Arrays „als Schlüssel“ verwenden. Natürlich wird der Schlüssel dadurch höchstwahrscheinlich entsprechend länger.

Hier mal ein Beispiel-Roundtrip:

<?php

error_reporting(E_ALL);

$privateKeyPath = '/tmp/test_private.key';
$publicKeyPath = '/tmp/test_public.key';

if (!file_exists($privateKeyPath) || !file_exists($publicKeyPath)) {
	$loadedPubKey = openssl_pkey_new(array(
	    'private_key_bits' => 1024,
	    'private_key_type' => OPENSSL_KEYTYPE_RSA,
	));

    // Export the public key
	openssl_pkey_export_to_file($loadedPubKey, $privateKeyPath);

    // Export the private key
	$keyDetails = openssl_pkey_get_details($loadedPubKey);
	$publicKey = $keyDetails['key'];
	file_put_contents($publicKeyPath, $publicKey);

	openssl_free_key($loadedPubKey);
}

// Inhalte mit dem private Key verschlüsseln
$loadedPrivKey = openssl_pkey_get_private(file_get_contents($privateKeyPath));

$plaintext = serialize(array(
    'owner' => 'Matthias Kleine',
    'date' => '20.08.2013',
    'domain' => 'mkleine.de'
));

$encrypted = '';
if (!openssl_private_encrypt($plaintext, $encrypted, $loadedPrivKey)) {
	die('Failed to encrypt data');
}

openssl_free_key($loadedPrivKey);

// Encoded Value
$encryptedStr = base64_encode($encrypted);
print_r($encryptedStr);

// Decrypt with public key
$decryptedStr = base64_decode($encryptedStr);
$loadedPubKey = openssl_pkey_get_public(file_get_contents($publicKeyPath));

$decrypted = '';
if (!openssl_public_decrypt($decryptedStr, $decrypted, $loadedPubKey, OPENSSL_PKCS1_PADDING)) {
    die('Failed to decrypt data');
}

openssl_free_key($loadedPubKey);

// Ausgabe des entschlüsselten Arrays
echo PHP_EOL;
print_r(unserialize($decrypted));

Beispielausgabe:

xjDqV7SIz5WEXyYuGPSmUMZ3SPjmhbdc1Q+10sd+l9SU0JmHeapoWhIAF43KLmQxpdkcqLysiGqjqTeo+BiVVLjYcvCBk5LDvLDyCYtFPy6VEtyrNCONwQtsvnLPUt28YmN8F8qniMjXeyEvzboTkFa9rs9ER8EGKSnqNm8Imxs=
Array
(
    [owner] => Matthias Kleine
    [date] => 20.08.2013
    [domain] => mkleine.de
)

In der ersten Zeile sieht man den Lizenzschlüssel (welcher dann ja doch relativ lang geworden ist). Ich kenne aber genügend Programme, welche ähnlich lange Schlüssel verwenden. Per Copy-Paste ist das ja auch kein Problem. Zusätzlich sollte man sich Gedanken über Fehleingaben machen und sicherheitshalber Funktionen wie trim() vor der Entschlüsselung verwenden.

Nachteil: Durch Einsatz auf dem Kundensystem liegt natürlich immer der PHP-Code vor. Der Schlüssel kann noch so sicher sein – wird der Code einfach abgeändert und durch ein „return true“ eventuell die ganze Logik vernichten. Um das zu vermeiden könnte man versuchen den PHP-Code zu verschleiern und mit Methoden wie gzinflate, base64_decode, str_rot13 und eval auszuführen. Aber auch das macht es nur komplizierter und ist für Menschen mit Know-How eine eher belächelte Hürde.

Ich würde aber eher auf die Ehrlichkeit der Kunden setzen. In dem Fall bräuchte man nichtmal eine Lizenzierung. Das spart einem nicht nur viel Arbeit, sondern macht es dem Kunden auch sehr viel einfacher. So eine Funktionalität könnte dennoch interessant sein, wenn man für eine Erweiterung „Premium-Funktionalitäten“ freischalten möchte, und der Kunde die Software eh schon im Einsatz hat. In der Regel geht es ja nicht um hochpreisige Software.

Trotzdem sollte man darauf achten, dass die entsprechenden Pakete und PHP-Extensions auf dem Kundensystem verfügbar sind. Ansonsten steht man eh im Regen.

Und: Nie den Private-Key verlieren! :)

Disclaimer: Natürlich bin ich kein Fachmann für Verschlüsselungsalgorithmen und das ist das erste Stück Code was ich in dem Bereich je geschrieben habe. Ich garantiere keine Sicherheit dass es nicht doch einen Weg gibt die Daten anders zu erzeugen oder zu Verschlüsseln, sodass man sich eventuell selber Keys erzeugen kann.

]]>
1Password im AppStore aktuell zum halben Preis https://mkleine.de/blog/2013/06/04/1password-im-appstore-aktuell-zum-halben-preis/ Tue, 04 Jun 2013 18:52:14 +0000 http://mkleine.de/?p=647 Seit ewig langer Zeit habe ich eigentlich nur drei verschiedene Passwörter im Einsatz (je nachdem wie kritisch ich den Verlust des Passwortes einstufen würde). Dass das System alles andere als sicher ist muss ich niemandem lange erklären. Immer wieder werden Datenbanken von Online-Diensten abgezogen und am Ende braucht man nur in einem Forum o.ä. einen Login und hat zu etlichen anderen Diensten vollen Zugriff.

Dem Ganzen System wirken natürlich Passwortspeicher wie 1Password entgegen – fast 50€ wollte ich für die Software dann aber doch nicht ausgeben. Nach einem Vortrag von Fabian Blechschmidt auf der Meet Magento 2013 zum Thema Sicherheit wollte ich mich dann doch endlich mal von meinem System lösen.

Lange Rede kurzer Sinn: Nach einer Suche im Mac AppStore stellte ich fest, dass 1Password aktuell nur ca. 22€ kostet. Da habe ich natürlich nicht lange gezögert und mich einen Abend lang hingesetzt und für alle Dienste neue Zufallspasswörter generiert die ich mir zum Glück nicht mehr merken muss – sicherer und sogar noch einfacher. Was will man mehr?

]]>