Tag-Archive for » PHP «

POST-Anfragen können Internetserver lahmlegen

Auf dem Kongress des Chaos Computer Clubs wurde eine neue Schwachstelle von Internetservern offengelegt. Die Entwickler Alexander Klink und Julian Wälde haben das Problem entdeckt und beschrieben.

Über POST-Requests kann man gezielt Hash-Kollisionen auslösen, die die Last eines Internetservers drastisch erhöhen, und so eine DoS-Angriff fahren. Das klappt im Grunde bei allen Webservern, denn das Problem liegt in den verwendeten Scriptsprachen wie PHP, ASP oder Javascript.

Durch solche provozierten Hash-Kollisionen braucht man weniger als 100 kBit/s Bandbreite, um eine moderne CPU komplett auszulasten und einen Internetserver in die Knie zu zwingen. Als bestes Mittel dagegen gilt es, die Hash-Funktion zu randomisieren.

Einige Hersteller haben schon auf die Angriffsmöglichkeit reagiert. Microsoft bietet einen Patch für ASP.Net an, der heute erscheinen soll. Bei PHP empfiehlt sich die Absicherung mit Suhosin an. Für Tomcat gibt es ein Workaround und für Ruby einen Patch.

Ein einfacher Wechsler für Werbung in PHP

In den meisten Online-Verkaufsstellen hat man gerade in der Vorweihnachtszeit mehr Werbung unterzubringen, als Platz dafür vorhanden ist. Und da die ja zum Beispiel in der Sidebar möglichst weit oben stehen soll, liegt der Gedanke nahe, einen einfachen, zufälligen Wechsler zu verwenden, um abwechselnd die eine oder die andere Werbung an der besten Stelle zu zeigen.

Dazu reicht ein einfaches Programm in PHP:

<?php
$wechsel=rand(1,2);
If ($wechsel==1) {
?>
<div id=”Werbung”>
Unser Klassiker: Modell 1
</div>
<?php } else { ?>
<div id=”Werbung”>
Unser Neuester: Modell 2
</div>
<?php } ?>

Die Variable $wechsel wird von der Zufallsfunktion rand() auf einen Wert von 1 oder 2 gesetzt und eine If-Else-Verzweigung zeigt je nach Wert die erste oder die zweite Werbung. Das lässt sich natürlich auch auf mehr als zwei Werbemessages erweitern

Webbasierter Cloud-Editor ACE 0.2.0 mit neuen Sprachen

ACE ist ein webbasierter Programmeditor mit einem Funktionsumfang, der einem normalen Editor schon ziemlich nahe kommt. Es ist ein Nachfolge-Projekt von Mozilla Bespin. Die neue Version 0.2.0 bringt eine vertikal oder horizontal geteilte Ansicht des Editors, Code-Folding und einen Syntax-Check während der Eingabe.

An Sprachen werden aktuell PHP, Java, Javascript, Ruby, C++, Python, HTML und CSS unterstützt. In Arbeit ist die Sprachunterstützung für Scala, C#, Perl, Groovy und JSON.

Der Cloud-Editor ACE ist komplett in JavaScript geschrieben. Weitere Informationen und einen Download-Link findet man auf der ACE-Homepage.

PHP: Festplatten-Speicher des Webservers abfragen

Ausgabe des Codeschnipsels

Gelegentlich kann es wichtig werden, zu wissen, wie viel Speicherplatz man noch auf der Festplatte des Webservers zur Verfügung hat. Gerade bei einer Internetpräsenz mit vielen Digitalfotos in voller Größe sind schnell die Grenzen der Kapazität erreicht.

Der folgende PHP-Schnipsel gibt die Gesamtgröße der Festplatte und den freien Speicherplatz darauf aus. Auch die im aktuellen Verzeichnis benutzte Kapazität wird angezeigt, das hilft zu erkennen, ob es wirklich die Fotos sind, oder ob ein anderer Bereich die Ressourcen belastet. Der Code dazu:

<?PHP

$path = “./”;
$free = round(disk_free_space  ($path) / 1024 / 1024, 3);
$disk = round(disk_total_space ($path) / 1024 / 1024, 3);

printf (‘<p>Von insgesamt %s GB sind noch %s GB frei.</p>’,
number_format ( $disk, 0, ‘,’, ‘.’),
number_format ( $free, 0, ‘,’, ‘.’)
);

define (‘_size’, 4096);

function dir_size($DIR = FALSE) {
if ( ! $DIR OR ! is_dir($DIR)) return;

if (substr($DIR,-1) != “/”) $DIR .= “/”;
if ($d = dir($DIR)) {
$size = _size;
while ($n = $d->read()) {
if ($n == “.” OR $n == “..”) continue;
$SIZE += (is_dir($DIR . $n))
? dir_size($DIR . $n) + $size
: ceil(filesize($DIR . $n) / $size) * $size;
}
$d->close();
}
return $SIZE;
}

printf(‘<p>Im Verzeichnis sind %s Bytes in Benutzung</p>’,
dir_size(dirname(__file__)));
?>

PHP: Alle Meta-Tags einer Internetseite anzeigen

Wer Internetseiten erstellt, muss häufiger alle Meta-Tags einer Seite auslesen. Das kann man natürlich über die Quellcode-Anzeige des Browsers machen, es kann aber relativ umständlich sein. Die PHP-Funktion get_meta_tags() macht es sehr einfach, alle Meta-Tags auf einmal auszulesen und anzuzeigen. Das sieht dann so aus:

// Meta-Tags auslesen
$seite = “www.homepage-anleitung.de”;
$mtarray = get_meta_tags($seite);

