Security des tages

Benutzt hier jemand PHP PEAR?

Der auf pear.php.net bereitgestellte Installer go-pear.phar ist seit rund 6 Monaten kompromittiert. […] Solltest du in den letzten 6 Monaten PEAR selbst über go-pear.phar installiert haben, hast du vermutlich eine kompromittierte Version erwischt und solltest jene dringend gegen eine neue, saubere Version austauschen […] Wenn du dir auf eigene Faust innerhalb der letzten 6 Monate PEAR installiert hast, in dem du der offiziellen Anleitung gefolgt bist und go-pear.phar verwendet hast, solltest du der Empfehlung des PEAR-Teams folgen und dir eine frische Version der go-pear.phar vom GitHub-Account von PEAR ziehen

Hl. scheiße! Auf die meisten betroffenen wird da wohl wesentlich mehr arbeit zukommen, wenn sie ihren dschobb ernst nehmen.

Der Schwerdtfegr-beta-kompetenzpreis…

Der Schwerdtfegr-beta-kompetenzpreis geht an die partei „freie wähler“ in bayern, die mit einer kompetenzsondergroßleistung in sachen sörversicherheit glänzten:

Die Freien Wähler Bayern haben nach der Landtagswahl am vergangenen Sonntag ungewollt die Zugangsdaten für die MySQL-Datenbank ihrer Website veröffentlicht. Wohl auf Grund des großen Stimmenzuwachses bei der Wahl kam es auf der Seite der Partei zu einem Besucheransturm, dem der Webserver offensichtlich nicht gewachsen war. Das resultierte in einer Fehlermeldung durch Typo3, dem Content Management System der Seite, in der auch die Zugangsdaten zum MySQL-Server des Backends auftauchten […] Auf dem Server kommt zum Teil Software zum Einsatz, die anscheinend seit Jahren nicht mehr gepatcht wurde […] möglich, sich mit den MySQL-Zugangsdaten in das CMS der Webseite einzuloggen und dessen Benutzerkonten und Passwort-Hashes auszulesen […] Zugang zu allen auf dem Server gespeicherten Dokumenten

Übrigens: typo 3 gibt nicht das datenbankpasswort aus, nicht einmal, wenn man das debug-flägg setzt. Die haben da offensichtlich schrott-addons drin verbaut, die eigene mysqli_connect()s aufgemacht haben, statt die API von typo 3 zu nutzen, und das hat dann natürlich die fehlermeldungen hochblubbern lassen.

Hej, p’litik machen wollen, den menschen ihr gemeinsames leben mit gewalt gestalten wollen und nicht eine dumme, dumme maschine anhand frei verfügbarer, vollständiger und eindeutiger dokumentazjon administrieren können! Ab jetzt bin ich überzeugt: die „freien wähler“ sind der natürliche koalizjonspartner der CSU! Das wird die erfolgskoalizjon für bayern!!!1!

Und ein dank an heise onlein, die endlich bei so einem inkompetenten scheißdreck ganz offen in ihrer überschrift davon sprechen, dass daten veröffentlicht wurden. Bitte diese schreib- und sprechweise beibehalten, denn sie schafft klarheit!

PHP und security des tages

Einmal der ganz normale PHP-wahnsinn: wenn man auf einmal das datenbankpasswort in einer PHP-fehlermeldung einer webseit lesen kann… weia!

Tja, deshalb hat man bei einem richtigen produkzjonssörver, der am richtigen web hängt, auch die php.ini ein bisschen bearbeitet:

display_errors = Off
display_startup_errors = Off
log_errors = On

Fehlermeldungen finden sich dann im error.log des websörvers. Das sollte reichen, um fehler nachvollziehen zu können, wenns auch nicht ganz so direkt ist.

Beim proggen ists ja manchmal noch ganz gut, wenn man bekwem im brauser sieht, wo der verdammte fehler steckt und noch einen kleinen backtrace sieht, wie es dorthin gekommen ist. Vor allem in PHP, wo man praktisch keine brauchbaren debugging-werkzeuge hat. (Von der kwalität und brauchbarkeit der PHP-fehlermeldungen schweige ich jetzt mal.) Aber bei einer webseit, die sich auch mal ein cräcker anschaut, ist es einfach eine scheißidee, auch nur anzuzeigen, wo welche dateien liegen (in PHP immer mit absoluten pfadangaben!) — und kohdfragmente in den fehlermeldungen sind eine noch schlechtere idee. Sonst macht die mysql mal bubu, und dann steht da ein datenbankpasswort in der fehlermeldung. Oder andere dinge, die ein potenzjeller cräcker interessant findet.

