19. Februar

Security-Fix für REDAXOs TinyMCE-AddOn

von Christoph 3 Kommentare

REDAXO-Logo Das Standard-TinyMCE-Modul aus REDAXO enthält einen Fehler, über den es möglich ist, (fast) beliebigen Code auszuführen. Der Inhalt des Editors wird über die HEREDOC-Syntax abgerufen. In dieser findet jedoch die Interpolation von bestimmten Elementen (bekanntestes Beispiel sind einfache Variablen) statt. Über die {${foo()}}-Syntax ist es nun möglich, Code auszuführen.

Folgende Eingaben sollte man im Backend lieber nicht tätigen:

  • $REX
  • {${print("hallo")}}
  • {${print_r($REX)}}
  • {${mysql_query("UPDATE rex_user SET name = 'Pwned!' WHERE 1")}}
  • hallo
    EOD;
    noch mehr text.

Die ersten vier Eingaben sind noch relativ harmlos. Die letzte wird hingegen zu einem Parse Error führen (Achtung: Der Artikel kann dann auch nicht mehr ohne Weiteres im Backend bearbeitet werden!) und vermutlich nur bei deaktiviertem JavaScript funktionieren, da der TinyMCE sonst keine Zeilenumbrüche zulässt.

Bei Installationen mit nur einem Benutzer dürfte sich dieses Problem nicht äußern, da man sich eher selten selber hacked. Wenn allerdings in einem REDAXO mehrere Benutzer mit teilweise eingeschränkten Rechten existieren, kann es gut möglich sein, dass Alice und Bob nach ihrer Kündigung erstmal noch die halbe Datenbank löschen, bevor sie ihren Schreibtisch aufräumen. Immerhin können sie problemlos Datenbank-Queries ausführen lassen.

Unser Patch baut auf das TinyMCE-AddOn aus REDAXO 4.2.1 auf und verändert es so, dass zwei neue Variablen eingeführt: REX_SQ_VALUE für Single-Quoted-Strings und REX_DQ_VALUE für Double-Quoted-Strings. Diese neuen Platzhalter können, wenn das AddOn aktiv ist, in allen Modulen genutzt werden. Sie werden wie folgt genutzt:

$foo = 'REX_SQ_VALUE[1]';
$bar = "Mi nomo estas REX_DQ_VALUE[2].";

Durch die gesonderte Angabe des enthaltenen Strings ist es möglich, ein korrektes Escaping durchzuführen.

Der Patch ist unter MIT-Lizenz veröffentlicht und kann hier in Form einer Patchdatei (für die Nerds unter unseren Lesern) oder als gezip’tes AddOn heruntergeladen werden.

Das grundlegende Problem, Texte über HEREDOC-Syntax auszulesen, ist damit natürlich nicht behoben. Wer kann, sollte zur NOWDOC-Syntax aus PHP 5.3 greifen. Alle anderen sollten aufpassen, nicht aus Versehen Eingaben von Besuchern über HEREDOCs auszulesen.

19. Februar

REDAXO auf die Sprünge helfen

von Christoph 2 Kommentare

Nachdem wir bereits besprochen haben, wie man die Datenbank allgemein glücklich(er) machen kann, wollen wir das Gelernte heute direkt praktisch anwenden. Natürlich gibt es jetzt keine neue Version von REDAXO, in der auf Biegen und Brechen die Queries optimiert wurden, dafür aber ein kleines SQL-Script, das die Performance größerer Seiten (alles ab 200 Artikeln wird davon profitieren) wesentlich verbessern kann.

ALTER TABLE rex_article
    ADD INDEX `id` (`id`),
    ADD INDEX `clang` (`clang`),
    ADD UNIQUE INDEX `artikel_finden` (`id`, `clang`),
    ADD INDEX `re_id` (`re_id`);
 
ALTER TABLE rex_article_slice
    ADD INDEX `id` (`id`),
    ADD INDEX `clang` (`clang`),
    ADD INDEX `re_article_slice_id` (`re_article_slice_id`),
    ADD INDEX `article_id` (`article_id`),
    ADD INDEX `slices_finden` (`clang`, `article_id`);
 
