PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Archive for Januar, 2011

Mit Wetterdaten arbeiten: Google Weather API

with 9 comments

Wetterdaten können eine kleine nette Information sein für die Nutzer einer Webseite, entweder sie sind auf den jeweiligen Nutzer zugeschnitten und personalisiert, oder für alle Besucher der Webseite des Fussballclubs wird das Wetter der Stadt angezeigt.

Es gibt da draußen einige Dienste, die solche Widgets, sprich kleine HTML-Codefragmente zur Verfügung stellen, man muss allerdings bei der Generierung des entsprechenden Codes die Postleitzahl bzw. den Ort angeben, sowie teils einschränkende Geschäftsbedingungen akzeptieren. Außerdem ist man dann häufig auf das entsprechende Design des Anbieters angewiesen, das ganze ist also ziemlich unflexibel.

Also bauen wir uns das schnell selbst zusammen, dabei benutzen wir die Weather-API von Google. Yahoo hat auch eine Weather-API, genauso wie wetter.com. Hier zeige ich es am Beispiel von Google, die beiden anderen kommen in den nächsten Tagen dazu.

Falls jemand von euch noch andere APIs kennt die ähnlich einfach zu benutzen ist, auch kleinere Städte kennen und auch nicht nur ein Land abdecken (mindestens Europe wäre toll), immer her damit!

Google bietet eine API, an die wir einfach nur entweder die Postleitzahl oder einen Suchbegriff senden, und wir erhalten als Ergebnis das aktuelle Wetter sowie die Vorhersagen für die nächsten 4 Tage. Wir können zusätzlich noch die Sprache ändern in der wir die Ergebnisse erhalten möchten („teils sonnig“/“partly sunny“).

So sieht das XML aus wenn man das Wetter von 59302 abfragt:
Weiterlesen »

Written by Michael Kliewe

Januar 18th, 2011 at 8:47 am

Posted in PHP

Tagged with , , ,

Gefährliche PHP-Funktionen ausschalten

with 23 comments

PHP ist mächtig, man kann nahezu alles umsetzen, zur Not auch mit Zugriff auf die Kommandozeile. Doch die Macht hat auch immer eine böse Seite, sie kann missbraucht werden. Nicht nur auf shared Webservern sollte man aus Sicherheitsgründen einige Funktionen ausschalten, auch auf einem einzelnen Server, auf der nur die eigene Webseite liegt, sollten die gefährlichsten Funktionen im Normalfall abgeschaltet werden (können). Falls ein Eindringling es schafft, eigenen PHP-Code hochzuladen, wäre er sehr eingeschränkt in seinen Möglichkeiten, viel kaputt zu machen, Daten auszuspähen oder sonstige böse Sachen auf unserem Server zu veranstalten.

Natürlich gibt es noch viele weitere Sicherheitsmaßnahmen, die man ergreifen sollte. Der Safe-Mode wird ja bald abgeschafft, kann und sollte also nicht mehr genutzt werden. Stattdessen sollten open_basedir, disable_classes und disable_functions genutzt werden.

Natürlich ist es auch ein guter Rat, immer eine aktuelle Version von PHP zu verwenden, seine Scripte abzusichern (Directory-Traversal, Code-Injection, Dateiuploads auf PHP-Code zu überprüfen, Remote-File-Inclusion etc. etc.), um einen Eindringlich erst gar nicht reinzulassen, aber das soll hier heute nicht das Thema sein.

Hier geht es also um disable_functions. Wir können in der php.ini PHP-Funktionen abschalten, die wir nicht benötigen und evtl. einem Eindringlich helfen, Schaden anzurichten. Welche Funktionen sollten deaktiviert werden? Ich habe hier mal eine Liste, über die wir diskutieren können:

disable_functions = „apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, curl_exec, curl_multi_exec, define_syslog_variables, disk_free_space, diskfreespace, dl, error_log, escapeshellarg, escapeshellcmd, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, ini_alter, ini_get_all, ini_restore, link, mysql_pconnect, openlog, passthru, pfsockopen, php_uname, phpinfo, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, set_time_limit, shell_exec, symlink, syslog, system, tmpfile, virtual

shell_exec verbietet auch gleich das Ausführen von Systembefehlen via Backticks (´).

Einige davon sind sicherlich gefährlicher als andere, und einige werden sogar vielleicht im ein oder anderen Projekt dringend gebraucht, sodass sie aus der Liste rausgenommen werden müssen. Als ich diese Liste erstellt habe musste ich feststellen dass ich mehr als ein Dutzend der Funktionen nicht kannte, es ist also sehr zu empfehlen sich mal ein paar davon anzuschauen.

Welche Funktionen verbietet ihr in der php.ini?

Written by Michael Kliewe

Januar 14th, 2011 at 9:05 am

Posted in PHP

Tagged with , , ,

Subdomain-Service: Wie erstelle ich dynamisch viele Subdomains?

with 9 comments

Was eine Subdomain ist brauche ich ja wahrscheinlich nicht zu erzählen, dass es manchmal mehr Sinn machen kann lieber eine neue Subdomain als einen Unterordner anzulegen und wie das geht möchte ich hier zeigen.

Die Länge der folgenden Domains ist gleich, es ist also egal ob ich

http://domain.de/forum

oder

http://forum.domain.de

anlege. Es gibt jedoch einige technische Unterschiede. Sollte ich beispielsweise später das Forum auf einen eigenen Server umziehen wollen ist das mit der zweiten Möglichkeit einfacher. Des weiteren sind die Sessions durch die Subdomain getrennt, ich kann also im Forum nicht auf die Session-Daten der Hauptdomain zugreifen und andersrum. Sollte ich das doch wollen müßte ich

ini_set("session.cookie_domain", ".domain.de");

die Einstellung ändern, dann teilen sich alle Subdomains die Session-Daten.
Weiterlesen »

Written by Michael Kliewe

Januar 4th, 2011 at 10:09 am

Linkpool Nummer 13

without comments

Auch 2010 gab es wieder einen PHP Advent, mit einem Artikel pro Tag:

http://phpadvent.org/2010

Ein schöner Zend View Helper, der den Link zu statischen Dateien auf CDNs zusammenbaut:

http://antwerpes.it/cdn-view-helper-fur-zend-framework/2010/11/

Kleines Bookmarklet, mit dem man auf beliebigen Webseiten malen kann und dann einen Link dazu weitergeben kann:

http://markup.io/

V8 Javascript Engine innerhalb von PHP:

http://pecl.php.net/package/v8js

PHP erhält eine Möglichkeit, den Upload Progress eines Formular Uploads abzufragen:

http://schlueters.de/blog/archives/151-Upload-Progress-in-PHP-trunk.html

Was man bei HTML Emails alles beachten muss:

http://antwerpes.it/erstellung-html-newsletter-best-practices/2010/11/

Wie einfach es ist, den JMStV Filter zu umgehen (falls er doch noch kommt):

http://blog.odem.org/2010/12/jmstv-filter-umgehen.html

Tausende potentiell unsichere PHP Projekte:

http://www.google.com/codesearch?as_q=lang:php+echo\s%2B\$_%28GET|POST|REQUEST|COOKIE%29&btnG

Written by Michael Kliewe

Januar 2nd, 2011 at 9:00 am

Posted in Allgemein,PHP

Tagged with , ,