via @benediktg@gnusocial.de

Wördpress des tages

Wer sein wördpress gerade klicki-klicki-is-ja-einfach auf die aktuelle versjon 4.6 gebracht hat, hat bei einigen webhostern, die ihr PHP aus gutem grund sehr restriktiv konfigurieren eine fehlermeldung Warning: ini_get_all() has been disabled for security reasons, die ganz nebenbei auch noch den dateipfad der wördpress-installazjon auf dem sörverrechner vor der ganzen welt offenlegt.

Aber hej, wördpress-anwender, das kleine fehlerchen müsst ihr verstehen. Samuel Wood erklärt euch auch, warum:

Ahh. Yeah, that’s something of a problem.

A call to ini_get_all() was added to WordPress 4.6. There’s really no option not to call it

Versteht ihr?! Müsst ihr verstehen! Das ist alternativlos! Das sagt euch ein entwickler! Ein heiliger! Ein priester! Das ist eine eminenzbasierte wahrheit! Es geht nicht ohne diesen funkzjonsaufruf, der zu solchen problemen bei sehr sicherheitsbewussten hostern führen kann. Vergesst einfach, dass wördpress 4.5 ohne auskam, und glaubt ganz fest an die alternativlosigkeit der entscheidungen der wördpress-entwickler! (Dass man da einfach einen klammeraffen hätte vorsetzen können, so dass wenigstens keine fehlermeldung auf dem bildschirm ausgegeben wird, ist scheinbar nicht jedem entwickler dort bewusst.)

Eine kurze erste hilfe in deutscher sprache gibts beim websupporter. Wer ein richtiges eigenes sörverchen hat, weiß sicherlich schon, wie man die php.ini bearbeitet, um das problem ohne editieren der wördpress-kwelltexte zu beheben. Und wer nicht, frisst halt ein bisschen scheiße… 😦

Und jetzt, nachdem ihr das endlich fehlerfrei zum laufen gebracht habt, freut euch endlich über die neue wördpress-versjon! Da sind auch ganz tolle sachen dran gemacht worden. Erstmal ist alles in AJAX verpackt worden, damit es sich schneller „anfühlt“. Und dann gibt es noch ein ganz besonderes „neues“ leistungsmerkmal:

Die im ersten Moment wohl auffälligste Änderung ist das Entfernen der Schriftart Open Sans als Backend-Font. Stattdessen wird nun auf systemeigene Schriftarten gesetzt, wodurch die Performance verbessert wird und sich das Schriftbild besser in das genutzte System einfügt.

Ja, richtig: wördpress verzichtet jetzt darauf, zusätzlich zu den eh schon etlichen megabyte blähmasse auch noch seine eigene schriftart mitzubringen, so dass ganz einfach (und wie fast überall sonst) die standardschriftart des brausers verwendet wird. Das geht übrigens wirklich schneller. Warum nicht gleich so? Hätte nix gekostet und mühe gespart? Wäre nett gegenüber allen menschen mit volumentarifen gewesen? Ähhhh… 😦

Ach!

Auch weiterhin viel spaß mit wördpress! Wir hatten alle viel zu lange ruhe und es gab viel zu viele versjonen, die man aufgespielt hat und die funkzjoniert haben, da darf man sich doch nicht dran gewöhnen… :mrgreen:

„Mit linux wär das nicht passiert“ des tages

Erstmals hat es ein Erpressungs-Trojaner im großen Stil auf Webserver abgesehen: Die Ransomware CTB-Locker befällt Websites und verschlüsselt alle Dateien, die sie finden kann. Anschließend erscheint beim Aufruf der Site nur noch der Erpresserbrief, welcher den Admin zur Überweisung von Bitcoins auffordert. Hunderte Web-Präsenzen sind dem Krypto-Trojaner bereits zum Opfer gefallen

Wenn ich heise glauben darf, erwischt es diesmal häufig „wordpress“. Tja, liebe webseitbetreiber, das ist eigentlich eine gute gelegenheit, mal ganz schnell eine aktuelle versjon aufzuspielen und sich ernsthafte gedanken über eine angemessene datensicherungsstrategie zu machen.

Unbestätigten gerüchten aus völlig uninformierten kreisen zufolge soll noch heute nachmittag der heise-onlein-kommentar linux-webserver sind ein sicherheitsalbtraum vom spezjalexperten „fab“ veröffentlicht werden. 😀

Kwalitätssoftwäjhr des tages

Vor vielen jahren habe ich mal in einem C++-projekt eine der schlimmsten zeilen kohd gesehen, die ich je gesehen habe (nicht-programmierern ist das nur schwierig zu erklären):

#define private public

Nun, wenn man so etwas in PHP machen will, hat man zwar keinen präprozessor zur verfügung, aber das heißt noch lange nicht, dass man das nicht doch irgendwie machen kann.

Heise des tages

Es ist traurig, aber so langsam wirds unübersehbar, wie da hinten in der karl-wiechert-allee das licht im heise verlach ausgeht und sich die hirne in luftigen wölkchen auflösen. Da schreiben die im developer-reßßor einen artikel über das frische PHP 7 und lassen da sogar zwei leute dran arbeiten, und der sieht inhaltlich dann so aus (kurze, aber keineswegs unanständig verkürzende zusammenfassung):

  1. PHP 7 ist erschienen (war es zum veröffentlichungszeitpunkt noch nicht offizjell, es war also schon in der überschrift eine falschmeldung).
  2. Es ist schneller.
  3. Es kann mit kompilierten bytekohd, wie ihn das fratzenbuch benutzt, von der geschwindigkeit her mithalten, so viel schneller ist es
  4. Es hat elf jahre gedauert. Elf jahre.
  5. Es ist kein stein auf den anderen geblieben, damit alles schneller werden konnte.
  6. Es ist schneller.
  7. Es ist schneller (zur abwexlung mal mit ein paar zahlenangaben zu realistischen PHP-anwendungen wie wördpress).
  8. Es wurde alles überarbeitet (lexer, parser, bytekohd-gerator) — eine gute gelegenheit, „developern“ noch mal in sechsundzwanzig sicherlich vom verlag vergüteten einschubsatz-wörtern zu erklären, was so ein lexer und so ein parser überhaupt ist, weil so ein „developer“ das ja nicht weiß und auch gar nicht guhgelln oder enten kann, wenn er mal etwas nicht weiß.
  9. Es ist alles anders. (Was alles anders ist, bedarf keiner erwähnung.)
  10. Es ist schneller.
  11. Es ist abwärtskompatibel zu PHP 5.x, mit einigen nicht näher angedeuteten ausnahmen.
  12. PHP 5 wird ab august 2016 nicht mehr unterstützt.

Es gibt zu diesem artikel — der sich, nur um nochmal kurz daran zu erinnern, an softwäjhr-entwickler und nicht etwa an nur-anwender richtet — keinerlei andeutung, was sich an der sprachspezifikazjon von PHP 7 gegenüber PHP 5 geändert hat und was möglicherweise bei der portierung alter projekte probleme bereiten könnte. Der entsprechende kurze artikel auf der webseit des PHP-projektes wurde weder erwähnt noch gar verlinkt, man hat ja diese praktischen suchmaschinen fürs web. Es gibt nicht die geringste brauchbare informazjon für einen softwäjhr-entwickler im gesamten artikel. Und auch für keinen anderen menschen enthält der text eine brauchbare informazjon… außer es ist schneller. Deshalb wird als symbolbild — müsst ihr verstehen, da im CMS ist platz für ein bild, und der muss ausgefüllt werden, weil da platz für ein bild ist, auch wenn das bild nicht den geringsten mehrwert für den leser bietet — einfach ein 08/15-stockfoto von einer mechanischen stoppuhr genommen, weil wisst schon, ist ja schneller. Und sowas misst man ja mit mechanischen stoppuhren.

Die kompjuterbild hätte es nicht mieser gemacht… 😦

Und was der unterschied zwischen den wörtern „als“ und „wie“ ist, lernen die professjonellen schreiber des heise-verlachs hoffentlich auch noch… aber ich will mich mit so einer korintenkackerei mal zurückhalten, weil im glashaus.

Security des tages

