Sicheres Speichern in einer MySQL Datenbank mit PHP
tk-zetel
- php
0 bleicher0 Texter mit x0 bleicher
0 Texter mit x0 hotti0 dedlfix
Hallo,
ich brauche mal Hilfe zum Thema PHP Sicherheit.
Ich erstelle zur Zeit eine Seite mit Netobjects11. Hier habe ich Formulare mit Eingabefeldern für z.B. Artikelerfassung, Registrierung usw. Die Daten werden in einer MySql-Datenbank gespeichert. Alles kein Problem, nun geht es mir um die Sicherheit meiner Datenbank. Wie prüfe ich den Inhalt der Eingabefelder ob jemand mir etwas „Böses“ will, sprich die Datenbank auszuspionieren, irgendwelchen Php-Code einzuschleust usw. was es da nicht alles so gibt.
Zur Zeit habe ich das Speichern so aufgebaut:
<?php require_once('include_datenbank.php'); ?>
<?
$Artikelnummer = mysql_real_escape_string($_POST["Artikelnummer"]);
$Datum = mysql_real_escape_string($_POST["Datum"]);
$Email = mysql_real_escape_string($_POST["Email"]);
$Firma = mysql_real_escape_string($_POST["Firma"]);
$eintrag="INSERT INTO Artikeldaten (Artikelnummer,Datum,Email,Firma)VALUES('$Artikelnummer','$Datum','$Email','$Firma',)";
?>
Das Speichern läuft zwar Fehlerfrei nur mit der Sicherheit ist es halt ein Problem.
Für einen Tipp wäre ich sehr dankbar.
Thomas
Grüße,
ergänze real_escape um striptags ? viel mehr macht man selten.
MFG
bleicher
ergänze real_escape um striptags ?
Wozu (an der Stelle)?
Grüße,
Wozu (an der Stelle)?
quasi "für später" zum Zwecke der allgemeinen Sicherheit - die DB ist AFAIK durch escape schon ausreichend geschützt, nicht?
MFG
bleicher
Wie prüfe ich den Inhalt der Eingabefelder ob jemand mir etwas „Böses“ will
...?
In der Regel gar nicht*. Normalerweise reicht es aus, das Böse kontextgerecht unwirksam zu machen (beim speichern in einer MySql-Datenbank mit mysql_real_escape_string). Dazu gibt es einen neuen Artikel hier irgendwo auf selfhtml.
* Wenn hier jemand z.B. den nach dem Befehl zum löschen einer Datenbank fragt, soll die Antwort ja auch nicht im Filter hängen bleiben.
Dazu gibt es einen neuen Artikel hier irgendwo auf selfhtml.
Da er "irgendwoer" war als ich gedacht hätte, hier noch die url:
http://aktuell.de.selfhtml.org/artikel/php/kontextwechsel/
hi,
[..] Wie prüfe ich den Inhalt der Eingabefelder ob jemand mir etwas „Böses“ will,
Ganz einfach: Filtere aus der Eingabe alle Zeichen raus, die nicht erlaubt sind.
Hotti
Hi!
Wie prüfe ich den Inhalt der Eingabefelder ob jemand mir etwas „Böses“ will, sprich die Datenbank auszuspionieren, irgendwelchen Php-Code einzuschleust usw. was es da nicht alles so gibt.
Da du nicht in der Lage sein wirst, eine genaue und allumfassende Definition von "Böses" zu erstellen - und garantiert auch keinen finden wirst, der das kann - kannst du nicht darauf prüfen. Ich würde auch nicht den umgekehrten Weg gehen, alles "Gute" durchzulassen. Dabei schränkst du regelmäßig oft auch viele Inhalte mit guten Absichten ein. Das einzige, was in jedem Fall funktioniert, ist, die Daten so zu notieren, dass sie der Empfänger eindeutig als Daten interpretieren kann und nicht durch die Fehlinterpretation von Daten als Steuerzeichen aus dem Konzept gebracht werden kann.
Dabei kann man wie folgt vorgehen.
Vorüberlegungen:
Bei diesem Testen kannst du "provozierende" Daten verwenden, die für eine unmittelbare Tätigkeit interessant sein können (wie Speichern in einem DBMS) und solche, die später eine Auswirkung haben können (wenn sie irgendwann abgerufen werden). Die ersten Testdaten könnten es mit SQL-Injection probieren, die zweiten HTML-Code enthalten. Beide müssen beide Stufen unbeschadet überstehen und so wie eingegeben im Ausgabemedium zu sehen sein. Wenn das alles klappt, bist du schon aus dem Gröbsten raus. Doch das darf kein Ruhekissen sein. Wenn du dein System selbst administrierst, solltest du regelmäßig Veröffentlichungen zu Sicherheitslücken verfolgen, auf die du keinen direkten Einfluss hast - also die die in PHP, MySQL und so weiter enthalten sind.
Ein Angreifer hat es nun - wenn alles richtig gemacht wurde - sehr schwer, ungewünschten Code unterzujubeln. Übrig bleiben unerwünschte aber unschädliche Inhalte, die du mit deinem Menschenverstand identifizieren musst und vermutlich beseitigen willst.
Lo!