ALTER TABLE rex_file
    ADD INDEX `re_file_id` (`re_file_id`),
    ADD INDEX `category_id` (`category_id`);
 
ALTER TABLE rex_file_category
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`id`),
    ADD INDEX `re_id` (`re_id`);
 
ALTER TABLE rex_module
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`id`),
    ADD INDEX `category_id` (`category_id`);
 
ALTER TABLE rex_user
    ADD UNIQUE INDEX `login` (`login`(50));

Das gesamte Script (unglaubliche 1 KB, wovon nur 0,5 KB eigentlicher Code sind) kann man sich der Bequemlichkeit halber natürlich auch direkt herunterladen.

Bei kleinen Seiten ist der Unterschied nicht zu bemerken. Gerade, wenn alle Inhalte im Cache liegen und immer nur brav über die REDAXO-API die Daten von Artikeln angefragt werden, bringen die zusätzlichen Indizes kaum etwas. Wer jedoch in AddOns durchaus etwas mehr Daten anfasst (zum Beispiel, wenn ganze Sprachinhalte kopiert werden sollen), wird dramatische Verbesserungen bemerken.

Eine semantische Änderung sollte noch angesprochen werden, damit sich niemand später beschwert: bei den Medienkategorien geht der Primärindex nun nicht mehr über die ID und den Titel, sondern nur noch über die ID. Wir haben bei bestem Willen nicht erraten können, warum der Titel einer Kategorie Teil des Primärindex sein sollte.

19. Februar

Der Weg zum eigenen Unternehmen – Teil 4

von Christian Metzeler Ein Kommentar


Es ist schon fast eineinhalb Jahre her, dass ich die Beitragsreihe “Der Weg zum eigenen Unternehmen” geschrieben habe. Im dritten Teil kündigte ich an, mich im vierten Teil mit den ersten Monaten Betrieb und einigen Zahlen auseinanderzusetzen. Das mit den Zahlen habe ich zwischenzeitlich gemacht, aber einen echten vierten Teil gab es nicht. Daher schreibe ich jetzt mal mit der Perspektive auf ein komplettes Geschäftsjahr mit vielen Ereignissen diesen Teil.

Denn der durchaus erfolgreiche Verlauf des Jahres 2009, das bei uns kein Krisenjahr war, hat uns auch gewisse Probleme beschert. Und diese sind besonders interessant, denn Erfolg kann einem auch Kopfschmerzen bereiten. Besonders erfolgreich war beispielsweise, dass für den Auftrag für die technische Umsetzung des Projekts Pharmatching.com gewonnen haben. Für dessen technische Betreuung sind wir auch weiterhin zuständig (und haben übrigens heute ein kleines Resdesign live geschaltet). Das Projekt war unser größter Einzelauftrag in 2009 und hat einen gewissen Anteil am Wachstum der Firma gehabt. Immerhin sind wir mit 5 Mitarbeitern ins Jahr 2009 reingegangen und mit 9 haben wir es beendet. Auch die engere, schon freundschaftliche Zusammenarbeit mit unseren Partnern von UCD+ hat dazu beigetragen. Aber dieses Wachstum hat uns auch Probleme beschert, denn wir mussten erkennen, dass wir mit diesem Wachstum auch unsere Organisation verbessern müssen. Insbesondere das Projektmanagement müssen wir noch verbessern. Hier haben wir in den letzten Monaten durch die Nutzung von GoogleWave (für kleinere, nicht sicherheitskritische Projekte) schon einige Fortschritte erzielen können.

