PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


XSS-Angriffe erschweren mit CSP, der neuen Idee von Mozilla/Firefox

with 7 comments

Die Entwickler bei Mozilla haben hart gearbeitet und sich eine gute Strategie ausgedacht, wie man in Zukunft Cross-Site-Scripting (XSS) erschweren kann (Achtung: unterbinden wird man es (noch) nicht können!). Viele Browserhersteller loben die Firefox-Entwickler dafür und werden die Funktionalität auch einbauen, um das Web ein wenig sicherer zu machen.

XSS ist im Grunde das böse Einfügen von externem Javascript-Code, um im Kontext einer Webseite schädliche Funktionen aufzurufen. XSS-Angriffe haben in den letzten Jahren massiv zugenommen und sind mittlerweile auf Platz 1 der Hitliste aller Internet-Angriffe. Ein einfaches Beispiel ist das folgende:

Nehmen wir an, wir haben ein Gästebuch (oder ein Blog, einen Chat oder irgendeinen anderen Web 2.0 Dienst erstellt, wo User eigenen Content beisteuern können) programmiert, und wir haben bei der Programmierung nicht aufgepasst. Nehmen wir an, wir hätten auf Serverseite bei irgendeinem Formular-Script das Entschärfen der POST-Variablen vergessen, sodass alles, was ein User im Formular eingibt, später auf der Seite von anderen Usern gelesen werden kann.

Weiterlesen »

Written by Michael Kliewe

November 19th, 2009 at 12:25 am

Zuhause im IPv6 Web surfen (Teil2: Windows)

with 2 comments

In Teil 1 haben wir bereits die Grundlagen von IPv4to6 Tunneling besprochen, wie man aus einem IPv4 Netz in das IPv6 Netz tunneln kann. Hier nun ein paar Screenshots zur Installation unter Windows:

(Diese Installation ist unter Windows 7 gemacht worden, unter Vista/Xp sollte es genauso funktionieren denke ich)

Vorher ist eine Verbindung zu http://www.six.heise.de nicht möglich:

win_without_ipv6

Nun installieren wir die Tunnelsoftware von gogo6:

http://gogonet.gogo6.com/page/download-1

win_download_gogo6

Unter Windows 7 kommt nach dem Start des Installers eine kleine Fehlermeldung, dass Windows 7 nicht unterstützt wird. Das kann man aber beheben, indem man die obere Option wählt, denn dann klappt die Installation einwandfrei (Windows 7 installiert das Programm dann im Kompatibilitätsmodus)

win_not_supported

win_compat

Während der Installation wird dann auch das Tunnel-Device erstellt:

win_install_tundevice

Nach der Installation wird das Programm gestartet:

win_connect

Für den anonymen Modus muss man nur noch auf „Connect“ klicken, und schon kann man IPv6 surfen:

win_ping

Oder im Firefox die IPv6 Version von heise: http://www.six.heise.de

win_heise

win_status

So einfach kann das sein.


ACHTUNG: Mit einem solchen Tunnel erhaltet ihr eine öffentliche IPv6-Adresse. Ihr umgeht damit euren Router/NAT und seid direkt aus dem Internet erreichbar. Achtet also darauf, welche Dienste ihr ins Internet zur Verfügung stellt! Eventuell müßt ihr eine lokale Firewall installieren/konfigurieren, damit ihr nicht zu einer Spam-Drohne werdet oder gar schlimmeres. Achtet auf Freigaben, lokale Entwickler-Webserver etc etc.

Written by Michael Kliewe

November 18th, 2009 at 12:05 am

Zuhause im IPv6 Web surfen (Teil1: Ubuntu)

with 4 comments

Das neue Internet Protokoll in der Version 6 wird kommen, soviel ist sicher. Da es ein langsamer Umstieg ist, leben wir aktuell in einer zweigeteilten Welt: Der alten IPv4 Welt und der neuen IPv6 Welt. Einige Länder sind bei der Umstellung schneller, andere müssen noch mehr oder weniger dazu gezwungen werden.

