PHP/CGI Sicherheitsproblem

Wie Heise gestern berichtete (http://www.heise.de/newsticker/meldung/Gefahr-durch-offene-PHP-Luecke-1567433.html) gibt es eine wunderschöne Sicherheitslücke im Bezug auf CGI und PHP. So führt der Aufruf:

http://localhost/index.php?-s

dazu das der Quellcode der Webseite ausgegeben wird. Das ist natürlich unpraktisch wenn dort Konfigurationsvariablen enthalten z.B. die Zugangsdaten für eine Datenbankverbindung. Zur Lösung des Problems gibt es drei Varianten:

  • PHP Version mit dem Bugfix einspielen
  • Rewrite Anweisung in die .htaccess
  • Wrapper welcher vor dem PHP-CGI aufgerufen wird

Die erste Variante scheidet aus, da der aktuelle Bugfix leicht umgangen werden kann. Die zweite Variante (einzutragen in eine „.htaccess“) sieht so aus:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^[^=]*$
RewriteCond %{QUERY_STRING} %2d|\- [NC]
RewriteRule .? - [F,L]

Die dritte Variante setzt einen Wrapper vor den eigentlich Aufruf und filtert die entsprechenden Anweisungen heraus. Dazu ändert man in der „httpd.conf“ die Zeile:

Action  application/x-httpd-php /cgi-bin/php-cgi.exe

in

Action  application/x-httpd-php /cgi-bin/php-cgi-wrapper.exe

und startet den Apache Server neu. Der Quelltext des Wrappers sieht dabei so aus:

#include <process.h>

#define PHP_ORIG "php-cgi.exe"

int main(int argc, char **argv)
{
    if(argc>1) argv[1]=0;
    _execv(PHP_ORIG, argv);
}

Das ganze kann hier auch als fertiges Visual Studio Projekt oder gleich als ausführbare Datei heruntergeladen werden.

Weitere Informationen gibt es unter:
http://www.kb.cert.org/vuls/id/520827
http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/
http://www.heise.de/newsticker/meldung/PHP-patcht-schnell-aber-nicht-gruendlich-1567906.html

PlayN

Wer ein Spiel für ein Mobilgerät schreiben möchte hat das Problem das es eine ganze Menge dieser Systeme gibt. Die bekannteren sind sicherlich Android und iOS. Möchte man für diese Systeme ein Spiel schreiben, so wäre eine Abstraktionsschicht eine feine Sache. Eine solche bietet Google mit „PlayN“ unter der Apache Lizenz an. Mit diesem Framework wurde unter anderem die Google Chrome Version von Angry Birds geschrieben. Aktuell werden folgende Plattformen unterstützt:

  • Java
  • HTML5
  • Android
  • iOS

Auch Flash wird unterstützt, wobei das Backend dafür im Moment einen Maintainer sucht und deshalb in dieser Liste nicht auftaucht. Herunterladen kann man sich PlayN unter http://code.google.com/p/playn/.

Weitere Informationen gibt es unter:
http://code.google.com/p/playn/wiki/PlatformStatus
http://www.schockwellenreiter.de/blog/2012/03/12/playn/

Der nervige WordPress Spam

Ich nutze ja zur Spambekämpfung Typepad AntiSpam und dieses Plugin erwischt auch einen Großteil, aber leider nicht alles. Meist sind es nervige Kommentare aller:

  • Wo ist der Like Button?
  • Habe einen RSS Reader. Wo ist der Feed?
  • Auf dem iPhone sieht es komisch aus.

Dem Blog BitBlokes ist dabei aufgefallen das diese Spammeldungen meist von der gleichen IP bzw. dem gleichen IP Bereich kommen und er liefert gleich den passenden Eintrag für die .htaccess Datei mit:

order allow,deny
deny from 128.204.197.19
deny from 95.156.238
allow from all

Damit ist dann Ruhe im Karton. Danke BitBlokes :)

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/.htaccess
http://de.wikipedia.org/wiki/Wordpress
http://de.wikipedia.org/wiki/Spam

Mapbender unter Ubuntu installieren und einrichten

Bei Mapbender (zu finden unter http://www.mapbender.org) handelt es sich um ein Web-Framework für GIS Belange. Das ganze Framework kann man auch unter Ubuntu installieren. Im ersten Schritt müssen dazu einige Pakete installiert werden. Dies geschieht mittels:

sudo apt-get install apache2 php5 postgresql php5-pgsql 

Nachdem alle Pakete installiert sind, sollte die aktuelle Version von Mapbender heruntergeladen und entpackt werden. Anschließend sollte für Mapbender ein eigener Nutzer (mittels adduser mapbender) namens mapbender angelegt werden. Bevor wir dann mittels su mapbender uns in den Kontext des Nutzers begeben, kopieren wir die entpackten Dateien in sein Homeverzeichnis.

Dem Nutzer postgre muss nun noch ein Passwort zugewiesen werden. Dies geschieht mittels:

sudo sudo -u postgres psql 

Daraufhin öffnet sich die Postgres Konsole in welcher man mittels \password postgres das Passwort setzen kann. Nun sollte die Daten im Homeordner des Mapbender Ordners die passenen Rechte bekommen:

find /home/mapbender/ -type d -exec chmod 777 {} +
find /home/mapbender/ -type f -exec chmod 777 {} + 

Nun wird die Datenbank installiert. Dazu wird das Skript install2.6.sh welches unter /home/mapbender/resources/db/ zu finden ist ausgeführt. Das Skript stellt dabei einige Fragen wie zum Beispiel nach dem Namen der Datenbank, Webservernenutzer (www-data) etc.

Im nächsten Schritt wird die Datei /etc/apache2/httpd.conf mit einem Editor geöffnet. Dort kommt dann folgendes in die Datei:

Alias /mapbender /home/mapbender/http

 <Directory /home/mapbender/http>
 Options MultiViews
 DirectoryIndex index.php
 Order allow,deny
 Allow from all
 </Directory>

Nachdem das geschafft ist muss die Konfigurationsdatei von Mapbender angepasst werden. Diese befindet sich im Ordner /home/mapbender/conf und trägt den Namen mapbender.conf. Dort trägt man die Datenbankkonfiguration sowie die Login URL ein. Nun startet man noch den Apache mittels /etc/init.d/apache2 restart neu. Danach sollte Mapbender funktionieren. Wenn nicht hilft es das Error Logging in der php.ini zu aktivieren um so den Fehlern auf die Spur zu kommen.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Mapbender
http://www.mapbender.org/Installation

PHP-Fehlermeldungen abschalten

Da man auf einem Produktivserver nicht unbedingt alle Fehlermeldungen an den Kunden herausgeben muss ist es manchmal ganz praktisch etwaige Fehlermeldungen zu unterdrücken. Die kann über die .htaccess Datei geschehen. Die Einstellungen in dieser Datei gelten für sämtliche Ordner welche unterhalb der Datei liegen. Um die Meldungen nun abzuschalten fügt man einfach folgende Zeile zu der Datei hinzu:

php_value display_errors 0