| Webmaster-Security Fragen zur richtigen Serverkonfiguration oder Absicherung dynamischer Scripte gehören hier hinein. |
Diskussion: SQL Datensätze bearbeiten mit möglichst wenig Informationen vom Client im Forum Webmaster-Security, in der Kategorie Security Area; Anzeige Hallo alle zusammen, ich schreibe gerade an einem PHP / SQL CMS mit Shop System, etwas genauer gesagt schreibe ...
![]() |
| | #1 (permalink) |
| Registriert seit: 25.03.07 ![]() Likes: 0 | Anzeige Hallo alle zusammen, ich schreibe gerade an einem PHP / SQL CMS mit Shop System, etwas genauer gesagt schreibe ich gerade einige Scripte die Daten in der dazugehörigen Datenbank verändern. Um die zu bearbeitenden Datensätze zu erkennen reiche ich durch die Scripte momentan per hidden input Feld die Datensatznummer weiter Beispiel: Code: $kategorienr = $HTTP_POST_VARS['kategorienr'];
$sql = "SELECT name FROM mcs_produkt_kategorien WHERE kategorienr = $kategorienr";
$result = mysql_query($sql, $Server);
...
<form action="produkt-kategorie-bearbeiten.php" method="post">
<?php
if($result) {
$data = mysql_fetch_array($result);
?>
<input type="hidden" value="<?php echo $data['kategorienr']; ?>">
<input type="text" value="<?php echo $data['name'] ?>" name="name"/>
<input type="submit" value="bearbeiten"/>
<?php
}
else {
echo $ErrorContent5;
}
?>
</form> Code: $sql = "UPDATE mcs_produkt_kategorien SET name = $name WHERE kategorienr = $kategorienr"; Jetzt ist meine Frage (da dass Script später auf Logins per session ID laufen soll) ob es Sinn macht noch eine Datenbank Tabelle zu erstellen in der Solche Informationen (wie den zu bearbeitenden Datensatz usw) vorübergehend gespeichert werden. Ich denke da an eine Tabelle mit Primary Key Feld 'editnr' mit dem Attribut AUTO_INCREMENT in dem dann die session ID und die Daten zur bearbeitung gespeichert werden. So kann ich dann prüfen ob die Daten von einem Client mit der gleichen Session ID kommt und kann sicherstellen dass über änderungen im Quelltext wenigstens nicht direkt die zu bearbeitenden Datensätze geändert werden können. Macht dass ganze Sinn oder bin ich da zu Paranoid? Ich gehe ja davon aus, das nur mit einem gültigem Login die Datensätze bearbeitet werden können. Ist dass Auslagern in der Datenbank dann nicht überflüssig da sich der jeweilige User ja schon "identifiziert" hat? Ich hoffe ich konnte meine Überlegung eindeutig darstellen, falls ihr noch Informationen zum Aufbau der Datenbank o.ä. braucht sagt es ich poste es direkt. vielen Dank im voraus rusty |
| | |
| | #2 (permalink) | |||
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, Zitat:
Deswegen, bitte bevor du weiter Codest, ne kleine Leserunde einlegen und die Grundlagen bzgl. sicheres Programmieren in/unter PHP erlernen. Zitat:
Bitte lass den Shop nie auf einen Kunden los. Zitat:
Dann würden solche Schnitzer nicht entstehen Also: 1. Lerne was Sessions sind. 2. Lerne sichere Programmieren, d.h. was ist die Ausgangsbasis (vertrau niemals auf Eingaben von Usern!), was SQL Injections sind, Cross Site Scripting, Code injection. Und dann erst weiter programmieren, bzw. am besten gleich neu Anfangen. Denn bisher scheint dein Shop ein sehr großes Sicherheitsfiasko zu sein, was für ein Nutzer sehr unangenehme Folgen haben könnte. Denn jmd. mit etwas Ahnung und schlechten Absichten könnte jede Menge unfug machen, auf fremde Acc. Sachen bestellen, Kundendaten auslesen/ändern usw. usw. | |||
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 25.03.07 ![]() Likes: 0 | Loslassen auf einen Kunden wollte ich es nicht, es ist sowas wie ein kleines Projekt um einen Überblick über die Sprache zu bekommen, danke für die Kritik kann ich gut gebrauchen. Ich habe mir zwar schon Sachen zu XSS, SQL Injection usw angeschaut, aber wie es aussieht noch nicht genug. Dann werde ich wohl erstmal weiter lesen EDIT// evtl sollte ich dazu sagen dass variablen wie $name vorher mit mysql_real_escape_string entschärft werden gruß rusty |
| | |
| | #4 (permalink) | |
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, Zitat:
Mit solch einem SQL Code könnte ein Angreifer ganz leicht die Kundentabelle auslesen und ausgeben lassen, egal ob mysql_real_escape_string oder nicht. Finds aber gut, dass das nur zum Üben ist, beruhigt mich ^^. Also, wie gesagt, zuerst solltest du $HTTP_POST_VARS mal durch $_POST ersetzen, das gleiche bei $_GET (programmier sind faul, _POST und $_GET sieht auch besser aus). Dann wirklich verstehen was Sessions machen (diese sind verdammt wichtig), damit erübrigen sich deine Fragen auch schon. Wenn du das mit Sessions soweit verstanden hast, schadet es nicht, wie schon gesagt, wirklich sich mal anzugucken wo so die Tücken liegen und auch wirklich verstehen warum das Gefährlich ist und was man dagegen unternehmen kann (bzw. worauf man achten muss). Und bei SQL Anfragen immer schön auf Hochkommas achten sowie das escapen von Eingaben. Wenn du eines vergisst, entsteht eine gigantische Lücke (wobei, wenn man das escapen vergisst wird dies je nach PHP Konfiguration auch aufgefangen, aber ' müssen immer vorkommen) | |
| | |
| | #5 (permalink) | |
| Themenstarter Registriert seit: 25.03.07 ![]() Likes: 0 | Zitat:
Code: $sql = "UPDATE 'mcs_produkt_kategorien' SET 'name' = '$name' WHERE 'kategorienr' = '$kategorienr' " | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Vertrag für Blackberry - möglichst günstig | 3lan | Kaufberatung | 2 | 09.05.09 07:57 |
| Drop Down Menü(möglichst ohne JS) | b4ck | (Web-) Design und webbasierte Sprachen | 8 | 12.05.07 22:39 |
| MySQL speichert keine Datensätze | meadow | (Web-) Design und webbasierte Sprachen | 4 | 15.02.06 16:41 |
| Zu wenig Spannung.... | GullyFoyle | Hardware Probleme | 6 | 27.06.05 19:07 |