Fragen? Antworten! Siehe auch: Alternativlos
Finde ich immer wieder bemerkenswert, wie eine Gang aus Kriminellen, und nicht sehr schlauen Kriminellen obendrein (die setzen PHP ein und patchen es dann nicht!!), versteht, dass das das relevante Ziel für Cyber-Präsenzen jeder Art ist. Aber die Wirtschaft nicht. Seit wieviel Monaten versucht diese eine Kommunal-IT im Südwesten jetzt ihren Scheiß neu aufzusetzen?
Mann Mann Mann.
Die Haupt-PHP-Firma hat PHP-Entwickler befragt, und weniger Projekte waren in der Cloud als im Vorjahr. Heise schließt daraus messerscharf:
Die PHP-Nutzer wenden sich ab von den Hyperscalern und setzen vermehrt auf eigene Rechner.Diese Folgerung ist ein schönes Beispiel für Survival Bias. Eine andere Erklärung für die Messwerte (neben "die Umfrage war inkompetent durchgeführt") wäre, wenn die Cloud-Projekte mit PHP alle gescheitert sind, oder gar nicht erst beauftragt wurden. Die entlassenen PHP-Entwickler wären dann ja keine PHP-Entwickler im Sinne der Umfrage mehr, sondern halt Go-Entwickler oder Node-Entwickler von mir aus.
Immer schön aufpassen mit Statistiken!
Lasst euch davon mal bitte nicht blenden. Die Polizei ist hier massiv im Hintertreffen. Die Polizei greift spezifische Ziele an. Die Ransomwarer schießen einfach mit der Schrotflinte ins Gehege und holen dann die toten Tiere raus.
Von der Schwierigkeit liegen da Größenordnungen dazwischen.
Ich will die Leistung der Polizei hier nicht kleinreden, im Gegenteil. Wenn sie auf der Lockbit-Darknet-Seite statt der Countdowns für die erpressten Firmen (in ZWEI Tagen veröffentlichen wir eure Daten, wenn ihr nicht zahlt) einen Countdown für das Bekanntgeben des Klarnamens des Chefs der Ransomwaregruppe hintun, dann ist das schon lustig und ich würde sogar sagen, dass das Hack Value hat.
So und jetzt denken wir mal eine Runde weiter. Wenn die Polizei es unter diesen widrigen Umständen schafft, Lockbit einmal die Infrastruktur wegzusnipern, obwohl die hinter Tor war und so weiter, dann haben die mehr als die nötigen Fähigkeiten, um jedem von euch und mir alle Infrastruktur wegzusnipern. Die Idee, dass ihr euch mit ein paar technischen Tricks wie Server im Ausland oder Tor Hidden Service schützen könnt, die ist nicht mehr aufrecht zu erhalten.
Ist das jetzt gut oder schlecht? Kommt auf eure Bild vom Rechststaat an und für wie korrupt ihr die Behörden haltet. Bei mir ist ja nach dem Urteil gegen die Filesharing-Oma ohne Computer nicht mehr viel übrig vom Glauben an den Rechtsstaat.
Ja aber Fefe, du machst doch nichts kriminelles, du musst doch keine Angst vor der Polizei haben?
Es gibt durchaus Dinge, die ich für richtig und wichtig finde, die aus irgendwelchen Gründen in unserem Rechtssystem als verboten gelten. Ich bin beispielsweise ein Sympathisant von frei zugänglichen akademischen Papers. Ich finde es grotesk, dass sich Sci-Hub in einer Diktatur vor dem Zugriff der freidrehenden westlichen DRM-Mafia verstecken muss. Und dass wir uns gleichzeitig dauernd anhören müssen, dass wir einen Fachkräftemangel haben. Ja, äh, vielleicht hätten wir den nicht, wenn wir nicht das Wissen der Welt hinter eine Paywall von unseriösen Aasgeier-Verlagen gepackt hätten!
Wenn unsere Behörden die technische Befähigung haben, um Lockbit plattzumachen, können sie damit auch Raubkopierer plattmachen, oder unliebsame Journalisten. Ich persönlich habe daher immer vertreten, dass der Staat besser nicht alle Zugriffsmöglichkeiten kriegt, und einige Verbrechen dann halt ungesühnt bleiben.
Wie demaskiert man Tor Hidden Services? Mit Trafficanalyse und Timing-Korrelationen. Man generiert Traffic zum Hidden Service und dann guckt man, ob man Pakete dieser Größe kurz danach irgendwo anders wiederfindet. Wenn die Behörden also die Tor Services demaskieren konnten, dann haben sie auch Trafficdaten über allen Traffic da draußen. Auch deinen hier gerade zu meinem Blog.
Update: In diesem Fall haben sie einfach einen PHP-Exploit gegen die Dark-Net-Site gefahren und mussten gar nicht Tor demaskieren. Die obigen Überlegungen sind trotzdem jetzt angemessen bis notwendig, finde ich.
Nun fällt mir gerade auf, dass das mehr Erkenntnisgewinn haben könnte, wenn ich es mit typischen Architekturen vergleiche.
Dann könnte man mal zeigen, was es so für Optimierungsdimensionen gibt, und was für Vor- und Nachteile die jeweils in anderen Dimensionen haben. Ich glaube, dass die meisten IT-Entscheider überhaupt keine Grundlage für ihre Entscheidungen haben, sondern eher so nach sozialen Gesichtspunkten entscheiden. Wenn es aussieht, als machen das alle anderen, dann machen wir das besser auch.
Daher hier mal eine kleine Umfrage.
Ich suche Leute, die eine IT-Architektur (ich denke hier in so Jungschen Archetypen-Kategorien wie "PHP-Monolith" vs "Rails-App" vs "Enterprise-Java mit Microservices und Message Bus und Kafka") zu verantworten haben und ihre Entscheidungen so gut finden, dass sie das auch anderen gegenüber vertreten würden.
An die jetzt die Frage: Wie sieht eure Architektur aus (ganz grob, höchstens ein-zwei Absätze)? Was sind aus eurer Sicht die Dimensionen des Problemraums? In welche Richtungen davon habt ihr optimiert, und warum? Wieso glaubt ihr, dass euer Ansatz das sinnvolle Optimum herausholt?
Insbesondere bin ich an nicht offensichtlichen Dimensionen (also andere als Performance, Kosten, Security, Zuverlässigkeit, Wartbarkeit, Monitorbarkeit, Skalierbarkeit), die für euch eine Rolle spielten.
Mein Kumpel Kris hat das mal bei Heise ausführlich erklärt.
Und tatsächlich ist die Sache sogar noch verkackter als ich sie zu verstehen geglaubt hatte.
Besonders witzig bei Kris' Ausführungen finde ich, dass er für seine jahrzehntelage Arbeit in der PHP-Community bekannt ist, und dieses verkackte Classloader-Konzept, zur Laufzeit Code nachladen zu wollen, ist auch eine glorreiche PHP-Innovation, die dort allerdings Autoloader heißt.
Dass das möglicherweise grundsätzlich eine völlig verkackte Idee ist, zur Laufzeit Code nachzuladen, ist nicht nur den Founding Fathers von Java nicht gekommen.
Auch in C und C++ gibt es ein API, mit dem man Shared Library nachladen kann, heißt dlopen oder LoadLibrary, und wird für Plugins verwendet. Und auch da haben viele Leute noch nicht verstanden, dass das Plugin dann dieselben Zugriffsrechte hat wie das Programm, in dessen Kontext es ausgeführt wird.
Oh und lasst mich bei der Gelegenheit einen kleinen Schwank erzählen. Kris macht sich in dem Artikel darüber lustig, dass Java-"Anwendungen" heutzutage immer mit der genauen JRE-Version im Paket ausgeliefert werden, die man braucht, um sie auszuführen. Ich hatte mal bei einem Kunde die Gelegenheit, in eine als "Appliance" ausgelieferte Enterprise-Java-"Anwendung" reinzugucken, und die kam mit drei verschiedenen JREs für verschiedene Teile der "Anwendung". Es ist da draußen also noch krasser verkackt als Kris es hier ausspricht.
Ich empfehle ausdrücklich, nicht nur Seite 1 zu lesen. Die ganzen wunderbaren Money-Quotes sind auf Seite 2.
Der wichtigste Punkt an diesem wunderschönen Rant ist jedenfalls, und das sollte ihr auf jeden Fall mit heimnehmen hier: Das war kein Bug im Sinne von "ein Programmierer hat falschen Code hingeschrieben". Der Code war da vorsätzlich, absichtlich, und hat genau das getan, wofür er gedacht war.
Es war, könnte man sagen, einer der seltenen Momente, wo Java-Code genau das getan hat, wofür er gedacht war. Stressarm und flexibel.
Wollte ich eigentlich nicht ins Blog tun, weil ich die nicht zu Infrastruktur zählen wollte. Aber irgendwie ist das auch nichts, das gar nicht zu erwähnen.
Vielleicht brauchen wir eine neue Kategorie für sowas. Unterdrückungsinfrastrukturapokalyse oder so.
Update: Wir sollten mal einen Wettpool eröffnen, ob Facebook genug Arsch in der Hose hat, einen ordentlichen Postmortem zu veröffentlichen.
Update: Mir mailte jemand, dass gestern sein Huawei-Telefon warnte, dass das Internet nicht geht. Das Internet ging, aber Facebook ging nicht.
Update: Facebook hat ein Postmortem veröffentlicht. Sie sagen, ein Admin habe auf einem Router auf dem Backbone zwischen ihren Rechenzentren ein Kommando gefatfingert, was den gesamten Backbone runterfuhr. Money Quote:
Our systems are designed to audit commands like these to prevent mistakes like this, but a bug in that audit tool didn’t properly stop the command.
Das klingt ein bisschen konfus, denn Auditing heißt normalerweise, dass man ein Log der Befehle führt, nicht dass man irgendwas stoppt. Aber egal. Sie haben DNS-Server, die über ihren Backbone mit den autoritativen DNS-Servern für Facebook reden, und die über BGP announced werden. Anycast vermute ich? Jedenfalls haben sie da einen Fail-Beschleuniger eingebaut, dass wenn der DNS-Server den autoritativen DNS-Backend-Server nicht erreichen kann, dass er dann aufhört, sich über BGP zu announcen. Das führte dann dazu, dass Facebook nicht mehr per DNS erreichbar war, obwohl die Server selbst eigentlich noch liefen. Money Quote:
And as our engineers worked to figure out what was happening and why, they faced two large obstacles: first, it was not possible to access our data centers through our normal means because their networks were down, and second, the total loss of DNS broke many of the internal tools we’d normally use to investigate and resolve outages like this.
Mit anderen Worten: Das Szenario hat bei denen noch nie jemand mal durchgespielt. Aber wartet, kein Problem ist so schlimm, dass man es nicht mit wohlgemeinten Security-Barrieren noch schlimmer machen könnte. Sie haben also Ingenieure zu den Rechenzentren geschickt.
But this took time, because these facilities are designed with high levels of physical and system security in mind. They’re hard to get into, and once you’re inside, the hardware and routers are designed to be difficult to modify even when you have physical access to them. So it took extra time to activate the secure access protocols needed to get people onsite and able to work on the servers. Only then could we confirm the issue and bring our backbone back online.
Gestern ging schon der Witz herum, dass dringend Leute mit fünf Jahren Erfahrung in PHP, C++ und Seitenschneidern gesucht würden. :-)
Alles in allem bin ich mit dem Postmortem zufrieden. So muss das aussehen. Wirkt für mich nicht so, als hätten sie irgendwas zu beschönigen versucht. Lessons learned. So wie das sein muss.
Gleich mehrere haben mir geschrieben, sie seien da mal angestellt gewesen, und die Zahlungen seien von der TU gekommen, nicht von der Landeskasse.
Die haben auch übereinstimmend berichtet, dass bei der SAP-Einführung vor Jahren (die immer noch nicht abgeschlossen ist!) ein paar Monate (!!) keine Gehälter gezahlt werden konnten. Die haben sie dann mit Zinsen irgendwann nachgezahlt, aber ich meine, äh, ... wtf?!
Ein Leser berichtete zum Verfahren der Überweisung vom Vormonat einfach nochmal abschicken:
Im Rahmen von Notfallplänen in der Industrie ist es nicht unüblich die eigene Hausbank anzuweisen die Überweisungen die mit "Gehaltszahlung" geschlüsselt wurden einfach zu wiederholen. Dieser Schlüssel ist so ziemlich der einzige der im Rahmen von SEPA Überweisungen tatsächlich genutzt wird.Ich erzähl ja gelegentlich die Story, wie ich in meinen Programmier-Anfangstagen überlegt habe, welche Art von Software ich schreiben wollen würde. Ich habe mich damals entschlossen, nie an Projekten mitzuwirken, von denen Menschenleben abhängen. Keine Medizin, keine Kraftwerke, keine Flugzeuge. Damals dachte ich noch, dass das ein klares Kriterium sei. Heute haben wir Entertainment-Systeme im Auto, über das der Rest des Autos gehackt wird.Kür ist dann noch auch die Überweisung an die Sozialversicherungsträger (Krankenkassen) wiederholen zu lassen.
Der Punkt jedenfalls: Ich hab dann viele Jahre später jemanden getroffen, der Software für Atomkraftwerke gehackt hat. Das war so ein hemdsärmeliger PHP-Typ (das meine ich jetzt als Gattungsbegriff, der hat nicht wirklich PHP gemacht). Sie das Modell "ach komm, wie schwer kann das sein, ich kopier einfach von dem alten Gartenbauprojekt den Code und pass hier und dort ein bisschen an".
Das ist schön und gut, wenn ich mir vornehme, keine ultrariskanten Dinge zu tun. Aber das heißt halt nicht, dass nur Leute solchen Code machen, die das können, sondern eher im Gegenteil, dass das Leute machen, die nicht begreifen, was für ein Risikofaktor sie sind.
Dass es da offenbar etablierte Verfahren gibt, um nach dem Projektverkacken einfach die Überweisungen des letzten Monats zu wiederholen, das finde ich absolut hanebüchen. Das ist ein "OMG DIE HÜTTE BRENNT, WAS MACHEN WIR JETZT"-Notfallding, das ist doch kein Plan!!
Ich bin immer wieder schockiert, wie laissez-faire Leute teilweise an Probleme rangehen. Ach komm, Atze, müssen wir nicht groß planen. Qualitätssicherung? Viel zu teuer!! Wir können ja einfach manuell überweisen!1!!
We don't yet know how exactly this happened, but everything points towards a compromise of the git.php.net server (rather than a compromise of an individual git account).
Da muss man allerdings dazu sagen, dass der Typ, der das schreibt, der ist, in dessen Namen da Zeug eingecheckt wurde. Der ist möglicherweise nicht der Richtige, um zu untersuchen, ob der Server oder bloß sein Account übernommen wurde.
Hier sind ihre Hosting-Anforderungen (Achtung: Hörensagen). Oh, und: Geld dafür bezahlen können sie natürlich nicht. Die haben noch nie einen Cent Profit gemacht.
Warte mal eine Chat-App macht extern 100 GB Traffic pro Minute?! Und intern 400 GB?!?
Tja, meine Damen und Herren. So sieht das Trafficmuster aus, wenn man Netflix-Style ein paar Fantastilliarden Microservices betreibt. Und so sieht der CPU- und RAM-Bedarf aus, wenn man das in Ruby on Rails macht.
Das ist auch der Grund, wieso es PHP noch gibt.
Es ging ja auch das Gerücht um, dass das dezentrale Backup, dass jemand noch kurz vor Rauswurf bei AWS gemacht hat, 70 TB groß ist.
Das ist m.E. ein typisches Cloud-Symptom. Wenn das nicht bei dir sondern bei Amazon wehtut, wieso solltest du dann die Anwendung optimieren? Wenn Storage virtualisiert ist, wieso dann in Sparsamkeit investieren? Die 70 TB kommen wohl daher, dass die nie was gelöscht sondern nur "als gelöscht markiert" haben.
Die Trafficmenge kommt wohl davon, dass die auch Bilder und Videos hatten. Das bläst natürlich die Trafficrechnung enorm auf.
Ich dachte mir, ich skizziere mal kurz, wie man da rangehen würde, damit ihr versteht, was das Problem ist.
Nehmen wir also mal an, Bluetooth ginge nicht durch Wände und mein Telefon hätte Daten darüber, welche Geräte in den letzten zwei Wochen im Radius von 2m waren.
Aus Datenschutzgründen speichern wir nicht die echte ID des Gerätes, sondern dein Handy generiert für jedes 2m-Radius-Ping ein neues zufälliges Token. Das Token wäre so, dass dein Gerät es wiedererkennen kann, aber sonst niemand es deinem Gerät zuordnen kann. Wenn du jetzt herausfindest, dass du dir Covid eingefangen hast, dann gehst du mit der Liste der Tokens der letzten beiden Wochen zu einem Server und lädst sie dort hoch.
Da haben wir das erste größere Privacy-Problem. Der Server sieht deine IP und dass du infiziert bist. Das ist schonmal nicht gut. Aber nehmen wir mal an, das ginge irgendwie, vielleicht über Tor anonymisiert.
Wie teilt denn der Server jetzt den Betroffenen mit, dass sie ein Problem haben? Die Tokens konnte man ja nicht zuordnen! Das war ja absichtlich so designed.
Also müsste man das so machen, dass alle Geräte periodisch auf dem Server die Liste aller Tokens abholen, und dann gucken, ob sie betroffen waren. Das wären sehr schnell sehr große Downloads. Das ist also auch kacke. Man würde also lieber ein System basteln, indem die Tokens zwar nicht direkt zuordnungsfähig sind, aber wo man bei der Abfrage einen Wert hochlädt, anhand dessen dann der Server die Tokens identifizieren kann, die mich betreffen. Diesen Wert könnte man z.B. im Telefon täglich oder stündlich neu vergeben, um die Zuordnung zu erschweren. Aber wenn wir das machen, dann kann der Server sehen, ob ich infiziert bin, weil die Antwort an mich nicht leer ist.
Das ist also auch Mist. Die offensichtliche Lösung wäre, entweder auch über Tor zu gehen (das kann man bandbreitentechnisch mal vergessen, das würde das Tor-Netz vermutlich krass überfordern). Oder man baut in die Daten der Infizierten auch lauter "blinde" Tokens ein, die "nicht infiziert" heißen, aber das kann nur das Endgerät des Betroffenen sehen. Dann müssten aber alle Endgeräte die ganze Zeit immer zwei Tokens hochladen, das Blind-Token und das echte Token, damit der Server nicht sieht, welches welches ist. Das wäre vom Traffic und dem Speicherplatz für die Datenbank her prohibitiv teuer.
Ich sehe da ehrlich gesagt nicht viel Luft für eine datenschutzrechtlich einwandfreie Lösung.
Da muss man schon echt die Augen zukneifen und viel mit den Händen herumwedeln, um sich von der nervigen Realität abzulenken. Da kommen dann so Modelle wie "Ja gut, aber die IP speichern wir ja nicht, das wäre ja böse. Vertrauen Sie uns. Wir sind die Guten." raus. Oder "wir machen das mit Google/Apple/Vodafone/Telekom, die haben eh eure Daten". Ja super.
Bleiben so Modelle wie "wir zwingen einfach die Telcos dazu, diesen Traffic kostenlos zu machen". Oder "Wir teilen das in zwei Teile auf; Google macht den einen, Apple den anderen. Der Kapitalismus schützt uns dann schon davor, dass die Kartellbildung machen." Mag sein, aber der Kapitalismus schützt uns nicht davor, dass Hacker bei beiden einbrechen oder dass der Staat einfach per Durchsuchungsbeschluss bei beiden die Daten rausträgt und verknüpft.
Update: Eine Krypto-Lösung ist einem Kumpel noch eingefallen. Man macht das so, dass man die Tokens mit einem Pseudozufallszahlengenerator generiert. Die funktionieren so, dass man sie mit einem (hoffentlich tatsächlich echt zufälligen) Zufallswert füttert und der Rest der augespuckten Werte sieht zufällig aus und ist auch praktisch nicht vorhersagbar, wenn man nicht den Initialwert kennt. Das könnte man nutzen, indem man im Infektionsfall den Seed veröffentlicht, und die Tokens bleiben auf den Endgeräten. Dann könnte mein Handy vom Server die Liste der Seeds holen und gucken, ob es damit irgendwelche der gespeicherten Tokens generieren kann. Nachteil: Das wäre eine sehr akkuunfreundliche Operation. Und man müsste die Initialwerte einmal pro Woche neu auswürfeln, damit nicht beliebig lange in die Vergangenheit Treffer rausfallen würden.
Update: Man kann da noch Bandbreite optimieren, z.B. mit einem Bloom-Filter. Wenn ihr davon noch nie gehört habt, googelt das mal. Das zum ersten Mal erklärt bekommen löst in manchen Menschen eine religiöse Erfahrung aus :-)
Da der Hebel so hoch ist (jedes Endgerät im Land einmal pro Tag) ist das aber immer noch sehr viel Traffic.
Update: Liebe Leute, der Punkt dieses Beitrags war nicht, eine Lösung zu finden. Der Punkt war, euch ein Gefühl dafür zu geben, was da so ein paar der Dimensionen des Problemraums sind. Mein Eindruck ist, dass im Moment viele Leute so „mein Cousin kann PHP, der hätte da schon längst was gehackt” drauf sind, und gar nicht verstehen, wieso man da überhaupt so lange berät und wieso da nicht einfach kurz jemand was hackt.
Da gibt es ganz am Anfang gleich einen Abschnitt über die erlaubten Zeichen, und da steht genau das drin, was ihr euch jetzt vorstellt. A-Z, 0-9, ein paar ganz wilde Experimentalzeichen wie Klammern und Minus und Apostroph, und dann als optionale Erweiterung Umlaute. Mit dem Hinweis, dass man die auch nach Best Practices umwandeln darf, Ä in A oder AE z.B. Also eher 80er als 90er an der Stelle.
Wer sich jetzt dachte: Warte mal, SEPA ist doch europäisch. Was ist denn, wenn jemand Jérôme Boateng heißt? Geht dann halt nicht? Geht dann halt nicht.
Und jetzt warum ich das blogge. Weil da auch in einer Fußnote eine Ausrede steht.
Zeichen außerhalb des o. a. Zeichenvorrats verhindern die Verarbeitung in den Banken und die dortigen Prüfungen (z. B. bzgl. Geldwäschegesetz).Oh ACH SO ist das! Das Geldwäschegesetz ist Schuld! Nicht etwa das Mainframe-Backend, das nur EBCDIC kann! Gut, dass wir das mal geklärt haben.
Und das ist ja wohl klar, ohne Frauen am Mikrofon kann man im Jahre 2019 keine Konferenz mehr machen, ob jetzt über PHP oder was anderes. Es geht ja hier schließlich nicht um PHP. Es geht darum, was die Vortragenden zwischen den Beinen haben!
Diesmal interessierte mich vor allem, ob die Implementation relativ zueinander effizienter geworden sind. Hier sind die aktuellen Messungen, und da das diesmal vorbearbeitet ist, ist das auch vergleichbarer. Der alte PHP-Code hat z.B. bei einer Zeile das Tokenisieren eingestellt, wenn ein "0" als Token kam. Und Go brach kommentarlos ab, wenn eine Zeile zu lang ist, und hat dann viel weniger Werte tatsächlich bearbeitet. Zum Vergleich: Die alte Messung.
Für mich das spannenste Ergebnis: Wie stark Go aufgeholt hat. Und diesmal sind auch Python 2.7 und Python 3.6 beide vertreten, da sieht man, dass Python 3 deutlich viel langsamer ist, und zwar nicht nur (wie ich bis dato dachte) bei der Startup-Latenz. Auch einigermaßen überraschend fand ich, wie schlecht Node.js abschneidet. So viel Hype wie die haben, da ging ich von besserer Performance aus.
Auch überraschend ist, dass C so deutlich siegt. Bei der letzten Messung war C++ besser. Das war dann wohl auch ein Tokenisierungs-Artefakt und nicht real.
Falls jemand noch Sprachen nachreichen möchte, freue ich mich über Einsendungen. Insbesondere eine ideomatisch elegante Rust-Lösung fehlt noch.
Update: Es sind gleich mehrere Rust-Lösungen reingekommen. Eine schön ideomatische und eine optimiertere. Auch für Java kam noch eine schnellere Version rein, und die Ocaml-Version funktioniert jetzt auch mit dem aktuellen Ocaml 4.09. Danke an alle Einsender.
What’s more, results from VirusTotal, the Google-owned malware scanning service, suggest that the malicious PEAR download installed a backdoor, possibly in the form of a Web shell, on infected servers. If true, the backdoor almost certainly gives the hackers complete control—including the ability to install applications, execute malicious code, and download sensitive data—over any machine that installed the malicious download.
Vielleicht ist das eine gute Gelegenheit, dieses PHP endlich mal zu beerdigen.
By using sudo npm on a non-root user (root users do not have the same effect), filesystem permissions are being modified. For example, if I run sudo npm --help or sudo npm update -g, all commands starting with sudo npm cause my filesystem to change ownership of directories such as /etc, /usr, /boot, and other critical directories needed for running the system to the current user running the command.
Schon echt Qualität, dieses Node. Da weiß man doch, wieso man von PHP umgestiegen ist! (Danke, Gregor)
Deren Uhr scheint im Februar gelegentlich Probleme zu haben. Allerdings nur, wenn die Uhrzeit von GPS kommt. Bugbeschreibung:
today I noticed the counter was acting funny (scrambled digits, showing 72 minutes etc) so I checked the MEL
Das ist ein PHP-Forum, klickt da mal lieber nicht alle drauf. Ich zitiere mal den lustigen Teil (die Attachments da gehen eh nicht ohne Account). Boeing ist anscheinend auch betroffen.Ein anderer Pilot beschreibt das Problem so:
not long after departure yesterday our airborne was 10:0B, shortly after 10:0F. Not long after, total gibberish, then it reset itself. This also occurred on the ground as well just before another reset. The Zulu time display always appears to be OK but the stopwatch corrupts itself every now and again.
Und Saw it today in an A321. Last digit initially went to - and when it dedidee to behave itself it added seven hours to the elapsed time.
Na? Freut ihr euch auch schon so auf selbstfliegende Flugzeuge? :-)Oh, warte, haben wir ja schon! Heißt Drohne! (Danke, Felix)
hier jaulen gerade alle paar Minuten die Sirenen - aber ich habe keine Ahnung, wie ich heraus bekommen soll, weshalb. Die Seiten der Stadt antworten mit irrsinniger Verzögerung, wdr und Co. haben nichts Aktuelles, und viele andere Seiten, die vielleicht etwas haben könnten, sind nicht erreichbar. Das Radio gibt auch nichts her.Oje. Und wir machten uns über das Raketenwarnsystem der Amis lustig!Ich kann nur hoffen, dass das im Fall eines größeren Problems besser klappt, aber besonders viel Hoffnung habe ich natürlich nicht. Vermutlich würde die Stadt Duisburg dann erstmal Personal vom Straßenverkehrsamt in die Abteilung für, na ja, Web und Informationen, versetzen und anlernen müssen - und ein paar neue Server bestellen müssen. Hey, dafür ist die Homepage bunt. Was? Schnell soll sie sein? Hm. Ist aber anders realisiert :-)
Warum https://www.duisburg.de/orkanlage.php auf .php und nicht .html endet? Weil PHP so viel performanter ist als HTML? Seufz.
Ach so, mittlerweile ist die Seite da. Eine Erklärung, warum die Sirenen jaulten, gibt es allerdings nicht. Offenbar musste man nur auf den Sturm aufmerksam machen. Na ja, wer den Wind nicht hört, hört auch die Sirenen nicht…
Update: Hier ist übrigens die Erklärung, was die Sirenen-Signale bedeuten. Auf- und abschwellender Heulton heißt: Gefahr. Dauerton heißt: Entwarnung.
An older version of PHP in the vulnerable varieties had a use-after-free bug that opens a remote code execution vector.
(Danke, Richard)
Ich hatte die Schweizer übrigens auch mal im Blog. Quellenarbeit und Seriositätsbeurteilung von Medien ist der wichtigste Bestandteil von Medienkompetenz.
Ich hatte jetzt nicht den Eindruck, dass die besonders bekannt oder populär sind, aber das ändert sich ja dank der ARD jetzt. :-)
Update: ALLE Wordpress-Sites sind per Definition gammelig. Das war keine Aussage über den Inhalt. Wordpress ist eine stinkende PHP-Güllegrube.
Update: Die Schweizer haben sich zu den Vorwürfen geäußert. Leider, indem sie den Boten angreifen. Das ist der Erfahrung nach eines der klarsten Zeichen dafür, dass Vorwürfe gerechtfertigt sind — wenn der Angegriffene nicht die Vorwürfe entkräftet sondern den Boten angreift. Damit haben die sich keinen Gefallen getan. Sowas lässt man andere herausfinden und publizieren, und das ist ja auch in diesem Fall hier geschehen. Die Schweizer linken bloß kurz auf die. Trotzdem. Das hätte ich an deren Stelle nicht getan. Das ist eine Blöße, die man sich nicht geben muss.
Gut, in diesem Fall waren die Vorwürfe eher nebulös und da gab es nicht viel Substanz, die man hätte entkräften können. Und was an Substanz da war, hatten sie ja auch schon entkräftet. Wobei ich auch das nicht so gelungen fand, ehrlich gesagt. Ein Double Blind Peer Review ist ein völlig anderes Paar Schuhe als Journalismus. Dass die nicht ihren Namen nennen wollen, finde ich legitim. Da gibt es nichts zu verteidigen. Das ist ihr gutes Recht. Die ARD-Redakteurin merkt ja gerade am eigenen Leib, wie das ist, wenn man seinen Namen nennt. Da setzt man sich einem asymmetrischen Angriff von einer Horde Antagonisten aus. Das ist dann halt ein anderes journalistisches Niveau, wenn man seinen Namen nennt, und damit müssen die Schweizer leben, dass das weniger seriös aussieht ohne Namensnennung. Und hey, solange die Schweizer ohne Namensnennung noch seriöser aussehen als die ARD mit Namensnennung, haben sie ja nichts zu befürchten.
Wobei der Vorwurf, die ARD hätte ihre Foren geschlossen, auch eher peinlich wirkt, wenn bei den Schweizern auch keine Kommentare erlaubt sind.
Irgendeinen Grund muss es doch geben, egal auf welcher Seite der Barrikaden man jetzt persönlich steht, dass die Projekte anscheinend alle von fiesen weißen Misogynisten und Schwulenhassern geleitet werden.
Meine Projekte sind bisher zu klein, als dass ich da eine Welle aus Troglodyten hätte, gegen die ich Schutzwälle aufbauen müsste, aber zu meinen Usenet-Zeiten erinnere ich mich noch gut an die Wagenburg-Mentalität, die sich von ganz alleine aufbaute, weil gefühlt immer und immer wieder immer neue Idioten reinkamen und ganz selbstverständlich die selbe Scheiße von sich gaben, die vorher schon hundert und tausend Mal widerlegt wurde. Kommt natürlich auf die Gruppe an. Ich rede jetzt von technischen Gruppen.
Auf Mailinglisten war das ähnlich. Ich erinnere mich da an bugtraq und linux-kernel, die ich mal eine Weile abonniert hatte. Das war nicht auszuhalten. Die eine Hälfte der Regulars haben dann halt die Idioten alle ins Killfile getan, aber das hilft nur gegen Idioten, die länger da bleiben, nicht gegen eine Flut von unfähigen Newbies und "bringt mir mal kurz Hacken bei"-Klappspaten. Aus dieser Erfahrung kann ich mir gut vorstellen, dass sich bei größeren Projekten entweder ein Gleichgewicht einstellt, weil die Umgebung eben so lange unfreundlicher und abstoßender wird, bis das Flutproblem weg geht. Oder das Projekt stirbt halt. Oder vielleicht stirbt auch nur die Mailingliste und der einsame Wolf popelt noch insgeheim an seinem Projekt weiter. Oder der einsame Wolf hat unendlich Kraft und Geduld und reibt sich sein Leben lang an seiner Umwelt auf. Ein Schicksal, dass man seinem übelsten Feind nicht wünschen würde.
Für mich als steinalter Regular fühlt sich jedenfalls diese neue Welle aus Inklusivitäts-Schneeflocken genau wie die alte Welle der AOL-Idioten an. Gut, die fordern inhaltlich was anderes, aber praktisch ist da kein Unterschied. Die halten sich 100% im Recht, die Frage stellt sich überhaupt nicht für die, ob sie sich möglicherweise gerade wie Arschlöcher verhalten. Sie kommen rein, stellen Forderungen, und wenn die nicht sofort beantwortet werden — für freie Software, wohlgemerkt, an der niemand was verdient! —, dann kommen sie mit Geld-Zurück-Mentalität und drohen damit, schlechte Bewertungen zu hinterlassen. DIE Art von Person. So "ihr habt euch jetzt gefälligst alle nach mir zu richten"-Leute, die in ihrem Leben noch keine Leistung erbracht haben, außer andere zu drangsalieren. So fühlte sich das damals bei AOL an. Und ich kann da gerade aus der Ferne keinen großen Unterschied erkennen, muss ich sagen. Wenn ihr Schneeflocken euch so sicher seid, dass ihr besser wisst, wie man das macht, dann macht doch mal ein eigenes Projekt. Nein, nicht jemand anderes Arbeit forken. Kommt erst mal dahin, dass ihr Code habt, den jemand forken könnte. Ich kenne kein einziges erwähnenswertes Projekt von solchen Leuten. Nicht eines. Ich kenne die immer nur als marodierende Barbaren, die in anderer Leute Projekten einfallen und alles kaputtmachen und am Ende noch den Code annektieren und abforken wollen, der aus freien Stücken und nobler Grundhaltung der Welt kostenlos zur Verfügung gestellt wurde. Ich habe jetzt eine Weile versucht, Mitgefühl zu entwickeln. Es will mir nicht gelingen.
Dabei ist es so einfach, sich in einem Projekt Respekt zu erarbeiten. Leiste einfach was. Erwarte nichts als Gegenleistung. Problem: Jede Minute über dich oder deine Leistungen reden macht 10 Minuten tatsächliche Leistung kaputt.
Das sind die Regeln.
Niemand schuldet euch die freie Software, und niemand schuldet euch Support für die freie Software, und euch mitmachen zu lassen schuldet euch auch niemand. Wer herkommt und Forderungen stellt, der hat sich sofort 100 Minuspunkte erarbeitet. Daraufhin kriegt der erst Recht keine Hilfe mehr und wird im Gefühl bestärkt, in einer feindlichen Umgebung zu sein.
Ist alles so einfach, und so berechenbar. Niemand verhält sich hier irrational. Idioten wird es immer geben. Sei einfach keiner von ihnen. Ganz einfach!
Der Rant hier kommt daher, dass ich die Tage einen Bug in umatrix filen wollte. Der Autor hat das Bugtracking-System zugemacht. Oben stand klar und deutlich drüber: Keine Bugs für Seiten melden, die man sich kaputtkonfiguriert hat. Und die Leute haben das gesehen und trotzdem lauter solche Bugs aufgemacht. Also hat der Autor das Bugtracking-System zugemacht und jetzt ist es für alle Scheiße. Und ich bin mir fast sicher, dass keiner von denen sich im Unrecht wähnt, oder auch nur verstanden hat, dass er das gerade für alle kaputt gemacht hat. Die legen sich selbst gegenüber das bestimmt genau so zurecht, wie die SJWs sich die Welt zurechtlegen.
Völlig unvermittelt und ohne Provokation hat der fiese weiße Projektmaintainer seine Privilegien über den Github-Account genutzt, um mich zu unterdrücken, indem er meine Bugs nicht mehr annimmt! Da sieht man mal wieder, dass das nichts wird mit alten weißen Männer, die ihre Privilegien nicht gecheckt haben!1!!
Update: Kris hat einen "Gegenrant" dazu gemacht. Über den hab ich mich inhaltlich so geärgert, dass ich ihm eine lange böse Mail geschickt habe :-)
Es geht direkt mit einem Strohmann los, "programmers are able to do anything just because they are able to do one thing". Ich hatte tatsächlich das genaue Gegenteil davon behauptet. Dann fand ich seine Übersetzung an einer Stelle doof, aber Schwamm drüber. Auffällig fand ich, dass die Situation, die er beschreibt, genau die ist, die ich auch beschrieben habe. Nur dass er sie sich schönredet. Ich habe auch auf Mailinglisten und in Newsgroups rumgehangen und sogar die FAQ erstellt und geupdated. Ich habe wie Kris pro Tag 60 Minuten oder so damit verbracht, die Postings durchzugehen und jeweils den Link auf den FAQ-Eintrag zu mailen. Natürlich haben wir den Leuten auch erklärt, dass hier alle unentgeltlich arbeiten, und dass das ein Community-Projekt ist, und sie herzlich zum Mitmachen eingeladen sind, und zwar nicht nur Patches sondern auch Dokumentation und Community Management. Jeder nach seiner Fasson.
Aber aus meiner Perspektive ist das ein Todesmarsch durch die Wüste der Verdammnis. Eine Stunde pro Tag, die dir niemand zurück gibt. Klar hatte ich damals auch ein paar "Jünger", die das gut fanden und mitgeholfen haben. Aber im Wesentlichen habe ich da wie Sisyphos einen großen Stein einen Berg hochgerollt, und kam nicht voran.
Kris schildet genau das selbe, aber fokussiert sich auf die positiven Aspekte. Aus meiner Sicht ist das eine enorme Leistung, sich so zu bullshitten, dass man dieses nie endende Jammertal jahrelang erdulden kann, und am Ende noch der Meinung ist, man habe etwas zum Besseren gewandelt. Ich bin Kris übrigens ewig dankbar für seine Arbeit in de.comp.lang.php, denn die ganzen PHP-"Entwickler", die er da nicht rausgeekelt hat, sondern mit seiner Inklusivität ins Boot geholt hat, die haben die Altlasten hinterlassen, mit deren Aufräumen ich heute mein Brot verdiene :-)
Aber mit meiner ursprünglichen Fragestellung hat sein PHP-Community-Zeug nichts zu tun, denn er hat da eine User Community gepflegt. Bei vim (dem Editor) haben wir relativ früh die Mailingliste gespalten, in "für Developer" und "für User". Das hat gut funktioniert, weil die User-Fragen nicht mehr die Developer vom Arbeiten abgehalten haben. Aber ob da jetzt ein Kris bei der User-Mailingliste mithilft oder nicht, das spielt für meine Fragestellung keine Rolle, weil meine Frage ist, was man von den Autoren einer freien Software erwarten kann.
Ich bleibe bei meiner Linie, dass man von Fragestellern ein Mindestmaß an Respekt erwarten kann. Und dazu gehört: Filed keine Bugs, die schon jemand anderes gefiled hat. Stellt keine Fragen, die in der FAQ beantwortet werden, oder die im Archiv der letzten Woche schon mal beantwortet wurden. Nervt nicht rum, wenn euch niemand hilft, sondern versteht, dass das alles Freiwillige sind und bietet daher lieber von euch aus Hilfe an, als von anderen Hilfe einzufordern.
Das entglitt mir dann erstmal ein bisschen in einen Agile-Rant, den ich hier mal der Vollständigkeit halber wiedergeben will.
Ich sehe übrigens Extreme Programming und Agile Programming mit einem sehr kritischen Auge. Weil das aus meiner Sicht nämlich nichts mit dem Produkt oder der Entstehung des Produktes zu tun hat, sondern mit einer Kommoditisierung der Mitarbeiter.Ich kam dahin, weil mein Eindruck ist, dass diese Gleichmacherei (ist alles Programmieren) das Ziel hat, die Leute alle gleich behandeln zu können und austauschbar zu halten, damit man sie besser gegeneinander ausspielen kann. Meiner Beobachtung nach gibt es Leute, die möchten nicht im Großraumbüro sitzen, die lösen lieber Puzzles, als dass sie ihre Zeit in endlosen nicht zielführenden Meetings verplempern. Und es gibt Leute, die Meetings erfüllend finden. Das sind nicht die gleichen Leute. Es gibt Leute, die beides gerne machen, aber das sind echt wenige. Der Effekt von Kris' Weldbild ist dann auch (wie ich finde wenig überraschend), dass er sich wundert, wieso er so wenig fähige Programmierer findet.Ursprünglich hatte man Programmierer, Projektleiter, Tester und Admins.
Dann hat man gesagt, hey, wir machen jetzt agile, die Programmierer sollen auch mal die Projektleiter-Arbeit übernehmen.
Dann hat man gesagt, hey, wir machen jetzt Test Driven Development, die Programmierer sollen mal auch die Tester-Arbeit übernehmen.
Und dann hat man gesagt, hey, wir machen jetzt Devops, die Programmierer sollen mal auch die Admin-Arbeit übernehmen.
Ergebnis: Alle sind austauschbar. Die perfekte Basis für Lohnsenkungen und knallhartes Kaputtverhandeln des "Human Capital" aus Sicht des Bosses.
Aus meiner Sicht muss man in einer Firma den Anspruch haben, die Fähigkeiten der Mitarbeiter zu respektieren und nach Kräften zu nutzen. Nicht "du bringst jetzt auch mal den Müll runter". Da ist niemand glücklich mit.
Ich blogge das jetzt, weil ich nachts im Traum wild herumassoziiert habe, und eine Assoziation erschien mir brillant, als ich sie hatte. Später nicht mehr ganz so, aber vielleicht hilft es ja trotzdem. Und zwar fiel mir im Traum auf, dass es noch einen Bereich gibt, wo man alle Elemente gleichmacht, und dann dem Problem aussetzt, und erwartet, dass jeder alles kann und sie sich selbst organisieren: Machine Learning.
Die nächtliche Erleuchtung war also, dass solche Gleichmacherei in Firmen aus einer bestimmten Warte als Vorbereitung auf die Ersetzung der Mitarbeiter durch KI betrachtet werden könnte.
Wie vieles, das man im Traum für total brillant hält, ist das wahrscheinlich am Ende Bullshit. Aber ich dachte mir, ich erzähl das mal.
Update: Jetzt hab ich den Teil völlig vergessen, in dem ich sage, dass ich Kris grundsätzlich Recht gebe, aber solche Leute heißen bei mir nicht Programmierer sondern Projektleiter.
Update: Ein Einsender ergänzt:
bei den Ausführungen fehlt mir der "Full Stack Developer": damit soll der Programmierer auch noch die Arbeit des DB-Entwicklers und des UI/UX-Designers übernehmen.
Und wenn dann endlich jeder Programmierer perfektes agiles test-driven Full Stack DevOps kann, sind sie austauschbar wie eine Putzfrau oder der Fleischereifachverkäufer…
Stimmt, das hatte ich vergessen. Aber ein anderer Einsender hat noch etwas gefunden, das ich gar nicht kannte:
es gibt noch eine Steigerung zu Devops: Devsupps. Das findet man vor allem bei öffentlichen Auftraggebern. Bei III.2.3 findet man die folgende Formulierung: "Mindestens eine Referenz muss zusätzlich auch Programmierleistungen (in den Bereichen VB/VBA und PHP) umfassen, d.h. die Programmierleistungen müssen mit dem 2nd Level Support zusammen erbracht worden sein".
Solche und ähnliche Formulierungen findet man bei Ausschreibungen öffentlicher Auftraggeber immer häufiger.
Mit deiner Vermutung, dass hier Kosten gespart werden sollen, liegst du natürlich vollkommen richtig. Die Idee dahinter ist, dass hier Ausschreibungen für Individual-Software verhindert werden sollen und man das lieber über länger laufende, billigere, Support Verträge abwickeln will. Wenn man also eine neue Web-Datenbank braucht, stellt man da ein paar Supporter (fürs Supporter-Gehalt) ab und wenn die fertig ist, sollen die wieder Rechner aufstellen, Drucker austauschen etc.Eine Tätigkeit, die bei Zeitarbeitsfirmen im Osten der Republik mit rund 1800 Euro vergütet wird.
Wie sich das in der Qualität wiederspiegelt, kann man sich ja dann ausmalen.
Und die Punchline:
Security experts say the tool exploited a vulnerability that was discovered and developed by the National Security Agency of the United States.
Voll die Security, die diese Agency schafft, wa?Und die Krankenhäuser sind nicht alles:
Hackers using a tool stolen from the United States government conducted extensive cyberattacks on Friday that hit dozens of countries around the world, severely disrupting Britain’s public health system and wreaking havoc on computers elsewhere, including Russia.
Apropos Ransomware: Screenshot aus der S-Bahn Frankfurt.
Mir wird ja immer ganz schlecht, wenn ich mir vorstelle, wieviele Milliarden sinnlos als Lizenzgebühren für Windows auf solchen Info-Bildschirme ausgegeben wird.
Update: Ihr werdet jetzt sicher genau so schockiert sein wie ich, dass Virustotal eine 0% Erkennungsrate ausweist. Wie jetzt, Schlangenöl hilft nicht?! Fürs Archiv: Virustotal-Screenshot. Und wenn die AV-Hersteller wieder was von Behavior-Voodoo und Cloud-Magie erzählen, zeigt ihnen dieses Foto von einem Lab in einer Uni, bei der die Rechner der Reihe nach umkippen. Hier ist ein relativ apokalyptischer Feed. In Russland sind u.a. ne dicke Telco und das Innenministerium betroffen. Ja, äh, Leute, habt ihr alle noch nie von Patchen gehört!?
Hier gibt es übrigens Full Spectrum Cyber Pew Pew, falls ihr auf Wargames steht. Also den 80ies-Film jetzt.
Update: Bei diesem Dropper sehen die Erkennungsraten inzwischen schon besser aus, 32 von 62.
Update: Wer sein Full Spectrum Cyber auf wannacrypt eingeschränkt haben will: Übersicht.
Update: #ThanksObama!
Update: OH:
I can confirm FedEx was hit at an enterprise level. All computers to be shut down until Monday.
Ich bin mir fast sicher, dass Deutschland flächendeckend betroffen ist, aber alle schon im Wochenende waren, als die Fäkalien den Deckenventilator trafen.
Update: Diese Ransomware verbreitet sich im Intranet übrigens über die SMB-Lücke fort, die ich in den IoT-Folien als Belege dafür zitiert habe, dass die etablierten Sicherheitsexperten auch nicht wissen, wie man sichere Software schreibt. Das ist jetzt der 10. oder so Fall seit Anfang der Heise-Tour, dass eine Meldung kommt, die mir gerade zu 100% in die Argumentation passt. Ich fürchte mich gerade davor, da mein Karma auf Jahre hinaus verbraucht zu haben. Da muss ich dann wohl bald mal wieder einen Perl- oder PHP-Audit machen, um wieder Karma aufzubauen.
Update: Wannacrypt hatte einen DNS-basierten Kill-Switch drin. Der hat eine bestimmte Domain aufgelöst, und wenn die da ist, dann verbreitet er sich nicht weiter. Ein Typ hat das gesehen und die Domain registriert und da schlugen sofort tausende von Zugriffen auf.
Hacker hacken … die US-Präsidentschaftswahlen.
Wie weit wir gekommen sind! Früher haben Hacker bloß PHP-Webseiten gehackt und schmutzige Bilderchen hochgeladen.
New hotness: Das Ruby-Modul-Nachladesystem ist gammelig und stinkt.
Da hätte man eigentlich auch bei PHP bleiben können :-)
Das "Paket" bestand aus einer 11-Zeilen-Funktion, die einen String rechtsbündig formatiert.
Nein, wirklich!
Und das war als Dependency bei der halben JS-Welt mit dabei, u.a. bei React und Babel.
Und das ist nur der Anfang der Geschichte. Es stellt sich raus, dass es da ein "Paket" gibt, das herausfindet, ob eine Variable ein Array ist. Ein Einzeiler. Dieses "Paket" hat fast eine Million Downloads pro Tag.
Ein anderes "Paket" sagt, ob eine Zahl positiv ist. Dieses "Paket" liegt in Version 3.1 vor. Nein, wirklich!
Kann man sich gar nicht ausdenken.
Ich meine, gut, der Rest der Programmierwelt hat ja schon immer auf die Javascript-Leute herab geblickt. Sogar die PHP-Leute. Und wenn die PHP-Leute auf dich herabblicken, und du dann immer noch nicht merkst, dass du im Leben Fehler gemacht hast, dann ist dir möglicherweise einfach wirklich nicht zu helfen.
Das ist nun kein neues Phänomen, aber früher betraf das nur so kleine Webshop-Klitschen.
Anscheinend setzen die Großen auch keine bessere Technologie als so Gammel-PHP-Webseiten ein.
Seufz. Ich finde das ja immer schade, wenn sich meine Paranoia rückwirkend als berechtigt herausstellt.
Ich habe früh in meinem Leben mit Softwareentwicklung angefangen. Ich erinnere mich noch, wie ich in den 80er Jahren Weihnachtslieder in GW-BASIC programmiert habe, und eine sehr coole Benutzeroberfläche gebaut habe, bei der man mit den Pfeiltasten in einem Menü herumnavigieren konnte. Auf unserem Monochrom-Bildschirm in 80x25 sah das verdammt cool aus. Viel cooler als ein Großteil der anderen Software, die wir so im Einsatz hatten.Damals wie heute nagte der Gedanke in mir, irgendwo könnte das irgendjemand irgendwo besser können als ich. Also nicht im Sinne von: Der hat mehr Zeit investiert und mehr Erfahrung und ist daher effizienter. Nein. Besser im Sinne von: Wenn der sähe, wie ich hier herumkrautern muss, um zu meinen Ergebnissen zu kommen, dann würde der ein lautes Lachen nur mit Mühe unterdrücken können.
Besonders ausgeprägt ist diese Befürchtung immer in Verbindung mit Rock-Star-Firmen und mit Weltkonzernen, deren Software eine markführende Position besetzt. Ich will das mal konkret machen. Wenn ich mich mit Google treffe und über Suchmaschinenprogrammierung rede, dachte ich, dann würden die gar nicht verstehen, wovon ich rede, weil das für die wäre als würden sie sich mit einer Ameise unterhalten. Oder, so die Annahme, mit VMware könnte ich gar nicht über Hypervisor-Programmierung reden, weil die da ja wahrscheinlich auf einem so viel höheren Niveau ein Verständnis aufgebaut haben, dass ein Gespräch mit jemandem wie mir für die keinen Sinn ergeben würde.
Nun hat es sich ergeben, dass ich beruflich Software auf Sicherheitslücken absuche. Ich gehe zu großen Firmen, die zeigen mir ihren Quellcode, und ich zeige ihnen dann, wo sie Dinge falsch machen. Wie viele Menschen in dem Beruf habe ich das Impostor Syndrome, d.h. ich befürchte regelmäßig, dass gleich jemand erkennt, dass ich gar keine Ahnung von der hier gefragten Wissens-Domain habe, und dann entfernt mich die Security aus dem Gebäude.
Einen besonders krassen Fall von Impostor Syndrom hatte ich, als ich das erste Mal bei Microsoft Windows auditiert habe. Die hatten auch keine Ahnung, wie man sowas macht, und wen man da ranlässt, und hatten daher ein vergleichsweise weites Netz geworfen, um potentielle Auditoren zu finden. Ich für meinen Teil hatte so gut wie keine Erfahrung mit Windows. Ich hielt das für einen Irrtum, dass die mich da hin geholt hatten. Und dann geschah das Wunder von Redmond. Ich setze mich hin, gänzlich ohne Domain Knowledge, und fand mehr Bugs als die ganzen Leute mit Domain Knowledge.
Wie sich rausstellt, ist Domain Knowledge überbewertet. Und Microsoft war sich dessen stärker bewusst als ich.
Aber diese Gedankengänge verfolgen mich bei allen Kunden. Was macht Microsofts GUI-Zeug zum Marktführer? Gibt es da irgendwas, was die besonders großartig machen? Wie funktioniert das Memory Management von Windows? Hat der Hypervisor von VMware ESX im Vergleich zu Xen Roswell-Technologie im Einsatz? Was ist eigentlich der Unterschied zwischen Oracle und MySQL? Ist das wirklich so ein immenser Abstand?
Gelegentlich ergibt sich die Gelegenheit, mit einigen wichtigen Leuten mal ein Bierchen trinken zu gehen. Ich nutze sowas konsequent, weil es mein Weltbild enorm erweitert hat über die Jahre.
Einige der gewonnenen Einsichten möchte ich gerne mit euch teilen. Bei allen großen, wichtigen Weltprodukten, bei denen ich eine Einsicht in diesen Aspekt gewinnen konnte, war das anfangs mal ein Hack von drei Leuten. Also wörtlich jetzt. Drei Leute ist die typische Größe, mit der man großartige Produkte bauen kann. Wenn wir nur von einem Aspekt reden, der am Ende die Großartigkeit des Produktes zementiert hat, ist es häufig gar nur einer. Der 32-bit-Support von Windows 95 geht auf einen Typen zurück, der das Manual von Intel auf dem Schreibtisch hatte (das konnte man sich damals für fast lau per Post ordern oder gratis als PDF runterladen), und der die entsprechenden Absätze gelesen hatte, und der sich dachte, hey, das implementiere ich doch mal.
Der schönste Spruch in diese Richtung kam von einem Datenbank-Hersteller. "Wenn wir damals Datenbank-Leute eingestellt hätten, wären die großartig darin gewesen, uns zu sagen, warum soundso nicht geht. Daher haben wir Nicht-Datenbank-Leute eingestellt, und die haben dann einen Weg gefunden."
In meiner Erfahrung ist der größte Motivator in der Softwareentwicklung die Gewissheit, dass etwas substantiell besser geht. Eine schöne Anekdote dazu hörte ich vor einer Weile. Da ging es darum, dass ein Software-Hersteller mit einer Uni zusammenarbeitete, und die hatten eine coole Idee und die auch umgesetzt im Rahmen einer Forschungsarbeit, und die blies alles aus dem Wasser, was es in dem Feld gegeben hatte. Der Hersteller hat daraufhin sein eigenes Team an einen Tisch geholt, wieder mal die fast sprichwörtlichen drei wirklich fitten Leute, und hat denen gesagt: implementiert das mal. Ihr habt das nicht erfunden, daher erwarten wir nicht, dass euer Prototyp diese Uni-Lösung outperformed, aber zumindest bis auf 50% solltet ihr rankommen. Die drei fitten Leute sind losgezogen und haben einen Prototypen gehackt, und hatten offensichtlich eine völlig falsche Vorstellung davon, welche Baseline sie erreichen müssen. Als sie ein paar Wochen/Monate gehackt hatten, und ihren Prototypen zeigten, und jemand den gegen das Uni-Ding auf gleicher Hardware benchmarkte, war der (edit: ihr Prototyp) nicht etwa 50% langsamer (edit: als die Uni-Software) sondern über 50% schneller.
Niemand geht los, um langsame Software zu schreiben. Aber auf dem Weg brechen viele Leute ab, weil ihnen gesagt wird, die Dinge seien "schnell genug".
Neulich scrollte eine lustige Gegenüberstellung an mir vorbei. Da hat sich einer der Väter von Extreme Programming vorgenommen, jetzt mal einen Sudoku-Löser zu programmieren. Der hat mehrere Blogposts dazu gemacht. Er hatte ein festes Dogma, wie man an sowas herangeht, aber offensichtlich keine Vorstellung, wie man diese Art Problem löst. In den Blogeinträgen beschreibt er jeweils, wie er Tests programmiert und ein neues Darstellungsformat ausprobiert. Am Ende scheitert er. Die Gegenüberstellung ist ein relativ bekannter Google-Ingenieur. Der hat auch ein Blogposting geschrieben. "Ich schreibe jetzt mal einen Sudoku-Löser". Dann hat er sich hingesetzt, beschrieben, wie man sowas macht, und einen Löser geschrieben. Ein Blogpost.
Es ist einfach, nach sowas über Extreme Programming zu lachen. Aber ich glaube, dass wir über noch ganz andere Dinge lachen sollten. Ich glaube, dass wir einige sehr fundamentale Dinge in Sachen Softwareentwicklung schlicht noch nicht verstanden haben. Nicht nur das: Die Leute setzen systematisch Scheuklappen auf, um zu verhindern, sich damit auseinandersetzen zu müssen.
Ich habe einmal einen Code Audit einer Webplattform gemacht. Normalerweise drücken sich Auditoren um sowas, weil man befürchten muss, dass sowas in PHP oder — schlimmer noch — Perl geschrieben ist. Das sind klassische Write-Only-Programmiersprachen. Da kann nach einer Woche auch der Typ, der es geschrieben hat, nicht mehr sagen, was dieser Code hier eigentlich tun sollte. In diesem Fall war es Perl. Wir machten drei Kreuze und fingen an. Und jetzt der Schocker: Das war wunderbar lesbarer Perl-Code. Kommentiert. Minimal. Die Firma hatte beschlossen, dass das Verbessern von bestehendem Code genau so wertvoll ist wie das Schreiben neuen Codes. Eher noch wertvoller. Wenn ein Mitarbeiter inzwischen dazugelernt hat, dass man Problem X besser so löst als wie wir das damals gemacht haben, dann geht er hin und löst es so. Unlesbarer Code wurde konsequent nicht gedulded. Fiese Konstrukte wie eval waren verpönt und nur unter strikten Ausnahmeregelungen erlaubt. Dieser Perl-Code war besser auditierbar als der durchschnittliche C++-Code. Lektion: Es liegt nicht an der Programmiersprache. Es liegt daran, dass die Firma der Lesbarkeit von Code einen Wert zuweist.
Der oben erwähnte "war am Ende 50% schneller"-Code hat dem Management so gut gefallen, dass sie gesagt haben: Geil, shippen wir. Das war cooler Rockstar-Code, aber das war kein Produkt. Für eine Firma dieser Größe und Erfahrung war es kein Problem, aus dem Codehaufen ein Produkt zu machen, das technisch den Anforderungen genügte.
Aber wenn ich da jetzt als Auditor hinkomme und sage: Schaut mal hier, das ist eine schlechte Idee, ändert das mal lieber! Dann sagen die mir: Können wir nicht; Eine Änderung hier könnte unvorhergesehene Auswirkungen über das ganze Produkt haben. Das Risiko können wir nicht eingehen.
In fast allen Großkonzernen, in denen ich bisher Einblicke in diesen Aspekt gewinnen konnte, gibt es große Codemassen, deren Wartbarkeit Nahe Null ist. Weil die Firmen es nicht geschafft haben, ihre Mitarbeiter dazu zu motivieren, alten und schlechten Code Schritt für Schritt besser zu machen. Stattdessen gibt es üblicherweise eine Kultur des Drucks, neue Innovationen zu programmieren.
Es ist schockierend, wie wenige Jahre ins Land streichen mussten, bis aus einem innovativen Stück Rockstarcode ein unwartbarer Haufen Legacy geworden ist.
Zusammenfassung: Firmen überbewerten "wir müssen das ans Laufen bringen" und unterbewerten "wir müssen dafür sorgen, dass das auch wartbar ist". Es werden immense Geldmengen dafür verbrannt und Mitarbeiterberge damit verschlissen, ungepflegten alten Code weiter ungepflegt zu halten, aber noch Dinge ranzupflanschen. Ich glaube, wenn wir hier das Anreizsystem umdrehen könnten, könnten wir auf einen Schlag die Softwareentwicklung umkrempeln und Deutschland zum Weltmarktführer machen.
Update: Ich sollte vielleicht noch sagen, dass ich wirklich mit Google über Suchmaschinenprogrammierung geredet habe, und gesehen habe, wie in VMware der Hypervisor funktioniert. Nicht nur habe ich verstanden, wie die das machen, die haben das auch noch so gemacht, wie ich das auch gemacht hätte (bzw. habe; einen Hypervisor habe ich noch nicht programmiert, aber eine Suchmaschine. Stellt sich raus, dass die groben Strukturen, was man so für Datenstrukturen verwendet und so, bei Google und mir die selben waren. Na klar haben die auch noch ein paar Tricks, die ich nicht kannte). Das liegt nicht daran, dass ich ein toller Hecht bin, sondern dass fast alle Lösungen für fast alle Probleme naheliegend sind, wenn man ein bisschen über das Problem nachdenkt. Und dann gibt es jeweils noch Hardware-Einschränkungen, die bestimmen, welche Lösungsansätze überhaupt möglich oder zielführend sind. So viel bleibt da am Ende normalerweise nicht übrig. Ich halte es für ein wichtiges Ziel, dass Anwender den immer noch weit verbreiteten Respekt vor Software abbauen. Wenn man ein Haus hat, und zwei Zimmer, und man möchte gerne in der Mitte die Mauer weghaben und ein großes Zimmer haben, dann prüft man die Statik und dann macht man die Mauer weg. Wenn man anbauen will, baut man halt an. Da ist nichts magisches dran. Bei Software ist das auch so. Wenn Google ein Haus baut, dann brauchen sie dafür auch ein Fundament. Wenn Google ein selbstfahrendes Auto baut, dann hat das auch Räder. Und so sieht das bei Suchalgorithmen halt auch aus.
Update: Siehe auch
md5('240610708') == md5('QNKCDZO')Wie kann das sein? Na, gucken wir doch mal:
$ echo -n 240610708 | md5sum 0e462097431906509019562988736854 - $ echo -n QNKCDZO | md5sum 0e830400451993494058024219903391 -Da drängt sich eine Erklärung ja geradezu auf! (via)
Ich bin Lehrer und meiner Schule wurde vor einiger Zeit diese Qualitätssoftware angeboten: [Link rausgenommen]Wie so häufig stellt sich bei näherer Betrachtung heraus, dass das da draußen noch schlimmer ist als bisher angenommen.Ja, du siehst richtig. Das ist ein eierlegende Wollmilchsau Verwaltungsprogramm für Schulen, basierend auf PHP und MySQL gehostet auf "sicheren Servern" von Hetzner und so schönen Hinweisen an die Lehrer wie:"Geben sie nicht URL an andere weiter. Das macht es unsicher." Der Typ, der uns das vorgestellt hat meinte auch, dass auf einem Server 16 Schulen liegen. Meine Schule hat aufgrund ihrer Schulart jedes Jahr 200-300 neue Schüler, deren Daten da hübsch reingestopft werden. Das Ding berechnet Noten und Zeugnisse und hat damit alle sensiblen Daten. Dazu ist es natürlich auch noch eine Blackbox, weil keiner mehr ne Lust hat die Noten zu überprüfen.
Wird meines Wissens an mindestens einer zweistelligen Anzahl an Schulen eingesetzt und hat da das Papier und lokale Möglichkeiten ersetzt. O-Ton: "Ja, da machen sie am Ende eine DVD mit den PDFs der Zeugnisse fürs Archiv." Meine Bedenken wurden übrigens damit ausgeräumt, dass das Kultusministerium (in meinem Fall Bayern) das zertifizieren wird und dann sind wir sicher.
Kleines Detail noch: bayrischen Schulen haben oder bekommen erst dieses Jahr flächendeckend Datenschutzbeauftragte. https://www.datenschutz-bayern.de/tbs/tb25/k10.html#10.1
Die Kollegen fanden das toll, weil "es ja soviel Arbeit spart". Auf meinen Einwand, dass man das lokal machen könnte, kam das Argument, dass jemand den Server klauen könnte. Wir unterrichten übrigens auch Schüler mit Abschlüssen als Fachinformatiker etc.
Update: Der soll angeblich einen Auftragskiller angeheuert haben.
Update:
According to the filing, they found him through a combination of posting his personal @gmail.com address on the bitcointalk forum from the same account used to market Silkroad. Further, they found that his LinkedIn account somewhat corroborated the timeline/interest in what Silkroad is.
Ein Glück, dass die Kriminellen immer alle so dämlich sind. Nicht auszudenken, wenn es tatsächlich mal einen Moriarty gäbe.
Update: Eine andere Erklärung behauptet, er habe unter seinem Realnamen auf Stackoverflow um Hilfe gebeten und das sei inhaltlich um PHP und Tor Hidden Services gegangen. Nochmal eine ganz andere Theorie gibt es bei Forbes, nämlich dass die an der kanadischen Grenze ein Päckchen mit mehreren Fake-Ausweisen gefunden haben sollen, mit denen er Server im Ausland anmieten wollte. Das halte ich für wenig glaubwürdig, für Servermieten braucht man doch keine Ausweise. Mein Eindruck im Moment ist, dass die Journalisten die ganzen am Bust angeblich beteiligten Behörden befragen, und die haben sich vorher nicht abgesprochen, welche Legende die verbreiten wollen, und so gibt es jetzt halt eine Legende pro Behörde.
<? if ('9223372036854775807' == '9223372036854775808') { echo "hurz!\n"; } ?>
Und wer gerade in der Stimmung ist: Eine Familienpackung PHP-Bashing!
Entschuldigt mich kurz, ich muss mal dringend zur Toilette rennen…
Was kommt als nächstes, node.php?
Es geht um die KPN-Tochter Gemnet. KPN betreibt in Deutschland u.a. Eplus und Base.
Die BESTEN der BESTEN der BESTEN!
Update: Das war wohl "nur" die Webseite, nicht die CA, deren Kompromittierung sie gerade einräumen, aber ich persönlich würde auch der CA nicht mehr trauen, wenn die auf ihrer Webseite solche Anfängerfehler machen.
Update: Mhh, mhh, KPN … da war doch was…
Oh und wo wir gerade bei peinlichen Bugs mit Passwörtern waren: OS X Lion prüft über LDAP die Passwörter nicht. Da kommt man dann mit einem gültigen Usernamen rein, ohne dass das Passwort stimmen muss.
Update: Heise findet, dass T-Systems nicht Schuld ist. Aber von Fakten lasse ich mir doch einen schönen T-Systems-Rant nicht kaputtmachen hier!1!!
Ich freu mich schon auf die Schlagzeile, wenn die 4chan-Vandalen über diesen Haufen PHP-Müll herfallen und die Enquete-Kommission rickrollen.
Auf der anderen Seite haben die sich auch alle gegenseitig verdient. Karma is a bitch. :-)
Update: Nur weil die Vorurteile über Internet-Sprallos sind, habe ich nicht die Teilnehmer der Kommission alle als Sprallos bezeichnet. Haben Teile meiner Leser wirklich eine so geringe Lesekompetenz?
Lösung: sie rufen einfach zweimal gettimeofday auf!
Ich brauche einen größeren Facepalm-Smiley.
Update: M( (Danke, Andreas)
In diesem Sinne: Programmiert Assembler für die Weltrettung!
Oh und im Übrigen empfehle ich das Buch "The Design of Everyday Things". Inhaltlich überschneidet sich das ein bisschen, aber nicht viel. Lest daher beides. Kris' Ausführungen und das Buch. Ihr werdet nie wieder Webseiten oder Drehtüren mit den selben Augen sehen.
Mhh, wobei, vielleicht ist das ja ein Honeypot des BKA? Wie sonst sollen sie die Anschriften aller potenziellen Kinderschänder Deutschlands erheben?
Die Maßnahme richtet sich vor allem gegen Jugendbanden. Doch können auch Daten von Personen gesammelt werden, die "ein politisches, gewerkschaftliches oder wirtschaftliches Mandat" anstreben oder ausüben oder eine bedeutende Rolle im gesellschaftlichen, religiösen oder institutionellen Leben spielen.
Update: gibt sogar schon einen Bug von 2002 dazu :-)
Im Vorstand sitzen KPMG, PwC und Interxion, ein echtes Dream Team, wenn es um Sicherheits-Knowhow geht. Auch ansonsten die ranghöchsten IT-Security-Experten, die sie finden konnten. Ich verstehe nur nicht, wieso da Symantec nicht mitmacht. Die würden da echt zu passen. Sogar eine PR-Agentur ist dabei! Bwahahaha. Im wissenschaftlichen Beirat sitzen zwei Juristen und ein Professor aus der Verwaltung. Dann gibt es da noch einen Exekutivbeirat (was soll das eigentlich sein? Exekutiv oder Beirat?) mit lauter Politikern.
Aber halt, keine IT-Security-Lachnummer wäre perfekt ohne ein "Kompetenzzentrum", bei dem es sich offenbar um eine Vermarktungsplattform für die Mitglieder handelt. Bei "Software-Sicherheit" findet man jedenfalls einen PR-Blurb und eine Weiterleitung zu Compuware, und an die denke ich auch immer ZUERST, wenn ich an Software-Sicherheit denke! Was die DA schon geleistet haben, das weiß JEDER in der Branche!1!!
Update: siehe auch … *schenkelklopf* (einmal alles von php über openssl, zlib und pcre in alt und unsicher, und register_globals ist auch noch On)
Key enhancements in PHP 5.2.5 include:- Upgraded PCRE to version 7.3
Und nun schauen wir mal auf diese Meldung von letzter Woche zum Thema Bugs in PCRE:Betroffen sind die Versionen 6.x und 7.x, in der offiziellen Version 7.4 sind die Fehler behoben.Es war ja bekannt, dass PHP eine Lachnummer ist, aber das finde ich jetzt doch ziemlich grob.
Update: Stellt sich raus, dass die Sicherheitslücken schon in PCRE 7.3 gefixt waren, dafür haben sie dort andere Dinge kaputt gemacht. PHP liefert also nicht unsichere, sondern nur kaputte Software aus.
Ein großes Potenzial für effizienteren Stromverbrauch sieht Schmidt in der Software-Entwicklung: "Schlecht geschriebener Code ist ein Klimakiller." Denn wenn der Prozessor wegen komplizierter Software-Befehle mehr arbeiten muss als nötig, wird entsprechend mehr Strom verbraucht. "Wir haben durch schlecht geschriebene PHP-Skripte eine hohe Ressourcenbelastung", sagt Schmidt.Gut, so richtig ernst zu nehmen ist der Artikel nicht. Sie sagen nie, wer dieser Herr Schmidt eigentlich ist (offenbar jemand von Strato).
Nun, das sah jemand anders, und hat dieses Statement im studivz-Blog geblogt :-) Irgendwas sagt mir, daß das keiner der Mitarbeiter von StudiVZ war, aber ich könnte mich da auch irren jetzt.
Update: (1:00) Boah das war ja schnell weg. Hat nicht mal ne Stunde gehalten. (1:05) Dafür ist es gerade unter 115 abrufbar. Na ein Glück, daß mir das jemand per IM gesagt hat, als ich gerade geguckt habe :-)
Update: jetzt (1:09) ist das ganze Blog weg.
Wißt ihr, das ist genau der Grund, wieso ich mein Blog lieber selber hacke, als dieses ganze PHP-Gerotze einzusetzen. Gerüchten zufolge funktioniert der Exploit nur, wenn register_globals=on ist; das wäre noch mal einer drauf. Damit werden seit 10 Jahren PHP-n00bs geownt. Das ist wirklich besonders hart, mit so einer Konfiguration dann dem Spiegel zu sagen, man habe ein sicheres System am Start.
Obol is a specialized high-level programming language for security protocols. […] The language is interpreted, and the runtime written in Java.
But wait, there's more!vtmalloc is a fast memory allocator for multi-threaded applications and Tcl. It provides low contention and the ability to return memory to the system.
Ooooh NOCH mehr:SpadFS is an attempt to combine features of advanced filesystems […] crash recovery […] journaling […] hash […] btree]Changes: The main fixes are some spadfsck crashes and creating bad directory entries when a user tried to create s filename longer than 255 characters.
Oh Mann, und NOCH so einer:The Akelos Framework is a PHP4 and PHP5 port of the Ruby on Rails Web development framework.
OH NOOOOOOOO!OMFG, und hier ist noch ein schöner, damit hier nicht immer nur schlechte Nachrichten kommen:
sendmail 8.14.0.Beta4: Changes: Header field values are now 8-bit clean. […] This release also contains various bug features, […]
4. Use full paths in includes and requires, less time spent on resolving the OS paths.
5. If you need to find out the time when the script started executing, $_SERVER['REQUEST_TIME'] is preferred to time() […]
9. Error suppression with @ is very slow. […]
11. Error messages are expensive
Da bleiben keine Fragen offen, oder?
"The Web is broken and it's all your fault."Those are the words that Rasmus Lerdorf, the creator of PHP, said to kick off his keynote at the php|works conference under way here.
Nee, klar. Nicht PHP ist Schuld, die Leute sind alle schuld! Ich staune, daß er nicht die Webserver beschimpft! Oh, warte:Lerdorf advised PHP developers that nothing that comes across the wire is to be trusted. Header "stupidity," as Lerdorf referred to it in Apache HTTP Web server, can also be the root cause for the broken Web.
Soso. Da kann man doch bestimmt auch noch die Browser irgendwie anpinkeln, oder? Klar! Then there is Microsoft's Internet Explorer, which has "stupidity" issues with character set detection, arbitrary header injection, host header spoofing and request splitting.
Auffallend, wie alle außer ihm Schuld sind…Aber wartet, da kommt noch mehr! Er erzählt den Entwickler, wie sie PHP-Anwendungen beschleunigen können. Und der erste Tip: MySQL statt Postgres!
One performance enhancement that Lerdorf suggested based on code analysis was to use MySQL instead of PostgreSQL for the database."If you can fit your problem into what MySQL can handle it's very fast," Lerdorf said. "You can gain quite a bit of performance."
For the items that MySQL doesn't handle as well as PostgreSQL, Lerdorf noted that some features can be emulated in PHP itself, and you still end up with a net performance boost.
Aus mir völlig unbegreiflichen Gründen sehen die PostgreSQL-Leute das anders :-)
PHP is a minor evil perpetrated and created by incompetent amateurs, whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals.
For the record: ich finde beide vergleichbar verheerend.
eXcavator is an XML query processing class for PHP. Queries are constructed using a small query language, and query results are returned as either loosely formed or strict XML, in formats suitable for both text and HTML.[…]
Und gleich noch einen hinterher:peppy ((ap)Proximated (X)Emacs Powered by Python) is a wxPython/Scintilla-based editor written in and extensible through Python. It attempts to provide an XEmacs-like multi-window, multi-tabbed interface.
Warum bloggst Du?
Es fing als Linksammlung für den jährlich auf dem CCC Congress stattfindenden Fnord Jahresrückblick an. Über Blogger habe ich mich ja jahrelang lustig gemacht, vor allem auch weil sie alle so schlechte PHP/Perl/Python/Java/Whatever Knödelsoftware einsetzen, und sich da lauter New Age Dinge wie Trackback, Kommentarfunktion und XMLRPC ausdenken, um dann prompt für die damit einhergehenden Probleme neue Lösungen brauchen — eine veritable Arbeitsplatzbeschafftungsmaschine! Und so war klar, daß ich eine eigene Blogsoftware brauchen würde, in C geschrieben, mit tinyldap als Backend, und sei es nur um zu zeigen, daß das geht. :-)
Seit wann bloggst Du?
Seit dem 31. März 2005. Die 1. Meldung war, daß malaysische Autodiebe den Finger mitgeklaut haben, um an der Biometrie vorbei zu kommen.
Selbstportrait
(etwas älteres Bild)
Warum lesen Deine Leser Dein Blog?
Gute Frage. Ich habe das mal rauszufinden versucht vor einer Weile, und da schrieben mir mehrere Leute, daß sie mein Blog als Nachrichtenquelle nutzen.
Welche war die letzte Suchanfrage, über die jemand auf Deine Seite kam?
blog bei google.de (kraß, wa?)
Welcher Deiner Blogeinträge bekam zu Unrecht zu wenig Aufmerksamkeit?
Mhh, könnte ich jetzt keine konkrete nennen.
Dein aktuelles Lieblingsblog?
Das des ehemaligen Nachrichtenmagazins aus Hamburg. Oh, nur Blogs ohne Werbeeinblendungen? Na gut, dann Holgi und Susanne.
Welches Blog hast Du zuletzt gelesen
Metafilter.
Wie viele Feeds hast Du gerade im Moment abonniert?
Keine. Ich lese Blogs im Webbrowser. RSS kostet mich mehr Zeit als es einzusparen versprochen hatte.
An welche vier Blogs wirfst Du das Stöckchen weiter und warum?
Ich bewerfe doch keine harmlosen Blogs mit Stöckern!1!! Nee, das propagiert sich schon von alleine weiter.
Irving is intended to be the simplest and quickest way to get from a MySQL database schema to the beginnings of a PHP application. It helps provide early insight into an application's operation, insofar as that is determined by the schema. Data-wise, the full panoply of C - R - U - D (create, retrieve, update, delete) operations is included. You'll still need PHPMyAdmin for schema operations.
Und weil wir so lange keinen hatten:libwrapiter is a C++ pure template library. It makes it easy to define generic iterator wrappers, which remove the need to expose underlying data structures when working with classes using STL containers.
TARIFA, which stands for Transactions by AssembleR Instrumentation FrAmework, aims to provide the "atomic" keyword to C/C++ for better support of concurrency programming. Instead of using lock-based designs with all their problems (deadlocks, difficult design, lack of reusability), the "atomic" keyword provides transparent access to an underlying Software Transactional Memory which is responsible for all synchronization work.
Sehr lobenswert, endlich kein Locking mehr!1!! Oh, warte mal, wie implementiert er seine Atomizität? *nachguck* Oh, mit cmpxchg (vulgo: mit Locks)! *stöhn*MySysop is a PHP tool with AJAX support for managing MySQL server settings and monitoring process, variables, and status.
*Bingo*!
PHPUsenet is a set of scripts that allow you to mirror a newsgroup in an SQL database. Users can read posts, browse, search, reply, and start new threads. Multiple newsgroups are supported for one frontend. The posting facility can be password protected.
Und woran denkt man zuerst, wenn man PHP und SQL in einem Satz liest?Changes: Fixes improper sanitization of the "group" URL parameter.
Richtig, SQL Injection.Ausnahmsweise noch eine Zugabe:
osinfo reports the type, the version, the architecture, and the kernel of the Linux distribution you are running.
uname, anyone?
phpsniffer is a packet sniffer for ICMP, UDP, and TCP written entirely in PHP without any PECL/PEAR extensions.
gatlings Logformat verteilt seine Zugriffe auf mehrere Zeilen, damit man Statistiken über Sachen machen kann, die man sonst nicht sehen kann. Hier ist ein Beispiel:
Hier kann man an den Zeitstempeln sehen, wie viel Zeit zwischen dem Connect und der eigentlichen Anfrage vergangen ist (und so z.B. sehen, wenn jemand nur connected, dann keine Anfrage stellt, aber die Verbindung offen hält). Für eine Referrer-Analyse. Der Nachteil ist: wenn man nach GET grept, sieht man nicht die verbindende IP-Adresse. Daher habe ich ein kleines Skript namens "acc.pl" gehackt, das das zurück zuordnet. Kein Ding, 24 Zeilen, der formatiert auch noch etwas um.@400000004482340c3386c9cc accept 33 217.20.118.153 38748 1
@400000004482340c33933d4c GET/CGI 33 /rss.xml 0 Mozilla/5.0_(Windows;_U;_Windows_NT_5.1;_en-US;_rv:1.7.10)_Gecko/20050716_Firefox/1.0.6 [no_referrer] blog.fefe.de
@400000004482340c3395d174 cgi_fork 33 62 25805
@400000004482340d27f174cc cgiproxy_read0 62 159 10101
Die zweite Aufgabe ist etwas involvierter, nämlich soll da geguckt werden, welche Links extern referenziert werden. Ich möchte sehen, wer auf meine Meldungen linkt, welche Meldungen besonders häufig verlinkt werden, und von wo sie am meisten Hits zu mir tragen. Das ist gut, weil ich so auch Missbrauch sehen kann, wie z.B. als ich neulich über 1000 Hits pro Tag von irgendwelchen Foren-Sites auf ein Bild bei mir hatte. Dieses Skript nannte ich "deep-links", und es ist ähnlich komplex, 34 Zeilen perl. So, und jetzt schaut euch mal das typische Zeitverhalten an:
Gut, die Kiste ist nicht die schnellste, und das waren die Logdaten von mehreren Tagen, ein paar MB kommen da zusammen. In C ist das deutlich komplexer, weil es da keinen System-Hashing-Code gibt, und weil man da mehr Error Checking machen muss und mehr explizit hinschreiben muss, und so ist acc.c 136 Zeilen lang, und referrer.c 190 Zeilen. Ein deutlicher Sprung in Komplexität, keine Frage, aber schaut euch das Zeitverhalten für die selben Daten auf dem selben Rechner an:perl ~/acc.pl 5.99s user 0.07s system 81% cpu 7.449 total
deep-links 1.23s user 0.06s system 17% cpu 7.560 total
Und das ist der Grund, wieso perl und co ja ganz nett sind, aber man am Ende eben doch C nehmen will.acc 0.40s user 0.05s system 78% cpu 0.574 total
referrer 0.06s user 0.02s system 13% cpu 0.573 total
Python und Ruby sind übrigens noch viel langsamer als perl, von PHP mal ganz zu schweigen.
Eine andere häufig gehörte Ausrede ist, daß das ja keine Rolle spielt, ob eine kurze Aufgabe 0.2 oder 2 Sekunden braucht, das sei ja weniger Unterschied, als man bräuchte, um sich darüber aufzuregen. Das halte ich für groben Unfug. Es gab da Studien, aber mal von mir ganz persönlich aus gesprochen: auf den Computer warten zu müssen macht schlechte Laune. Das macht sogar so viel schlechte Laune, daß die Leute sich alle paar Jahre neue kaufen, obwohl ihr alter noch prima funktioniert. Schon eine halbe Sekunde ist spürbar zu langsam. Ich habe mal mit einem Aktientrader zu tun gehabt, und der hatte für seine Software das Ziel, daß die Software schneller den Bildschirm updaten (und auf Tastendrücke reagieren) muss, als der Bildschirm für seinen Refresh braucht. Das ist jetzt viele Jahre her, daß ich mit dem Mann zu tun hatte, aber denkt mal drüber nach. Im Grunde hat er Recht. Wenn ich auf meinem Rechner 5 Megabyte Logs durchgefummelt haben will, dann ist es bei 1,8 GHz nicht vertretbar, daß ich da länger als ne Sekunde drauf waren muss.
Ich beobachte aber auch, wie immer weniger Leute bereit sind, überhaupt hinreichend Energie in etwas zu investieren, um sich damit jemals in die Nähe einer Perspektive zu bringen, Hacker zu werden. Natürlich kann nicht jeder überall der Oberheld sein, aber ich erwarte schon von jedem, daß er genug Ausdauer hat, sich in zumindest ein Thema mal tiefschürfend genug einzuarbeiten, daß ihm dort keiner mehr etwas vormachen kann. Und das kann ich immer weniger beobachten. Die Leute tendieren heute eher zu einer Art Universal-Durchschnitt. Die Abstände zwischen tollen neuen Hype-Trends werden immer kleiner, keiner hat mehr Zeit und Lust, sich die Sachen genauer anzugucken. Als ich jung war (*hust*), kamen PCs noch mit Handbüchern, in denen alle Befehle von GWBASIC beschrieben wurde, genau so wie debug.com und link.exe. Später wurden diese Sachen nicht mal mehr mitgeliefert. Ich war jung und hatte Zeit und habe mir das dann eben in Ruhe angeguckt. Ich enthülle hiermit: man wird Hacker, indem man Zeit hat und sie aufwendet, um sich mit einem Thema gut genug auszukennen, daß man mehr weiß als die Autoren der Standard-Fachliteratur zum Thema. Je nach eigenem Anspruch kann man sich auch nur dann Hacker nennen, wenn man sich in einem Gebiet erschöpfend auskennt, zu dem es (noch) gar keine Literatur gibt… :-)
Und dabei waren die Voraussetzungen noch nie so gut wie heute zum Hacker-Werden! Es gibt heute freie Betriebssysteme mit Editor, Compiler, Assembler und Linker kostenlos im Internet — mit Quellcode! Es kostet nichts mehr (außer Zeit), sich in die Sachen richtig gut einzuarbeiten! Man muss nicht mal Bücher kaufen, und heutzutage gibt es Suchmaschinen. Ihr wißt ja gar nicht, was das für ein Luxus ist, Kinder!
Zurück zum Thema. Heute kann jeder Hacker werden, der nur genug Zeit investiert. Als Hacker gewinnt man enorm an Selbstsicherheit, man ist gefragt auf dem Arbeitsmarkt, alles ist prima, aber aus irgendeinem Grund werden die Leute heute nicht mehr Hacker. Stattdessen hat die Verfügbarkeit freier Software zu einer Anspruchshaltung geführt, daß die Leute finden, wenn man schon nichts für Download und Installation zahlen muss, dann muss man auch danach keinen Aufwand investieren müssen. Den Nachwuchs in meinem Bekanntenkreis wird eher so High-Level-Fummler, klickt sich GUI-Anwendungen in einer IDE zusammen, hackt ein Python-Skript zum Mail-Sortieren, hat ein bißchen Java aus der Uni mitgenommen, steigt gerade auf C# um, sowas. Womit ich das nicht abwerten will, aber Hacken ist was anderes.
Es ist besser, in einer Sprache richtig gut als in 20 Sprachen Anfänger zu sein. Denkt da ruhig mal aus Sicht eines HR-Menschen drüber nach. Stellt euch vor, ihr seit der Headhunter, und ihr wäret mit einem Lebenslauf konfrontiert, bei dem jemand ein paar Applets (das klingt schon von alleine mittelmäßig und irgendwie abwertend) in Java gemacht hat, der gerade Windows Forms in Visual C# zusammenklicken lernt, der ein paar dynamische Webseiten mit PHP gemacht hat. Für was für einen Job soll so jemand denn bitte qualifiziert sein? Zum ct Lesen? Anspruchsvolle Jobs kann man so jemandem doch gar nicht geben! Wer sich nur oberflächlich mit Sachen beschäftigt, der wird auch nur oberflächliche Jobs bekommen. Was für eine grauenvolle Vorstellung… Insofern: setzt euch hin, sucht euch etwas aus, das ihr am besten noch nicht kennt, und arbeitet euch richtig tief ein. Nehmt euch dafür ein paar Monate. Hört erst auf, wenn ihr das Gefühl habt, selbst der Erfinder der Sache könnte euch nichts wirklich überraschendes mehr dazu erzählen. Solche Leute braucht das Land, nicht noch mehr Visual Basic Pfuscher.
In meinen Augen sind die meisten aktuellen Trends völlig überflüssig. Ich programmiere weder in Java, noch in C#, noch in Dylan. Ich spreche kein Python, kein PHP, kein Ruby, schon gar nicht Ruby On Rails. Ich benutze keine Middleware, keine Frameworks, keine Design Patterns (also ja, natürlich benutze ich Design Patterns, jeder benutzt Design Patterns. Aber ich benutze sie einfach so, nicht weil ich das in einem Buch gelesen habe). Gemessen am Stand der Technik bin ich auch in C++ und Perl eher Fußgänger als Rennfahrer. Ich benutze kein XML, kein CORBA, kein XML-RPC, kein SOAP. Wenn ich mal ein GUI für eine Anwendung brauche, wird es halt eine Webanwendung. Und zwar HTML, kein Javascript, und schon gar kein AJAX. Qt, Gtk, Motif? Am Ende gar noch mit KDE oder GNOME drüber gelayert? In der Zeit, bis ich mich da ordentlich eingearbeitet habe, schreibe ich lieber einen LDAP-Server. Wieso ordentlich einarbeiten und nicht einfach loshacken, höre ich da? Eine Sache, die es nicht wert ist, ordentlich gemacht zu werden, ist es nicht wert, überhaupt gemacht zu werden.
Und das sage ich euch: der nächste, der mich mit AJAX belästigt, wird einen furchtbaren, grausam verstümmelnden Unfall haben.