Daten sicher über ein Formular senden
Auf vielen Webseiten findet man ein Formular, dass es ermöglicht eine Mail zu schicken, einen Begriff in einer Datenbank zu suchen oder einen Kommentar zu schreiben. Man sollte aber immer mit Spambots rechnen, Benutzern, die versuchen schädlichen Code einzuschleusen oder die Datenbank zu löschen.
Gerade der Einsteiger sollte jedoch auf ein paar Sachen beachten, um z.B. sein Mailformular sicher zu betreiben. Grundlegendes zur Mailformularen und der Arbeit mit Datenbanken gibt es auf PHP-Einfach.
Bei Formularen sollte man immer vom ungünstigsten Fall ausgehen: Ein Benutzer hat kein Javascript und keine Cookies aktiviert. Deshalb sollte man ein paar Zeilen Code mehr investieren, um den Benutzern eine einfache Benutzung zu gewährleisten.
Der erste Teil: Die Formularseite
<?php session_start(); $_SESSION('antispam')="1"; ?>
Am Anfang wird einer Session ein Wert 1 zugewiesen, da wir dann später überprüfen können, ob das Formular bereits abgesschickt wurde. Und dann das Formular selbst:
1 2 3 4 5 | <form action="gettext.php?<?php echo SID; ?>" method="post"> <input style="display:hidden" name="leer" type="text" /> <input type="text" name="meintext" /> <input type="submit" value="Übermitteln" /> </form> |
Das Formular wird an die Seite gettext.php übergeben. Dabei wird die Session ID an die Url angehängt. Ganz einfach deshalb, weil nicht jeder Server dies bei ausgeschalteten Cookies automatisch macht.
Das sieht dann ungefähr so aus: gettext.php?PHPSESSID=cd45a3….. Dass man die ID im Klartext sieht, ist kein Sicherheitsrisiko, da sie auf der nächsten Seite wieder gelöscht wird.
Ein verstecktes Feld kann man mit type=”hidden” oder besser über CSS realisieren. Besser deshalb, weil die Bots es so schwerer finden.
Der zweite Teil: Die Auswertungsseite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php session_start(); if ($_SERVER['REQUEST_METHOD'] != 'POST') { die("Bitte diese Seite nicht direkt aufrufen."); } if (!isset($_SESSION('antispam')) { die("Das Formular wurde schon abgeschickt."); } session_destroy(); if (!empty($_POST['leer']) { die("Hallo Bot...."); } ?> ...zur weiteren Auswertung |
Das war der erste Teil der Auswertung. Hierbei wird überprüft, ob die Seite direkt aufgerufen wurde, durch “Aktualisieren” das Formular doppelt abgeschickt wurde oder ein Bot das versteckte Feld ausgefüllt hat.
Ein wichtiges Kapitel ist die Prüfung auf Schadcode.
Hier einige Informationen zu SQL-Injection und Email-Injection. Diese Sachen sollte man sehr ernst nehmen, wenn man nicht zur Spamschleuder werden oder seine Datenbank ohne Daten finden will.
Zunächst einmal das Filtern bei Mailformularen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php //Entfernen von PHP und HTML Tags: $text=strip_tags($text); //Entfernen von Leerzeichen: $text = trim($text); //Entfernen von Slashes: $text=stripslashes($text); //Mailformular: schädlichen Code aus Mailadressen und Betreffzeilen Filtern: $mail = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $mail ); $mail = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $mail ); //Ist die Mailadresse gültig? if(!eregi("^[_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3}\$", $mail)) { echo "Email ist ungültig."; } ?> |
Es gibt natürlich dann auch noch die Möglichkeit, die Daten in eine Datenbank einzutragen oder in ihr zu suchen. Natürlich nicht ohne vorher die Daten zu filtern:
1 2 3 4 | <?php include('db_connect.php'); // Verbindung zur Datenbank muss bestehen $text = mysql_real_escape_string($text); ?> |
Nachtrag: andreherdling.de beschreibt auf seiner Seite genau die Sicherheitsprobleme speziell von Mailformularen und bietet einer einfach zu benutzende PHP Funktion zur Absicherung an.
Freiheit des Gedankens – ein Privileg?
Heute wurde bekannt, dass Thilo Sarrazin als Mitglied des Vorstandes der Bundesbank entlassen werden soll.
Noch nie habe ich erlebt, dass die Meinung der Bevölkerung derart von der politischen und medialen abwich.
Christian Wulff, unser nach einigen Hinterzimmergesprächen demokratisch gewählter Präsident, hat schon vor ein paar Tagen angedeutet, dass er eine Entlassung wohlwollend prüfen werde.
In den Zeitungen war eine Hinrichtung ohne Gleichen vorangegangen. Folgend des Hanges nach der “political correctness”, welches man sich auf die tief hängende Flagge der Pressefreiheit geschrieben hatte, versuchte man, die Wahrheit als wirres Gerede hinzustellen.
Für die Politik durfte nicht sein, was nicht sein durfte. Ich bin gespannt, was sich die Bundesbank als Vorwand für die Kündigung einfallen lässt. Und hoffe, dass sie von einem unabhängigen Gericht gehörig in die Schranken gewiesen wird.
Man wird kaum argumentieren können, dass Sarrazin Themen anspricht, welche die Politik fürchtet wie der Teufel das Weihwasser. Themen, die ihr jahrzehntelanges Versagen und Unfähigkeit aufzeigt.
Und Wulff wird die Entlassung artig unterschreiben, wie es ihm die Merkelraison gebietet. Manchmal kann ich verstehen, warum Horst Köhler hingeschmissen hat.
Freiheit nur für die Anhänger der Regierung, nur für die Mitglieder einer Partei – mögen sie noch so zahlreich sein – ist keine Freiheit. Freiheit ist immer Freiheit der Andersdenkenden. Nicht wegen des Fanatismus der Gerechtigkeit, sondern weil all das Belebende, Heilsame und Reinigende der politischen Freiheit an diesem Wesen hängt und seine Wirkung versagt, wenn die Freiheit zum Privilegium wird.
Rosa Luxemburg
Das WordPress Speicherproblem
Der Umstieg auf die englische Version von WordPress war notwendig, um dem ausufernden Speicherverbrauch auf meinem Blog eingermaßen Herr zu werden.
Ich habe mich von so ziemlich allen getrennt, was verdächtig war Megabytes zu fressen.
Vor allem die Plugins “Contact form” und “Download Monitor” kratzten heftig am Php Limit.
“Inove“, was ich bis jetzt als Theme benutzt habe, fiel der Sache auch zum Opfer. Die deutsche Sprachdatei ließ sich zwar in der config.php aktivieren, aber das war nicht wirklich eine Lösung.
Also war selbst basteln angesagt. Herausgekommen ist “Essential”, welches ich nun verwende.
Basta und Ende
.