Benutzt hier jemand die PHP-bibliotek für guhgell adwörds? Dann aber schnell eine aktuelle versjon auf dem sörver aufspielen! Übrigens: guhgell hats auch nicht so eilig, wenns darum geht, gefährliche sicherheitslöcher zu stopfen:

Nov 5th, 2015: Google, after half a year, confirm the vulnerability has been patched

Weia! Ads sind deren hauptsächliches geschäftsmodell!

Wie, du weißt nicht, ob du die bibliotek benutzt, weil du nicht weißt, ob deine addons für dein CMS die benutzen? Dann versuch es rauszufinden! Frag die entwickler deiner addons und sag ihnen, dass sie fixen müssen! Oder noch besser: verzichte einfach auf die paar klickerpfennige von guhgell, hör auf, deine leser mit träckender scheißreklame zu verachten und mach damit die welt ein bisschen besser!

NoSQL des tages

In dem Datenbank-Verwaltung phpMoAdmin klafft eine kritische Lücke, durch die Angreifer Code auf dem Server ausführen können. Ein passender Exploit wird in Untergrund-Foren für 3000 US-Dollar gehandelt

Hach ja, erinnert ihr euch noch, wie die vor ein paar jahren die no-SQL-datenbanken hochgejauchzt haben, weil die ja allein schon wegen der unmöglichkeit von SQL-injections viel sicherer sein sollten — und jetzt stellt sich auf einmal raus, dass mieser kohd mit jeder datenbank ein sicherheitsproblem ist… 😉

Spezjalexperten des tages

Ich gratuliere den spezjalexperten von „heise security“ zu ihrer entscheidung, sich fürs symbolbildchen übern artikel den PHP-kohd einfach in einem hexeditor anzuschauen. Das hilft bestimmt ungemein beim verständnis, wenn man PHP so liest!

(Bei spiegel, focus und bildzeitung bin ich so etwas ja gewohnt, die schreiben ja auch für idjoten, die ewig idjoten bleiben sollen, damit sie weiter spiegel, focus und bildzeitung lesen. Aber bei heise tuts noch ein bisschen weh… der artikel mit dem idjotischen symbolbild ist übrigens dieser hier, und ich hoffe, das bild wird schnell ausgetauscht.)

Wie man kreditkartendaten in einer datenbank ablegt?

Natürlich am besten verschlüsselt, damit ein erfolgreicher angreifer nichts damit anfangen kann. Und wie verschlüsselt man? Am besten durch kohdierung in base64:

Design a script to encrypt the credit card information. Using an encryption algorithm of your choice, create a routine that converts the information into encrypted data. Programming languages such as PHP have built in functions that can encrypt. An example is the base 64 encryption function that can be used by invoking the following code:

base64_encode($credit_card_number);

Hoffentlich ist die drexseit, auf der ihr immer eure kreditkartennummer eingebt, von jemanden programmiert worden, der den unterschied zwischen einer technischen kohdierung und einer kryptografischen verschlüsselung kennt!

Mein gegenvorschlag an den großen spezjalexperten, der den menschen programmieren erklären will: „verschlüsselung“ durch ASCII-kohdierung! Geht auch viel schneller! :mrgreen:

[via]

Wers gar nicht versteht: eine kohdierung in base64 ist klartext. Es werden einfach nur jeweils sechs bit daten auf den sieben-bit-ASCII-zeichensatz abgebildet und damit in acht bit untergebracht, um in reinen textprotokollen (wie zum beispiel e-mäjhl) binärdateien versenden zu können. Jeder kann diese abbildung rückgängig machen. Das passiert jeden tag in milljarden von kleinen anwendungsfällen. Es ist eine kohdierung aus technischen gründen, keine verschlüsselung. Ein programmierer, der anderen leuten erklärt, wie man was für dieses internetz programmiert, muss das wissen.

Jetzt ist es „amtlich“…

PHP.net hat schadsoftware verteilt. Und nein, damit ist nicht PHP gemeint…

Und die angreifer haben den sörver so weitgehend gepwnt, dass sie sogar einträge in der crontab unterbringen konnten. Gut, dass die angreifer so dumm waren und etwas gemacht haben, was relativ schnell auffallen musste und nicht etwa die PHP-daunlohds mit kleinen trojanern angereichert haben, die dann auf ihr kommando warten. Man stelle sich mal vor, dass mittelfristig ein erklecklicher teil der PHP-installazjonen in websörvern auf die befehle von kriminellen gehört hätte…

