ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
530
530
EMPFEHLEN
-
24.02.08 23:39 #1
- Registriert seit
- Oct 2006
- Ort
- Schweiz / Fricktal
- Beiträge
- 317
Hallo Zusammen,
Ich stehe vor einem sehr grossen Problem! Es hat mich heute jemand darauf aufmerksam gemacht das unsere Webseite wohl sehr leicht "Hack" bar seie. Nun habe ich das Problem das ich mich leider mit dem Problem (SQL-Injektion) nicht wirklich auskenne.
Bis jetzt sieht es bei mir eig so aus:
Nun wollte ich Fragen wie ich das so umstellen kann das es danach vor SQL-Injektion`s Sicher ist?PHP-Code:<?php
$id = $_GET["id"] ;
$daten = mysql_query("SELECT was, auch, immer FROM member WHERE id='$id'") ;
...
?>
Ich habe selbst den Test gemacht beim PN System. Ich konnte zwar keine einträge ändern, jedoch war die gesammte Zeile fehlerfaft. Anstelle von der User ID stand der Injection-Code da etc..
Bitte helft mir
-
-
24.02.08 23:47 #3
- Registriert seit
- Oct 2006
- Ort
- Schweiz / Fricktal
- Beiträge
- 317
Das heisst ich sollte wirklich alle Querys nochmal ändern mit dem:
mysql_real_escape_string($_POST['spalte2Wert'])
?
Und ist dies dann "sicher"?
Könnte man theoretisch nicht auch einfach extrem abartige namen für die Tabellen verwenden? Dann könnte man ja auch nichts mehr tun, ausser man weis wie sie heissen
-
jaDas heisst ich sollte wirklich alle Querys nochmal ändern mit dem:
mysql_real_escape_string($_POST['spalte2Wert'])
?
100% nicht, weil man nie sich 100% schützen kann aber zu 90% ja.Und ist dies dann "sicher"?
das ist sinnlos, weil man einfach mit +SHOW+TABLES; arbeiten kann.Könnte man theoretisch nicht auch einfach extrem abartige namen für die Tabellen verwenden? Dann könnte man ja auch nichts mehr tun, ausser man weis wie sie heissen
-
25.02.08 01:22 #5
- Registriert seit
- Oct 2006
- Ort
- Schweiz / Fricktal
- Beiträge
- 317
Okay.
Dann weis ich wenigstens was ich heute Nacht zu tun habe
Sonst Surf ich eh nur herum 
Gibt es sonst noch irgend welche grossen Risiko-Sicherheitslücken in PHP / My SQL, die man unbedingt beachten sollte?
-
Dann sollte man es so machen, wie ich es in einem anderen Thread schon vorgemacht habe:100% nicht, weil man nie sich 100% schützen kann aber zu 90% ja.Denn ich habe noch nie eine SQL Injektion gesehen, die man so zu 100% auch in einen Integer wandeln könnte.PHP-Code:
<?php
/* ... */
if(($HarmloseID = intval($_GET['id'])) == 0){
echo("Fehlerhafte ID <br />\n");
}else{
$daten = mysql_query("SELECT was, auch, immer FROM member WHERE id='".$HarmloseID."'");
/* ... */
}
/* ... */
?>
Das Einzige, das du hierbei beachten musst ist, dass du keine ID 0 vergibst!
Falls deine Frage hiermit beantwortet sein sollte, dann markiere dieses Thread bitte als "Erledigt" (indem du den entsprechenden Button benutzt).
-
25.02.08 04:32 #7
- Registriert seit
- Oct 2006
- Ort
- Schweiz / Fricktal
- Beiträge
- 317
Solange es sich um IDs handelt kann man das sicher so machen, aber die ganzen Textfelder kann ich so ja nicht überprüfen und ich denke die sind genau so wichtig wie die IDs
-
Nicht nur Textfelder stellen ein Problem dar, sondern einfach alles, was nicht ausschließlich Ganzzahl ist.
Dann muss man sich halt nach Alternativen umschauen - zum Beispiel preg_match(), falls die Eingabe einem bestimmten Muster entsprechen soll. Wobei ich mit "Muster" A-Z, a-z, 0-9 und nur bestimmte (Sonder-)Zeichen meine.
Eingaben zu überprüfen ist auf jeden Fall nicht verkehrt
-
Prinzipiell gilt es sämtliche vom Benutzer kommende Werte als nicht vertrauenswürdig einzustufen, da du ja keinen Einfluss darauf hast. Deswegen musst du sie auf Gültigkeit prüfen, ob sie also die erwarteten Eigenschaften erfüllen (Validierung).
Erfüllen sie diese nicht, hast du mehrere Möglichkeiten: Entweder du brichst das Skript ab oder du veränderst die ungültigen Wert so, dass sie wieder gültig sind. Dies ist bei den PHP-Datentypen am einfachsten, da hierzu einfach eine Typkonvertierung vorgenommen werden kann. Bei anderen Datendomänen (insbesondere Zeichenkettenformate) ist das jedoch schwieriger. Allgemein gibt es jedoch zwei Möglichkeiten: Filtern und Maskieren. Beim Filtern werden einfach alle ungültigen Eigenschaften entfernt. Beim Maskieren werden die ungültigen Zeichen durch gültige, aber äquivalente Maskierungsfolgen ersetzt. Dies macht beispielsweise die mysql_real_escape_string()-Funktion.Markus Wulftange
-
25.02.08 23:29 #10
- Registriert seit
- Oct 2006
- Ort
- Schweiz / Fricktal
- Beiträge
- 317
Reicht denn bei IDs die per GET übergeben werden
oder sollte ich diese besser so filtern das nur 0-9 verwedet werden (mit preg_match()) ?PHP-Code:intval($_GET['id'])
Die Eingabefelder denk ich ist am sinnvolsten mit mysql_real_escape_string() zu überprüfen
-
Ja, intval(); reicht bei Werten die zu 100% ein Integer sind.
Aber aufpassen, der Wert, den du erwartest sollte nicht 0 sein, denn genau das gibt die Funktion bei Fehlschlag zurück
Ähnliche Themen
-
Sql injektion nötig wenn nicht die ID abgefragt wird?!
Von 4ever im Forum PHPAntworten: 3Letzter Beitrag: 14.09.10, 13:56 -
SQL-Injektion und Problem mit Anführungsstrichen
Von Sasser im Forum PHPAntworten: 21Letzter Beitrag: 15.05.09, 18:59 -
PHP und SQL-Injektion
Von Sasser im Forum PHPAntworten: 5Letzter Beitrag: 18.09.08, 16:29 -
Script-Injektion bei einsundeins
Von loetmann im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 08.10.07, 13:29 -
Code sicher gegen XSS und SQL-Injektion
Von slaughter89 im Forum PHPAntworten: 2Letzter Beitrag: 03.06.07, 16:52





Zitieren
Login






[PHP] [Codeschnipsel] ImageColor aus HTML-Farbcodierung erstellen