Ganz getrennt sind die beiden Welten jedoch nicht. Mit Hilfe von Tunnel-Protokollen und -Servern kann man zwischen den jeweiligen Netzen vermitteln.

Da die meisten von euch wohl noch IPv4 zuhause haben werden (kein großer deutscher Provider bietet aktuell IPv6 DSL-Anschlüsse an, es gibt nur ein paar kleinere), will ich hier kurz eine Anleitung schreiben, wie ich es zuhause nutze.

So sieht es vorher aus, wenn man noch keine IPv6 Verbindung hat (so sollte es bei euch auch aussehen):

$ ping6 ipv6.google.com
connect: Network is unreachable

(Diese komplette Anleitung ist für Linux/Ubuntu, für Windows gibt es auch Software und eine Anleitung, also einfach weiterlesen)

without_ipv6

Alles was wir brauchen ist eine Client-Software, die uns auf unserem Rechner hilft, ein Tunnel-Device zu erstellen, welches dann den IPv6-Traffic zum Tunnel-Server leitet. Ich habe zuhause die Software „gogoClient“(gw6c) genutzt, um mich mit einem kostenlosen IPv6 Tunnelbroker zu verbinden.

Es gibt verschiedene Möglichkeiten, je nach Betriebssystem, das grundlegende Vorgehen ist dabei: Download der Client Software und Starten der Sofware 😉

Und das müßt ihr dafür tun:

Ihr registriert euch kostenlos auf dieser Seite: http://gogonet.gogo6.com/

Jedes Mitglied dort erhält nämlich die Möglichkeit, die Software herunterzuladen und eine IPv6-Adresse (bzw. ein Netz) zu erhalten. Unten in diesem Artikel gibt es noch einige interessante Links, die man sich durchlesen kann, falls man Probleme hat oder wissen möchte, was alles hinter dem Service steckt. Oder gar eine feste IPv6-Adresse haben möchte.

Nach der Registrierung kann man hier den Client herunterladen:

http://gogonet.gogo6.com/page/download-1

Es gibt Versionen für Windows, Linux, *BSD, OpenWRT etc, alles was das Herz begehrt.

Nach dem Download entpackt man das entsprechende Archiv (Unter Windows startet man den Installer).

$ tar -xzvf gw6c-linux.tar.gz
gw6c/
gw6c/template/
gw6c/template/README
gw6c/template/linux.sh
gw6c/bin/
gw6c/bin/gw6c.conf
gw6c/bin/gw6c
gw6c/bin/gw6c.conf.sample
gw6c/man/
gw6c/man/man5/
gw6c/man/man5/gw6c.conf.5
gw6c/man/man8/
gw6c/man/man8/gw6c.8

In meinem Fall mußte ich nur noch eine kleine Einstellung in der gw6c/bin/gw6c.conf machen, nämlich den Pfad korrekt angeben, wohin ich gw6c entpackt habe:

gw6_dir=/usr/local/gw6c

Danach einfach starten via

sudo /usr/local/gw6c/bin/gw6c

Dann sollte der Tunnel aufgebaut sein:

$ ifconfig tun
tun       Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet6 addr: 2001:5c0:1000:a::539/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1280  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:1032 (1.0 KB)  TX bytes:608 (608.0 B)

Falls das nicht der Fall ist, kann man das Logging aktivieren, indem man in der gw6c.conf die folgenden Einstellungen abändert:

log_file=3
log_filename=gw6c.log

Sobald nun also der Tunnel aufgebaut ist, können wir IPv6 nutzen:

$ ping6 ipv6.google.com
PING ipv6.google.com(fx-in-x68.1e100.net) 56 data bytes
64 bytes from fx-in-x68.1e100.net: icmp_seq=1 ttl=56 time=42.3 ms
64 bytes from fx-in-x68.1e100.net: icmp_seq=2 ttl=56 time=44.8 ms
64 bytes from fx-in-x68.1e100.net: icmp_seq=3 ttl=56 time=44.4 ms
64 bytes from fx-in-x68.1e100.net: icmp_seq=4 ttl=56 time=48.3 ms
64 bytes from fx-in-x68.1e100.net: icmp_seq=5 ttl=56 time=43.6 ms
$ host ipv6.google.com