Wie man nicht mit kompjutern umgehen sollte…

…gehört seltsamerweise zu den dingen, die sehr häufig von leuten herbekommen werden, die in PHP proggen — vermutlich, weil so viele programmieranfänger zurzeit ausgerechnet mit PHP anfangen. Moment, ich will einen benutzer anlegen? Na, da rufe ich doch einfach über shell_exec() einen useradd auf. Oh, dafür brauche ich ja root-privlegien… na, dann eben mit sudo, und damit das klappt, trage ich das benutzerkonto, unter dem der websörver läuft, einfach in meine /etc/sudoers ein, damit der websörver jeden beliebigen befehl mit root-privilegien absetzen kann, und zwar ohne passwortschutz. m(

Wie 13jährige bei ihrem ersten sex: schnell, einfach und gefährlich… :mrgreen:

[via]

PHP-entwickler, wer hat euch ins gehirn gekackt?!

Euer PHP 5.5 ist eine ganz tolle sache. Ich habe ja viel zu viel lebenszeit übrig, und mir fallen überhaupt keine angenehmen dinge ein, mit denen ich diese lebenszeit füllen könnte, da kommt ihr mir mit euren hirnverkackten beglückungsideen gerade recht.

Bisherige vorgehensweise:

$data = unpack ('a5', $stuff);

Neue und jetzt viel bessere vorgehensweise, die aus bedauerlichen, aber dafür nicht weiter nachvollziehbaren gründen nicht abwärtskompatibel ist:

// Variable $packfmt hier wegen übersichtlichkeit, das geht natürlich auch kompakter
$packfmt = version_compare (PHP_VERSION, '5.5.0', '>=') ? 'Z5' : 'a5';
$data = unpack ($packfmt, $stuff);

Man sollte jeden menschen, der solche änderungen an einer API vornimmt, statt einfach eine weitere funkzjon mit dem neuen und perl-kompatibleren verhalten einzuführen (darauf kommts bei PHP wirklich nicht mehr an), an seinen hoden aufhängen! Ein funkzjonsaufruf, der sich abhängig von der versjonsnummer unterschiedlich verhält, ist für jeden verdammten progger ein albtraum und geradezu eine gewähr für schwer entdeckbare fehler, die sich demnächst beim appgräjhd der sörver durch viele webanwendungen fressen werden.

PHP stinkt nur noch! (Besonders gut gerochen hats noch nie…)

Wie PHP entstanden ist…

Ich bin kein richtiger Programmierer. Ich werfe dinge zusammen, bis es funzjoniert, und dann wende ich mich dem näxsten problem zu. Die richtigen programmierer sagen dann: „Ja, es funktioniert, aber an allen möglichen stellen wird der angeforderte speicher nicht wieder freigegeben. Vielleicht sollten wir dieses problem beheben.“ Ich starte dann einfach den apache-websörver alle zehn rekwests neu.

Rasmus Lerdorf, autor der ersten versjon der programmiersprache PHP.

Endlich verstehe ich, warum PHP so ist, wie es eben ist — denn diese ganz besondere desein-„filosofie“, die hat PHP bis heute…

Yes.

They mark segfault bugs as „expected“.

m(

Hallo, PHP?!

Nicht, dass ich wirklich etwas gegen dich habe, außer vielleicht, dass du eine unlogische und strokelige programmiersprache bist. Aber was haben sich deine entwickler dabei gedacht, deinen scope-operator als פעמיים נקודתיים zu bezeichnen, dieses hübsche hebräische wort für verdoppelter doppelpunkt falsch ins englische zu transkribieren und zum bestandteil von fehlermeldungen zu machen?

Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM in /home/elias/www/linkloch/auth.php on line 31

Von dem kraut, das die geraucht haben müssen, hätte ich jetzt auch gern etwas.

PHP-entwickler!

PHP-entwickler! Was zum hackenden Henker habt ihr euch dabei gedacht?! Ein…

$a = NULL;
--$a;

…führt dazu, dass $a den Wert NULL behält und nicht etwa zu 0 oder -1 wird; aber ein sehr ähnliches…

$a = NULL;
++$a;

…führt dazu, dass $a den Wert 1 bekommt.

Wer hat euch ins gehirn geschissen, damit ihr auf solche ideen kommt?!