<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>dynamic-net.ch AG News</title>
<link></link>
<description>News der Firma dynamic-net.ch AG</description>
<language>en-us</language>
<pubDate>Sat, 04 Feb 2012 13:04:13 GMT</pubDate>
<item>
<title>PHP mit register_globals Off verwenden *UPDATE*</title>
<link></link>
<description><![CDATA[ Aus Sicherheitsgründen ist auf unseren Webservern die PHP Direktive register_globals ausgeschaltet. Ältere PHP Skriptlösungen, wie z.B. PHP Nuke und osCommerce, sind auf eingeschaltete Globale Variablen angewiesen, moderne weisen jedoch sogar auf diese Sicherheitslücke hin, wenn register_globals aktiviert ist.<br />
<br />
In der Regel lässt sich jedes PHP-Skript so programmieren, dass diese Voraussetzungen nicht erforderlich ist. Das Skript ist dann sauberer programmiert und bietet eine höhere Kompatibilität.<br />
<br />
Der Hauptunterschied liegt in der Verwendung von Variablen, die nicht im aktuell ausgeführten PHP Skript definiert werden, z.B. Formularvariablen via POST- oder URL-Parameter via GET-Methode, aber auch Cookie-Variablen. Im folgenden Beispiel wird eine Formularvariable ("benutzer") abgefragt:<br />
<br />
Mit register_globals <em>On</em>:<br />
<p style="padding: 6px; background-color: rgb(224, 224, 224);"><font face="Courier New"><?php<br />
$b=trim(addslashes(strip_tags(<strong>$benutzer</strong>)));<br />
# ...<br />
?></font></p>
Mit register_globals <em>Off </em>(Code kompatibel zu <em>On</em>):<br />
<p style="padding: 6px; background-color: rgb(224, 224, 224);"><font face="Courier New"><?php<br />
$b=trim(addslashes(strip_tags(<strong>$_POST['benutzer']</strong>)));<br />
# ...<br />
?></font></p>
Weiterführende Informationen finden Sie auf der PHP-Website:<br />
<strong>»</strong> <a href="http://ch2.php.net/manual/de/security.globals.php" target="_blank" title="Link zur PHP-Dokumentation">Kapitel 29. Verwendung von Register Globals</a><br />
<p><strong><br />
Schneller Workaround:</strong><br />
Um z.B. per GET übergebene Parameter im Skript weiter verwenden zu können, empfiehlt sich, im Parameter empfangenden PHP-Dokument zuoberst die PHP-Funktion <a href="http://www.php.net/manual/de/function.extract.php" target="_blank"><em>extract()</em></a> zu verwenden. Diese Funktion weist Array-Key/Value-Parametern entsprechende Variablennamen mit deren Inhalt zu.<br />
Folgende Codezeilen sollten also die Funktionalität Ihres Skripts wiederherstellen:</p>
<p style="padding: 6px; background-color: rgb(224, 224, 224);"><font face="Courier New"><?php<br />
extract($_GET, EXTR_SKIP);<br />
# <br />
# Hier folgt Ihr eigener Code<br />
# ...<br />
# <br />
?></font></p>
<br />
Wenn Formulardaten per POST übermittelt werden, muss anstelle von $_GET das $_POST-Array referenziert werden.<br />
<br />
<strong>Wichtiger Hinweis:</strong> Dieser Workaround ist nur als temporäre Lösung zu verstehen, der Code sollte zeitnah angepasst werden. Beachten Sie den Parameter EXTR_SKIP, der verwendet werden muss, damit aus Arrays extrahierte Variablen nicht lokal vorhandene überschreiben! ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
<item>
<title>Berechtigung von Dateien nach PHP-Upload (chmod, umask, 600)</title>
<link></link>
<description><![CDATA[ In einigen Serverkonfigurationen werden Dateien nach PHP-Upload per Standard auf die Rechte 600 gesetzt (Lese- und Schreibrechte nur für den erstellenden Benutzer). Damit der Webserver die Berechtigung hat, die Dateien des Web-Users anzuzeigen, sind zusätzliche Berechtigungen notwendig, die jedoch derzeit nicht per Standard gesetzt werden können.<br />
<br />
Mit diesem Tech-Channel Beitrag zeigen wir Ihnen Lösungen für ausgewählte CMS und eigene Skripte auf.<br />
<br />
<strong>Joomla</strong><br />
Das CMS Joomla bietet bei der Installation die Option zur Definition von festen Verzeichnis- und Dateirechten. Wählen Sie diese Option mit den Standardwerten 644 für Dateien und 755 für Verzeichnisse aus.<br />
Nachträglich können Sie diese Option im Menü <em>Site</em> -> <em>Global Configuration</em> setzen, wie in folgendem Bild dargestellt:<br />
<div align="center"><a target="_blank" href="http://www.dynamic-net.ch/images/techchannel/chmod_joomla.gif"><img width="200" vspace="5" hspace="5" height="200" border="1" align="middle" title="Klicken für Grossansicht" alt="Screenshot" src="http://www.dynamic-net.ch/images/techchannel/thmb_chmod_joomla.gif" /></a></div>
<br />
<strong>Gallery2 (Menalto)</strong><br />
Auch die Menalto-Galerie bietet die Möglichkeit, über die Konfiguration Standardrechte zu setzen. Die Option finden Sie unter <em>Site-Administration</em> -> <em>Allgemeine Einstellungen</em>:<br />
<div align="center"><a target="_blank" href="http://www.dynamic-net.ch/images/techchannel/chmod_gallery.gif"><img width="200" vspace="5" hspace="5" height="233" border="1" align="middle" title="Klicken für Grossansicht" alt="Screenshot" src="http://www.dynamic-net.ch/images/techchannel/thmb_chmod_gallery.gif" /></a></div>
<br />
<strong>Eigene Skripte</strong><br />
Damit Dateien in eigenen Skripten die korrekten Rechte erhalten, bieten sich zwei Lösungswege an:<br />
<br />
1. PHP-Funktion <a target="_blank" href="http://ch2.php.net/manual/de/function.chmod.php">chmod()</a> (empfohlen)<br />
Rufen Sie die Funktion in Ihrem Upload-Skript direkt nach Upload mit der neu erstellten Datei auf.<br />
<br />
<font face="Courier New"><?php<br />
# ...<br />
# Ihr Upload-Code<br />
# ...<br />
// Bei einem erstellten Verzeichnis (selten):<br />
chmod ("./verzeichnisname", 0755);<br />
// Bei einem hochgeladenen Bild (oder sonstiger Dateityp):<br />
chmod ("./verzeichnis/meinbild.jpg", 0644);<br />
?></font><br />
<br />
2. PHP-Funktion <a target="_blank" href="http://ch2.php.net/manual/de/function.umask.php">umask()</a><br />
Wenden Sie diese Funktion idealerweise am Anfang des Upload-Skriptes an. Umask ist als eine Art inverse Maske zu verstehen. Um die gewünschten Berechtigungen zu erhalten, setzen Sie den Wert 022:<br />
<br />
<font face="Courier New"><?php<br />
umask(022);<br />
# ...<br />
# Ihr Upload-Code<br />
# ...<br />
?></font> ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
<item>
<title>Perl: Sicheres Skripting mit perlsec</title>
<link></link>
<description><![CDATA[ Perl-Skripte werden auf den Webhosting-Servern neu per Standard unter Berücksichtigung der <a href="http://perldoc.perl.org/perlsec.html" target="_blank">Perl security</a> ausgeführt, um "tainted data" (verschmutzte Daten) aus Umgebungsvariablen zu verhindern, welche die Ausführung von schadhaftem Code ermöglichen können.<br />
<br />
Möglicherweise erhalten Sie neu folgende Fehlermeldung bei Ausführung eines Perl-Skripts (im Beispiel formmail.pl) im error.log (bei Webhosting-Kunden im Browser nur durch "Internal Server Error 500" erkennbar):<br />
<font face="Courier New"><br />
<font color="#000000"> Insecure $ENV{PATH} while running setuid at formmail.pl line 391.<br />
Premature end of script headers: /home/www/webX/html/cgi-bin/formmail.pl</font></font><br />
<br />
Um diesen Mangel zu beheben, kann der Pfad im Array der Umgebungsvariablen neu gesetzt und nicht benötigte gelöscht werden. Fügen Sie nach den allgemeinen Definitionen folgende zwei Zeilen in Ihr Perl-Skript ein:<br />
<br />
<font face="Courier New" color="#000000">$ENV{PATH} = "/bin:/usr/bin";<br />
delete @ENV{ 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};</font><br />
<br />
Die von uns bereitgestellte Version von FormMail.pl wurde bereits aktualisiert und steht in der <a href="https://ticketsystem.dynamic-support.ch/scripts/faq.php" target="_blank">FAQ</a> zum <a href="http://ticketsystem.dnet-service.net/ebusiness/filesharing/files/support/cgi_formmail.zip" target="_blank">Download</a> bereit. ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
<item>
<title>MySQL-Fehler: 1054 - Unknown column 'p.products_id' in 'on clause' (oder ähnlich)</title>
<link></link>
<description><![CDATA[ MySQL in der Version 5 ist gegenüber Version 4 weniger tolerant bezüglich nachlässig formulierter Queries - insbesondere betrifft dies Abfragen mit JOIN Syntax. Sind z.B. in der Abfrage Tabellen in falscher Reihenfolge der JOIN-Verknüpfung vorangestellt, wird bei MySQL 5 oben angegebene Fehlermeldung generiert.<br />
<br />
Betroffen sind u.a. Versionen von osCommerce und Woltlab Burning Board. Patches werden teils von den Skriptherstellern oder Skriptnutzern bereitgestellt (siehe unten).<br />
<br />
Als schneller Workaround ein Auszug eines Problemskripts in osCommerce. Folgende Abfrage erzeugt den oben genannten Fehler:<br />
<br />
<div style="padding: 7px; background-color: rgb(228, 228, 228);"><font face="Courier New">select count(p.products_id) as total from products_description pd, products p left join manufacturers m on p.manufacturers_id =[...]</font></div>
<br />
Wird diese Abfrage folgendermassen korrigiert, funktioniert die Abfrage problemlos:<br />
<div style="padding: 7px; background-color: rgb(228, 228, 228);"><font face="Courier New">SELECT COUNT(p.products_id) AS total FROM products p, products_description pd LEFT JOIN manufacturers m ON p.manufacturers_id =[...]</font></div>
<p><strong>Patches</strong><br />
Für betroffene osCommerce-Versionen steht <a target="_blank" href="http://www.oscommerce.com/community/contributions,4654">hier</a> ein Patch zum Download bereit.</p> ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
<item>
<title>Sensible Zugangsdaten in Perl- und PHP-Skripten sicher verwenden</title>
<link></link>
<description><![CDATA[ Nahezu jedes CMS und auch viele kleine Skripte, wie z.B. Gästebücher, verwenden MySQL-Datenbanktabellen. Um die Datenbankverbindung herzustellen, müssen die Zugangsdaten mit ihren entsprechenden Skriptbefehlen meist in zu inkludierenden Dateien im Web gespeichert werden.<br />
<br />
In seltenen Fällen kann es durch Fehlkonfigurationen oder temporären Diensteausfällen passieren, dass Code von Skripten vom Perl- oder PHP-Interpreter nicht geparst (Befehle ausgeführt) wird. Dies hätte zur Folge, dass der Source-Code dem Betrachter der Seite zum Download angeboten wird - was unter Umständen z.B. die erwähnten MySQL-Zugangsdaten oder sonstige sensible Informationen offenlegt.<br />
<br />
Um diese Art Sicherheitslücke zu umgehen, empfiehlt es sich, sensible Daten ausserhalb des für den Browser erreichbaren Verzeichnisses zu platzieren:<br />
<br />
Über den Browser sind per Standard alle Dateien in dem Verzeichnis /html und darunter zu erreichen. Die Ordnerstruktur des Webhostings bietet auch ein Verzeichnis /files, dem keine (Sub-)Domain zugewiesen werden kann, worauf Sie jedoch normal Zugriff haben und Daten speichern können. Es empfiehlt sich, an diesem Ort Ihre sensiblen Skriptdaten zu speichern. Innerhalb Ihres Webs können Sie bei PHP mit einer include(), require() oder require_once()-Funktion diese Dateien referenzieren.<br />
<br />
<strong>Anwendung mit fertigen PHP-Skriptlösungen, wie z.B. Joomla, WordPress, usw.</strong><br />
<br />
Bei CMS und anderen Fertiglösungen liegt meist eine Konfigurationsdatei vor, die im Stamm- oder einem eigenen include-Verzeichnis gespeichert ist.<br />
Um diese Konfigurationsdatei mit ihren sensiblen Daten auszulagern, führen Sie folgende Schritte aus:<br />
<ol>
    <li>Kopieren Sie die Konfigurationsdatei in das Verzeichnis /files (oder ein dort angelegtes Unterverzeichnis)</li>
    <li>Ersetzen Sie die originale Konfigurationsdatei durch eine Datei mit folgendem Inhalt:<br />
    <font face="Courier New"><?php    include("/home/www/webX/files/kopiederkonfigurationsdatei.php");<br />
    ?></font></li>
    <li>Ersetzen Sie im Beispiel <em>webX</em> durch Ihre Webnummer (Benutzername) und passen Sie den Namen der Kopie der Konfigurationsdatei an.</li>
</ol>
Die Konfigurationsdatei wurde nun ausgelagert und ist ausserhalb des für den Browser sichtbaren Bereichs.<br />
<br />
<font color="#ff0000">Hinweis:</font><br />
Durch diese Methode kann die globale Konfiguration z.B. von Joomla sehr wahrscheinlich nicht mehr über das Administrationsinterface modifziert werden. Nehmen Sie Änderungen in der Konfiguration daher immer direkt in der Konfigurationsdatei vor. ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
<item>
<title>osCommerce mit register_globals Off</title>
<link></link>
<description><![CDATA[ Aus Sicherheitsgründen ist die PHP-Direktive register_globals ausgeschaltet. Damit osCommerce funktioniert, können Sie folgenden Patch installieren, der die Notwendigkeit von eingeschalteten globalen Variablen aufhebt:<br />
<br />
<a target="_blank" href="http://www.oscommerce.com/community/contributions,2097">http://www.oscommerce.com/community/contributions,2097</a> ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
<item>
<title>Hilfe bei 500 Fehler (Internal Server Error)</title>
<link></link>
<description><![CDATA[ <p>Wenn  bei Aufruf Ihrer Domain oder einer Unterseite ein 500-Fehler generiert wird, hat dies vermutlich eine der folgenden Ursachen:</p>
<ul>
    <li><strong>ungültige .htaccess-Datei</strong><br />
    Prüfen Sie, ob Sie eine .htaccess-Datei verwenden, die ungültige oder nicht erlaubte Inhalte hat. Gewisse Optionen oder Überschreibungsfunktionen sind in .htaccess-Dateien nicht erlaubt. Kommentieren Sie ggf. probeweise einzelne Zeilen durch Voranstellen eines #-Zeichens aus</li>
    <li><strong>zu grosszügig gesetzte Datei- und/oder Verzeichnisrechte</strong><br />
    Wenn Ihr Web mit dem PHP-Wrapper suphp läuft, geniessen Sie einen besonderen, zusätzlichen Schutz Ihres Webs. PHP-Dateien werden hier nur ausgeführt, wenn Ihrem Web-Benutzer die auszuführende PHP-Datei gehört und maximal die Standardrechte zugewiesen bekommen hat. Über chmod oder WebFTP können Sie ggf. die Rechte bei Verzeichnissen auf 0755 und bei PHP-Dateien auf 0644 ändern.<br />
    Viele Skriptlösungen empfehlen, die Rechte auf 0777 zu setzen, was ein Schreiben, Ändern und Löschen von Daten von "jedermann" in Ihrem Web ermöglicht. Diese "Empfehlung" müssen Sie ignorieren, damit der 500-Fehler nicht auftritt.</li>
</ul>
<p>Bei Fragen zu diesem Thema oder Bedarf an Hilfestellung steht Ihnen unser Support-Team gerne zur Verfügung.</p> ]]></description>
<pubDate>Sat, 04 Feb 2012 08:00:00 GMT</pubDate>
<guid></guid>
</item>
</channel>
</rss>