ipv6.google.com is an alias for ipv6.l.google.com.
ipv6.l.google.com has IPv6 address 2001:4860:a003::68
whois 2001:4860:a003::68

OrgName:    Google Inc.
OrgID:      GOGL
Address:    1600 Amphitheatre Parkway
City:       Mountain View
StateProv:  CA
PostalCode: 94043
Country:    US

NetRange:   2001:4860:0000:0000:0000:0000:0000:0000 - 2001:4860:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
CIDR:       2001:4860:0000:0000:0000:0000:0000:0000/32
OriginAS:   AS15169
NetName:    GOOGLE-IPV6

Oder im Firefox:

with_ipv6

Ihr surft nun also transparent in beiden Netzen. Falls eine Adresse ins IPv6 führt, wird es über gogo6 geroutet, bei IPv4 bleibt alles beim alten.

Man kann nun auch noch bei gogo6 den Freenet6 Tunnel Service nutzen und eine feste IPv6 Adresse bekommen. Dazu mußt man sich auf einer Seite registrieren, und mit diesen Registrierungsdaten die gw6c.conf anpassen. Und schon hat man eine statische IPv6 Adresse, unter der man auch seinen Rechner zuhause erreichen kann und Dienste anbieten kann.

Für Windows gibt es hier die Anleitung mit vielen Screenshots 🙂

Weitere Seiten, die man mit IPv6 Zugangn besuchen kann:

http://www.six.heise.de

http://www.ipv6.bieringer.de (mit Informationen über die eigene IPv6-Adresse)

http://www.kame.net Die tanzende IPv6-Schildkröte aus Japan

ACHTUNG: Mit einem solchen Tunnel erhaltet ihr eine öffentliche IPv6-Adresse. Ihr umgeht damit euren Router/NAT und seid direkt aus dem Internet erreichbar. Achtet also darauf, welche Dienste ihr ins Internet zur Verfügung stellt! Eventuell müßt ihr eine lokale Firewall installieren/konfigurieren, damit ihr nicht zu einer Spam-Drohne werdet oder gar schlimmeres. Achtet auf Freigaben, lokale Entwickler-Webserver etc etc.

=======================================================

Interessante Kurzvideos über ping6, traceroute6, whois usw: http://ipv6.he.net/presentations.php

http://gogonet.gogo6.com/page/freenet6-tunnelbroker

http://gogonet.gogo6.com/page/help-center

http://gogonet.gogo6.com/page/service-status

Diese Anleitung sieht einfacher aus, hat bei mir aber nicht funktioniert: http://unquietwiki.blogspot.com/2009/10/go-go-dancing-on-internet-ipv6-anyway.html

Written by Michael Kliewe

November 17th, 2009 at 11:34 pm

Posted in Linux

Tagged with , , , , ,

Kostenlos zur PHP World Kongress in München!

with one comment

Ich habe heute eine Email erhalten von webmasterpro.de. Dort läuft aktuell eine Verlosung, bei der man ein Ticket für den PHP World Kongress 2009 in München gewinnen kann. Normalerweise kostet das Ticket 890 €!

Wer also am 24./25. November 2009 (das ist in genau einer Woche) zum Kongress möchte, muss nur unter dem Artikel einen Kommentar hinterlassen.

Tolle Aktion wie ich finde, und ich hoffe, dass ich gewinne 😉

Fährt jemand von euch hin?

Written by Michael Kliewe

November 16th, 2009 at 11:34 pm

Bug in PHP 5.3.0’s mail() Funktion

with 4 comments

