Month: November 2008

Die Anforderungen steigen – WordPress Plugin List

Noch ist mein Blog nicht ganz fertig, was man vielleicht auch an der einen oder anderen Stelle merkt. Zum Einen fehlen noch die statischen Seiten, die anscheinend vom Template nicht unterstützt werden. Zum Anderen fehlen mir noch ein paar Erweiterungen / Plugins.

Bisher habe ich folgende Plugins installiert:

  • Akismet
  • FeedBurner FeedSmith
  • Google XML Sitemaps
  • iG:Syntax Hiliter
  • Marekkis Watermark-Plugin
  • Post Teaser
  • Post to PDF
  • Simple Tags
  • WP lightbox 2

Wie bereits oben erwähnt fehlt mir noch ein Glossar Plugin. So wie es im Moment ausschaut, werde ich dieses wohl selber programmieren müssen, weil es bisher noch nichts fertiges für WordPress gibt. Wie dies genau abläuft werde ich im Blog berichten.

Außerdem hätte ich gerne noch ein Plugin, welches einen direkten Zugriff auf meine Downloaddateien verhindert oder entsprechend korrigiert und protokolliert. In der WordPressgemeinde scheint es dafür bisher kein Bewusstsein zu geben und dem entsprechend auch kein Plugin, von daher wird dieses wohl auch selber programmiert werden müssen.

Sollte jemand entsprechende Plugins kennen, die bereits eine entsprechende Funktionalität zu den obigen Themengebieten bieten, wäre ich für einen Kommentar dankbar.

Test: Lunascape Browser

Nachdem ich es im T3N Blog gelesen hatte, mußte ich es auch gleich ausprobieren. Den neuen Lunascape Browser. Als Google Anwender ist man gewohnt, das Anwendungen im Alpha, Beta Stadium sind und trotzdem funktionieren. Also auch gleich mal die Lunascape5 Alpha gezogen. Besonders für Developer soll dieser Browser besonders geeignet sein, weil alle drei Browser Engines in ihm vereint sind.


Beim ersten Starten wird auch gleich nach der bevorzugten Engine gefragt, die man später aber wieder ändern kann. Sofort stören mich die vielen Leisten, als Google Chrome Benutzer bin ich Minimalismus gewohnt.

Ohne irgendwas konfiguriert oder importiert zu haben, sind sofort gefühlte 1000 Feeds abonniert. Diese Poppen auch gleich in einem Outlook ähnlichen Fenster unten rechts in der Taskleiste hoch. Mein Geschmack ist es nicht. Aber jetzt ist verständlich warum er 512MB Arbeitsspeicher erfordert.

Die Performance konnte ich nicht testen, weil der Browser keine Webseite anzeigen konnte. Die Proxy Einstellungen sollte er sich, wie Chrome auch, direkt vom IE ziehen, jedoch konnte er komischerweise nur seine eigene Suche und die Feeds ansteuern.

Definitiv den Hals gekostet hat den Browser jedoch die nicht vorhandenen Shortcuts. Als Browser für Entwickler gepriesen und dann kein Strg + L und kein Strg + T . So kann ich nicht arbeiten. Ich mußte den Test abbrechen.

Java: Unterschiede zwischen && vs. &

Viele, denke ich, wissen gar nicht, das man eine Verknüpfung auch mit einem einfach & durchführen kann. Was der Unterschied zum doppelten && ist, soll der folgende Artikel beleuchten. Dieses Verhalten ist unabhängig von der Programmiersprache, für PHP habe ich es auch nochmals demonstriert. Im folgenden Beispiel wird Java verwendet. Grundsätzlich müssen bei einer UND-Verknüpfung alle Bedingungen WAHR sein, damit das Statement ausgeführt wird. Sollte nur eine Bedingung FALSE sein, wird der ELSE-Zweig genommen. Der Unterschied zwischen & und && ist jetzt nur, wie geht es weiter, wenn die erste Bedingung bereits FALSE ist.

Beispiel von && vs &

[java]
public class UndUnd {

public static void main(String[] args) {

if(a() && b()){
System.out.println("Fertig");
}else{
System.out.println("UnFertig");
}

}

public static boolean a(){
System.out.print("Hallo ");
return false;
}

public static boolean b(){
System.out.println("Welt");
return true;
}
}

// Ausgabe: Hallo
// Unfertig
[/java]

Bei Verwendung des && Operators, wird sofort nach der ersten fehlerhaften Bedingung abgebrochen. Für die Performance ist dies natürlich optimal. Jedoch könnte es sein, das sich in der Funktion B Programmcode befindet der trotzdem auf jeden Fall ausgeführt werden soll, genauso wie in der Funktion A. Hier würde man den einfach & Operator verwenden.

[java]
public class UndUnd {

public static void main(String[] args) {

if(a() & b()){
System.out.println("Fertig");
}else{
System.out.println("UnFertig");
}

}

public static boolean a(){
System.out.print("Hallo ");
return false;
}

public static boolean b(){
System.out.println("Welt");
return true;
}
}

// Ausgabe: Hallo Welt
// UnFertig
[/java]

Performance && vs. &

Für die Performance sollte man immer && verwenden, weil dann bereits nach der ersten fehlerhaften Bedingung abgebrochen wird. Wenn man gewährleisten will das alle Bedingungen überprüft werden, sollte man dagegen das einfach & wählen.

Zusammenfassung – tl;dr

Soll sichergestellt werden, dass alle Bedingungen in einem if untersucht werden, sollte ein einfaches & verwendet werden, besser für die Performance ist die Verwendung ist &&.