Wo wir auch was tun mussten (und getan haben), war die Qualitätssicherung. Zunächst haben wir diese durch den Entwickler selbst durchführen lassen. Das war eher minder erfolgreich, denn der Entwickler eines Projekts ist ein schlechter Kontrolleur seiner eigenen Arbeit. Als nächsten Schritt haben wir zwei externe Mitarbeiter mit dem Prüfen fertiggestellter Redaxo- und Typo3-Projekte herangezogen. Das war zwar schon ein Fortschritt, aber so richtig gut hat das immer noch nicht funktioniert, weil diese als Nicht-Entwickler zwar in Front- und Backend Fehler aufspüren konnten, aber nicht im Code. Seit Anfang 2010 ist nun einer unserer Entwickler sozusagen Halbzeit mit der Qualitätskontrolle betraut und wird jedem Taks eines jeden Projekt als QA-Manager zugewiesen. Für ihn ist das natürlich eine erhebliche Arbeit. Aber für die Entwickler dieser Projekte ergeben sich dadurch haufenweise QA-Tasks. Somit verlassen unser Projekte den Laden nun tatsächlich mit einer höheren Qualität. Im Nachhinein erspart uns das zusätzlichen Zeitaufwand, um ein bereits abgeschlossenes Projekt nicht wieder öffnen und sich dort reindenken zu müssen.

Schwieriger wird auch die finanzielle Steuerung: die Projekte wurden vom Umfang her größer und dauern somit länger. Wir müssen daher mehr auf Zahlungsbedingungen achten, denn wenn wir bspw. sechs Wochen an einem Projekt mit einer Mannstelle sitzen, reicht es vielleicht nicht immer, erst nach Abnahme bezahlt zu werden… zumal wir auch immer wieder feststellen, dass Kunden zwar jede 50 Euro Ersparnis gerne mitnehmen, dann aber selbst bei Low-Budget-Projekten die Zahlungsfrist nicht nur um zwei Wochen sondern eben eher drei Monaten überschreiten. Das bedeutet, dass wir bspw. mehr mit Teilvorauszahlungen für größere Projekte arbeiten müssen, um nicht in Liquiditätsprobleme zu geraten. Und das wiederum Kunden zu verklickern, ist nicht immer einfach. Aber es muss gemacht werden.

Durchaus beunruhigend war auch die Situation, als uns eine Kundin mit einer Schadenersatzforderung belangt hat. Nach dem ersten Schreck haben wir zu unserem Glück unsere Haftpflichtversicherung herangezogen. Unsere Versicherung ist speziell für IT-Firmen ausgelegt und die hat sich des Falles angenommen. Es war für uns außerordentlich beruhigend, dass der Versicherer HISCOX sich nicht mit Formalien oder Blabla aus der Verantwortung winden wollte, sondern sich zügig um die gesamte Bearbeitung gekümmert hat – wenn vielleicht auch nicht so, wie es sich die nun ehemalige Kundin das vorgestellt hat. Meine Empfehlung daher: eine Haftpflichtversicherung für IT-Firmen ist Pflicht für jedes Webentwicklungsunternehmen. Denn in unserer Branche geht es nur selten um Personenschäden, sondern eher immer um Vermögensschäden.

Insgesamt war 2009 ein gutes Jahr, in dem webvariants deutlich vorangekommen ist. Aktuell gilt es für uns: professioneller werden, besser werden, schneller werden, hochwertiger werden und trotzdem die Liebe zum Web und dem Arbeiten darin nicht zu verlieren. Wir werden am Jahresende 2010 sehen, ob das geklappt hat. :-) Es bleibt sicher spannend.

12. Februar

Was tun, wenn der Domaininhaber stirbt…

von Christian Metzeler Ein Kommentar