[Edit: Der Bug wurde mit 5.3.2 behoben, siehe Changelog http://www.php.net/ChangeLog-5.php#5.3.2: Fixed bug #50907 (X-PHP-Originating-Script adding two new lines in *NIX). (Ilia)]

Vielleicht hat noch jemand von euch das Problem. Ziel war einfach nur, eine kleine Mail von meinem Mac OS X aus PHP heraus zu versenden. Dazu ist hier PHP 5.3.0 installiert, ebenso wie ein Apache und ein Postfix.

Das Script sieht unspektakulär aus:

$headers = 	'From: source@mail.de' . "\n" .
			'To: target@mail.de' . "\n" .
			'Reply-To: source@mail.de' . "\n" .
			'X-Mailer: PHP/' . phpversion();
mail('target@mail.de', 'testmail!', $message, $headers, '-fsource@mail.de');

In der php.ini ist folgendes eingestellt:

sendmail_path = /usr/sbin/sendmail -t -i

Das Problem ist dabei, dass die Emails nicht korrekt ankommen. Alle Header, die ich oben angegeben habe, stehen im Body der Email. Es gibt also ein Umbruchproblem, irgendwo ist einer zuviel.

Return-Path: <source@mail.de>
Delivery-Date: Tue, 03 Nov 2009 14:39:05 +0100
Received: from server.de (server.de [111.111.17.10])
 by mx.server.de with ESMTP
 id 0LxhS3-1M6JqE0zvv-016hU3 for source@mail.de; Tue, 03 Nov 2009 14:39:05 +0100
Received: from ip-18-.provider.de (ip-18-.provider.de [222.222.248.46])
 by m.server.de with ESMTP
 id 0LjM2Z-1MTKv00Dgl-00d0Vo; Tue, 03 Nov 2009 14:39:05 +0100
Received: by ip-18-.provider.de (Postfix, from userid 1)
 id CF7181196C0; Tue, 03 Nov 2009 14:39:04 +0100 (CET)
To: target@mail.de
Subject: some subject
X-PHP-Originating-Script: 501:ErrorController.php
Message-Id: <0LjM2Z-1MTKffffgl-00d0Vo@m.server.de>
Date: Tue, 03 Nov 2009 14:39:05 +0100
X-Provags-ID: V01U2FsdGVrf1+XTUgdYEhFFTVVw58w3JV/CwkzzZnpRBZbnSR
 Rtupv2Jro7gRSvDH8j3QVDjBuBuAra893YNAvSVu/TgVETcVIT
 Y+uvNPgthhI6VXtHYzoCA==
X-PhishingScore:   0
 tests=
X-SpamScore: 2.9
 tests= TVD_SPACE_RATIO
Envelope-To: source@mail.de

From: source@mail.de
To: target@mail.de
Reply-To: source@mail.de
X-Mailer: PHP/5.3.0
Message-Id: <20091029555904.CF7181196C0@ip-18-.provider.de>
Date: Tue, 03 Nov 2009 14:39:04 +0100 (CET)

message here

Nach etwas rumprobieren, Suchmaschinen bedienen und genauerem Hingucken fällt einem das Problem auf:

PHP ergänzt die Header um einen Eintrag „X-PHP-Originating-Script“. Darin wird der Name des PHP-Scripts festgehalten, welches den mail()-Aufruf gemacht hat. Besonders interessant falls man sich einen fiesen Form-Mailer oder sowas eingefangen hat, und ihn nicht findet. Oder man hat andere Kunden mit ihren Projekten auf seinem Server, die Unfug treiben.

Dieser Header wird von PHP 5.3.0 mit einem „\r\n“ abgeschlossen, und danach folgen die anderen Header.
Da wir hier allerdings unter Mac OS X sind (sprich FreeBSD), wäre ein „\n“ besser. Das betriftt auch Linux etc.

Lösung des Problem ist also: Deaktivieren dieses Zusatzheaders in der php.ini:

mail.add_x_header = Off

Diese Option ist erst seit PHP 5.3.0 verfügbar. In meiner PHP-Version, die hier installiert ist, war das nämlich auf „On“ geschaltet. Im CVS von PHP ist der Bug berichtigt, aber eine 5.3.1 ist aktuell noch nicht released. Hier der Bug-Report, der damit zu tun hat.

Weitere Forenbeiträge zu dem Thema bei Nabble oder auf der Postfixbuch-Mailingliste.

Written by Michael Kliewe

November 4th, 2009 at 12:21 pm