// Meta-Tags ausgeben
foreach ($mtarray as $key => $wert) {
echo $key.”: “.$wert.”<br />”;
}

Das Programm gibt alle Meta-Tags der Seite mit einem Tag pro Zeile aus. Wenn man das Script um ein Formular zur Eingabe einer Webseiten-Adresse erweitert, hat man ein Werkzeug, mit dem man schnell und einfach alle Meta-Tags beliebiger Internetseiten anzeigen kann.

PHP: Erreichbarkeit von Internetseiten prüfen

Wer mehrere Internetpräsenzen auf verschiedenen Servern betreuen muss, möchte vielleicht wissen, ob auch wirklich alle online sind und gegebenenfalls einen Hinweis bekommen, wenn eine davon aus irgendeinem Grunde nicht mehr erreichbar ist.

Dazu muss man einfach nur eine Verbindung zu der Website öffnen und schauen ob das klappt. Der Code dazu lautet zum Beispiel:

<?php
$url = “www.homepage-anleitung.de”;
$online = @fsockopen (“$url”, 80);
if (!$online) {
echo “Seite $url ist nicht erreichbar”;
} else {
echo “Seite $url ist erreichbar”;
}
?>

Dies einfache Beispiel zeigt das Prinzip einer Online/Offline-Prüfung. Wenn man mehrere Seiten zu überwachen hat, sollte man die am besten in einer Schleife nacheinander testen und statt der einfachen Textausgabe über eine Email nachzudenken, zumindest für den Fall, dass die Seite nicht mehr erreichbar ist.

PHP: Dateien in einem Verzeichnis zählen

Häufig muss man bei der Programmierung wissen, wie viele Dateien in einem Verzeichnis sind. Wenn man keinen Zähler hat, der bei jeder neuen oder gelöschten Datei angepasst wird, hilft nur das Zählen der aktuell im Verzeichnis befindlichen Dateien. Und das geht so:

<?php
$pfad = “.”;
$i = 0;
$dh = opendir($pfad);
while ($datei = readdir($dh)) {
if($datei !== “” &&
$datei !== “.” &&
$datei !== “..” &&
!is_dir($datei)) {
$i++;
}
}
echo “$i Dateien im Verzeichnis”;
?>

Die Verzeichniseinträge “.” und “..” werden nicht mit gezählt. Die Variable $pfad enthält das Verzeichnis, das durchsucht wird, im Beispiel wird mit dem Punkt das aktuelle Verzeichnis durchsucht. Hier kann man natürlich auch ein anderes Verzeichnis einstellen, z.B. $pfad=”../bilder”;.

Category: PHP  Tags: , , ,  Leave a Comment

PHP/MySQL: Die ID eines neuen Datensatzes

Man hat schon so manchen schrägen Trick gesehen, um die ID eines neu angelegten Datensatzes herauszubekommen. Viele Leute schreiben mit dem INSERT einen definierten Wert, zum Beispiel “neu” in eines der Datenfelder, um dann genau diesen Wert in der Tabelle zu suchen und dann alle Daten in per UPDATE in den Datensatz zu schreiben. Dabei geht das auch viel einfacher:

<?php
$sql = mysql_query("INSERT INTO kunden
(Vorname, Nachname, Adresse) VALUES
('$vorname', '$nachname', '$adresse')"
);
$id = mysql_insert_id();
?>

Die Funktion mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde. Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen. Die Funktion liefert 0, wenn die vorhergehende Abfrage keinen AUTO_INCREMENT Wert erzeugt hat. Falls Sie den Wert zur späteren Verwendung speichern möchten, stellen Sie sicher, dass Sie mysql_insert_id() direkt nach der Abfrage aufrufen, die einen Wert erzeugt hat.

Category: PHP  Tags: , , , ,  Leave a Comment

PHP-Tipp: Ausgabe des Alphabets

Gelegentlich braucht man eine Alphabet-Ausgabe, zum Beispiel für ein Register. Bevor da jeder Buchstabe einzeln mit einer Ausgabe bedacht wird, kann man besser eine Schleife bilden, in der die ASCII-Codes des Alphabets nacheinander ausgegeben werden. So sieht der Code-Schnipsel dafür aus:

<?php
$i=65;                         //65 stellt den Buchstaben A dar
while($i <= 90) {        //90 stellt den Buchstaben Z dar
echo chr($i);
$i++;
}
?>

Zusätzlich zur Ausgabe des Buchstaben mit echo chr($i); kann innerhalb der Schleife natürlich noch weiterer Code stehen, ein Link auf die entsprechende Registerkarte oder die Ausgabe von Elementen mit diesem Anfangsbuchstaben – was auch immer.

Category: PHP  Tags: , , ,  Leave a Comment

Datum und Uhrzeit mit PHP ausgeben

In HTML gibt es keine Möglichkeit, Datum und Uhrzeit auf einer Seite mit auszugeben. Gerade bei statischen Seiten ist es  ein deutlicher Vorteil für die Auswertung einiger Suchmaschinen, wenn auf den einzelnen Webseiten das aktuelle Tagesdatum angezeigt wird. Der PHP-Code dazu ist nur ein übersichtlicher Einzeiler:

<?php echo date(“d.m.Y”).” – “.date(“H:I”).” Uhr”; ?>

Die Ausgabe sieht dann so aus:

30.05.2011 – 07:57 Uhr

Wenn man den Code in eine gemeinsame Kopf- oder Fußzeile eintragen kann, braucht man ihn nur einmal einsetzen und er zeigt auf jeder Seite der Präsenz das Datum und die Uhrzeit an.

Category: HTML, PHP  Tags: , , ,  Leave a Comment