Weitere Fragen zur Java-Programmierung? Jetzt einfach und schnell einen Kommentar hinterlassen, mit E-Mail Adresse, und deine Frage wird ausführlich im BugBlog beantwortet.

[random_content group_id=”210″ num_posts=”1″]

Windows Restriktion: Strg + L is evil

Besonders Firmen haben das Problem zwischen Vertrauen und Sicherheit. Wie weit kann man dem Mitarbeiter vertrauen ohne dabei die Sicherheit des Unternehmens auf Spiel zu setzen. Besonders in Windows ist dies ein großes Problem, da es auch ohne böswillige Absicht des Mitarbeiters passieren kann, das der Rechner kompromittiert wird.

Am Wochenende wollte ich einem Bekannten helfen sein Notebook mit WLAN zu versorgen und drückte dabei im IE Strg+L . Diese Kombination öffnet normalerweise ein Fenster in welches man eine URL eintragen kann. Hier bekam ich jedoch die Meldung das ich nicht die Rechte hätte. Dabei ist das die gleiche Funktionalität, wie oben in die Adressleiste zu klicken.

Der Vorteil ist lediglich, das man nicht erst mit dem Touchpad oder dem Trackball zu der Leiste surfen muß, da diese beim Starten keinen Focus hat. Aber auch wenn der Browser schon gestartet ist, läßt sich so natürlich wesentlich schneller zu einer neuen URL springen.

Im Firefox funktioniert diese Kombination natürlich auch, jedoch öffnet sich hier kein neues Fenster, sondern der Browser springt direkt in die Adressezeile und man kann eine neue URL eintragen. Aufgrund der Gewohnheit bekam ich die Fehlermeldung natürlich mehrmals zu sehen, was mich umso mehr aufregte.

WordPress 2.6.5 is available! Please update now.

Gestern Nachmittag hatte ich bei Securityfocus erst die Anzahl von Vulnerabilities zwischen Typo3 und WordPress verglichen. Typo3 kam auf zwei Seite, WordPress auf drei. Wobei viele Meldungen auf Typo3 Extensions entfallen. WordPress hat diesen Bonus nicht.

Bevor ich jetzt jedoch die ganze Update Prozedur starte, habe ich mir die Unterschiede zwischen WordPress 2.6.3 und WordPress 2.6.5 angeschaut. Die WordPress Version 2.6.4 wurde übersprungen, da es wohl eine Fake Version gab.

Das Update würde insgesamt nur 5 Dateien betreffen. Dafür den Aufwand treiben, die Datenbank zu sichern, alles löschen, das ganze WordPress Paket einspielen, ist mir zu aufwendig. Ich werde es händisch machen und mir dabei gleich mal die Fehler anschauen.

In einer Datei wird bloß die Versionsnummer hochgezählt. Manche Blogs behaupten, das Technorati Blogs aus dem Index schmeißt, die eine ältere WordPressversion verwenden, wie alt diese jedoch sein muß konnte ich bisher nicht herausfinden. Prinzipiell ist dies jedoch für mich ein Schwachstelle, wenn man “von außen” herausfinden kann, auf welcher Version ein System läuft. Dadurch wird es dem Angreifer umso leichter gemacht, den richtigen Hebel auszuwählen um anzusetzen.

Schauen wir uns einen weiteren Fehler an. Dies soll keine Klugscheißerei werden, denn die kann keiner leiden, aber nur aus Fehlern lernt man.

[php]
// File: /wp-admin/users.php

129 129 $go_delete = false;
130 130 foreach ( (array) $userids as $id ) {
131 $id = (int) $id;
131 132 $user = new WP_User($id);
132 133 if ( $id == $current_user->ID ) {
[/php]

Zeile 5 bzw. 131 ist neu. Bevor die Variable $id an WP_User übergeben wird, wird sie nach int gecasted. Dies ist auch sinnvoll, denn ursprünglich kommt das Array direkt aus einem Formular und nicht etwa aus der Datenbank.
Was mir jedoch nicht ganz schlüssig ist, warum wird der Cast nicht direkt in der Methode gemacht? Die Methode wird bestimmt noch an mehreren Stellen aufgerufen und man sollte der Methode die Verantwortung übertragen, sicherzustellen, das nur die richtigen Werte übertragen werden.

Betrachten wir noch eine weitere Lücke, die verdeutlichen soll, warum PHP Anwendungen so anfällig sind. In Programmiersprachen wie Java oder JavaScript wäre der Fehler schon von Anfang an aufgefallen.
Sehen wir uns zuerst den alten Code an:
[php]
// File: /wp-includes/feed.php

498 echo ‘http’
499 . ( $_SERVER[‘https’] == ‘on’ ? ‘s’ : ” ) . ‘://’
500 . $_SERVER[‘HTTP_HOST’]
501 . wp_specialchars(stripslashes($_SERVER[‘REQUEST_URI’]), 1);
[/php]

Und nun die Neue:

[php]
// File: /wp-includes/feed.php

498 $host = @parse_url(get_option(‘home’));
499 $host = $host[‘host’];
500 echo clean_url(
501 ‘http’
502 . ( (isset($_SERVER[‘https’]) && $_SERVER[‘https’] == ‘on’) ? ‘s’ : ” ) . ‘://’
503 . $host
504 . stripslashes($_SERVER[‘REQUEST_URI’])
505 );
[/php]

Bevor jetzt also geprüft ob der $_SERVER[‘https’] == ‘on’ wird erstmal überprüft ob die Variable ob überhaupt gesetzt ist. Wenn die Variable nicht gesetzt ist, macht es auch keinen Sinn zu überprüfen ob sie on ist. Sollte die erste Bedingung bereits fehlschlagen wird sofort abgebrochen. Dafür sorgt das &&.