Uff… so eine Mitteilung bekommt man nicht jeden Tag: “Der Domaininhaber ist leider verstorben.” Da war ich erstmal ziemlich platt. Das Problem, vor dem wir hier stehen ist, dass die Domain nicht unserem Kunden, sondern dem bisherigen Websiteersteller gehört. Und dieser ist jüngst gestorben. Da somit über kurz oder lang das Hosting, welches auch durch den Websiteersteller geschah, nicht mehr bezahlt wird, wird die Website mitsamt der Domain verschwinden. Das ist eine unangenehme Sache – mal ganz abgesehen von den persönlichen Implikationen, die zwischen unserem Kunden und seinem bisherigen Auftragnehmer sicher auch eine Rolle spielen. Mich hat es jedenfalls gestern ganz schön nachdenklich gemacht, auch wenn ich den Mitbewerber nicht kannte. Typischerweise wird man in unserem Geschäft nicht mit dem Wort “Tod” konfrontiert, was zum einen an der physischen Ungefährlichkeit des Business und zum anderen am üblichen Durchschnittsalter der es Betreibenden liegt.

Eine Nachfrage beim jetzigen Hoster brachte mir die Erkenntnis, dass unser Kunde nur auf zwei Wegen an seine Domain kommen könne: entweder über vorhandene Erben, die jetzt im Besitz des Nachlasses sind und die Domain freigeben oder, falls kein Erbe vorhanden ist und die Erbmasse an den Staat fällt, eben über diesen. In beiden Fällen, inbesondere im zweiten, eine durchaus langwierige Prozedur. Nun gibt es in diesem Falle eine Witwe, die persönlich mit unserem Kunden bekannt ist. Sie kann nun als Erbin die Domain an unseren Kunden übertragen und ist vermutlich auch willens, das zu tun. Insgesamt ist die Sache aber durchaus delikat und zeigt sehr deutlich: Inhaber und Admin-C einer Domain sollte immer der Websiteinhaber sein und nicht der Website-Ersteller. Das empfiehlt sich schon, um möglichen Problemen der Eigentümerschaft bei Streits zwischen Kunde und Auftragnehmer aus dem Weg zu gehen. Und für den hier beschriebenen Fall ist es erst recht wichtig.

P.S. Das ist das erste Mal, dass ich den Tag “Tod” in einem Blogbeitrag verwendet habe.

8. Februar

Fundsachen: Alternatives Server-Rack und nettes Lösch-Interface

von Wolf Brüning Kommentieren

LackRack
Bild-Credit: Aldert Hazenberg, eth-0

In diese Woche möchte ich mit zwei neuen Fundsachen starten. Zum einen ist dies das „Lack-Rack“: Offenbar entspricht beim beliebten Lack-Tischchen von Ikea der Beinabstand ziemlich genau 19 Zoll, so dass sich Server-Racks und und andere Geräte mit 19-Zoll-Formfaktor (Switches, Firewalls, Steckdosenlesiten etc.) prima einschrauben lassen. Wer also statt vierstelliger Summen lieber 7,99€ für seinen Serverschrank ausgeben will, hat hiermit sein Traumprodukt gefunden. Aber Achtung, die Verwendung ist auf eigene Gefahr ;)

Die zweite Fundsache ist mir am vergangenen Wochenende untergekommen: Durch eine automatische eMail wurde ich daran erinnert, dass ich irgendwann einmal Mitglied des Social Networks Wer-Kennt-Wen geworden bin. Da ich selbiges eigentlich nie genutzt habe und auch nur eine handvoll Bekanntschaften dort habe, die ebenso in stärker frequentierten Netzwerken vertreten sind, entschloss ich mich meinen Account zu löschen (Ich kenn keine aktuellen Zahlen, wie beliebt ist WKW eigentlich noch?). Auf der Seite, auf der man die Löschung des eignen Profils bestätigen sollte, fand ich folgenden Dialog:

Wer-Kennt-Wen-Löschprozess

Das ist aus Betreibersicht eine sehr gute Idee: Neben der Möglichkeit Accountlöschungen statistisch nach Gründen auswerten zu können und somit Hinweise zur Verbesserung des Dienstes zu erlagen, bringt der jeweils passend eingeblendete Hinweistext wahrscheinlich einen Teil der löschwilligen Nutzer doch noch von ihrer Entscheidung ab. Nicht dumm.

PS: Nicht vergessen, heute findet der erste Webmontag in Magdeburg statt. Ab 18:00 Uhr im Markant. Mehr »