Vor SQL Injection etc. Schützen?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
angreifer
beachten
bearbeiten
code
dank
datum
entfernen
filtern
funktion
haken
http
post
problem
register
sichern vergessen
string
symbol
url
verwaltung
-
Hallo Community,
ich wollt mal fragen welche möglichkeiten es eigentlich gibt seine Seite vor SQL Injection etc. einigermaßen zu schützen.
Für Login weiß ich das man real_escape_string verwenden kann, aber wenn es noch andere Lücken gibt, wie kann man sich vor denen schützen?
Zum Beispiel auch bei einem News Script.
Mit freundlichen Grüßen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Um dich vor einer SQL-Injection zu schützen, musst du eigentlich nur eine hauptsächliche Sache beachten: Gib niemals etwas, was du von einem User bekommst, an die die Datenbank weiter, ohne es zu filtern. Nebenbei sollte noch Register globals deaktiviert sein (das machst du unter Verwaltung->Webspace->Domains->Klick auf deine Adresse->"Bearbeiten"-Symbol->Haken bei "Register globals" entfernen->speichern). Vom User kommt alles mögliche, wie z.B. Daten per Get oder Post. Aber ach Cookies kommen vom User-PC und können manipuliert sein, sich dagegen ab zu sichern, vergessen die meisten Programmierer. Wenn du alles, was du vom User entgegen nimmst, durch die Funktion mysql_real_escape_string() schickst und Register globals auf allen Domain deaktiviert hast, bist gegen SQL-Injections schonmal geschützt.
-
drafed-map schrieb:
Um dich vor einer SQL-Injection zu schützen, musst du eigentlich nur eine hauptsächliche Sache beachten: Gib niemals etwas, was du von einem User bekommst, an die die Datenbank weiter, ohne es zu filtern. Nebenbei sollte noch Register globals deaktiviert sein (das machst du unter Verwaltung->Webspace->Domains->Klick auf deine Adresse->"Bearbeiten"-Symbol->Haken bei "Register globals" entfernen->speichern). Vom User kommt alles mögliche, wie z.B. Daten per Get oder Post. Aber ach Cookies kommen vom User-PC und können manipuliert sein, sich dagegen ab zu sichern, vergessen die meisten Programmierer. Wenn du alles, was du vom User entgegen nimmst, durch die Funktion mysql_real_escape_string() schickst und Register globals auf allen Domain deaktiviert hast, bist gegen SQL-Injections schonmal geschützt.
Danke für den Hilfreichen Beitrag ;)
Falls es ncihts weiteres wichtiges gibt kann das thema geschlossen werden. -
Das größte Problem beim Schützen gegen SQL Injections ist Faulheit. Ich hatte früher immer das Problem, dass ich mir gedacht hab: Ja, dieser Wert kann eigentlich nichts gefährliches enthalten, der wurde da doch schon gepüft, also kann ich mit das mysql_real_escape_string auch ersparen. Nun, in den meisten Fällen behalte ich Recht. Aber manchmal halt nicht.
Daher habe ich mir überlegt, wie ich das Escapen bequem machen kann. Also, damit ich nicht immer mysql_real_escape_string tippen muss.
Meine Lösung war die DB Klasse. Die Readme solte erläutern, warum das das ganze deutlich bequemer macht ;) -
Ja, stimmt, Nikic. Das war bei mir auch immer ein Problem, ich habe eine Lösung dafür gefunden, sie hier leider noch nicht präsentiert. Dann tue ich das mal.
Leitest du alles über eine, nennen wir sie mal Kontrolldatei oder einen Router, dann ist dies besonders einfach. Ich habe dort einfach die Arrays von Post und Get (gelegentlich auch Cookies, wenn ich die mal gebraucht habe) durch eine foreach-Schleife gedreht. Darin habe ich alles bedrohliche heraus gefiltert. Bei einem Projekt war Sicherheit besonders gefragt, dann habe ich an dieser Stelle noch etwas zusätzliches eingefügt (weil es sich anbot): Es wurde alles geprüft, dass es nur explizit erlaubte Zeichen in den Strings übergeben wurde, sobald auch nur eine Kontrolle fehlschlug wurde gleich der Code
ausgeführt. Bei Bedarf kannst du den Angreifer auch schon beim 1. Angriffsversuch (durch das Bannen seiner IP) des Servers verweisen. Dass das Script hier sofort beendet wurde, macht es dem Angreifer außerdem unmöglich, irgendwelche Informationen bezüglich seines Erfolges aus möglichen Fehlermeldungen zu ziehen. Wenn du kein derartig pingeliges Sicherheitsregime führen willst, dann solltest du dafür sorgen, dass dem Angreifer keine relevanten Daten zukommen. Besonders von den MySQL-Funktionen. Eine Funktion bringst du durch das Vorsetzen des At-Zeichens (@) zum Schweigen.header('Location: about:blank'); die();
Solltest du die oben beschriebene pingelige Sicherheitsvorkehrung anwenden wollen, dass empfehle ich dir, während den Entwicklungsarbeiten kein Bannen der IP durch zu führen, dies kann nämlich äußerst unangenehm werden. Ich zum Beispiel verwendete eine Unicode-Kodierung, weswegen ich es als selbstverständlich betrachtete, Umlaute durch die Gegend schicken zu können. Zum Client hin hat das auch funktioniert, nur auf dem Rückweg wurde sofort alles abgeblockt, ich hatte nämlich vergessen, die deutschen Umlaute mit in den Regex der Kontrollfunktion mit aufzunehmen. -
Danke für die Hilfreichen Tipps ;)
Ich hoffe ich schaff die umsetzung, da ich noch nicht recht gut bin in PHP :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage