Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Webmaster-Security Fragen zur richtigen Serverkonfiguration oder Absicherung dynamischer Scripte gehören hier hinein.

SQL Datensätze bearbeiten mit möglichst wenig Informationen vom Client

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 ...

Antwort
Alt 24.11.07, 20:28   #1 (permalink)
 
Registriert seit: 25.03.07
rusty-spoon Leistung: Facit NTK
Likes: 0
Smile SQL Datensätze bearbeiten mit möglichst wenig Informationen vom Client

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>
in einem anderem Script (momentan schaffe ich mir sowas wie eine code basis) wird der Wert dann geändert:

Code:
$sql = "UPDATE mcs_produkt_kategorien SET name = $name WHERE kategorienr = $kategorienr";
Die daten kommen auch wieder per $HTTP_POST_VARS rein. Jetzt weiss ich aber das hidden input Felder vom Client veränderbar sind und mehr als auf is_numeric(); kann ich da nicht prüfen.

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
rusty-spoon ist offline   Mit Zitat antworten
Alt 24.11.07, 20:54   #2 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard RE: SQL Datensätze bearbeiten mit möglichst wenig Informationen vom Client

Hallo,
Zitat:
Original von rusty-spoon
reiche ich durch die Scripte momentan per hidden input Feld die Datensatznummer
arg, für soetwas gehört man erschlagen, besonders bei Sachen mit kommerziellen Hintergrund.

Deswegen, bitte bevor du weiter Codest, ne kleine Leserunde einlegen und die Grundlagen bzgl. sicheres Programmieren in/unter PHP erlernen.

Zitat:
$sql = "UPDATE mcs_produkt_kategorien SET name = $name WHERE kategorienr = $kategorienr";
Aua aua.
Bitte lass den Shop nie auf einen Kunden los.

Zitat:
Macht dass ganze Sinn oder bin ich da zu Paranoid?
Schön wärs wenn du paranoid wärst ^^
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.
Elderan ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 24.11.07, 20:57   #3 (permalink)
Themenstarter
 
Registriert seit: 25.03.07
rusty-spoon Leistung: Facit NTK
Likes: 0
Standard

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
rusty-spoon ist offline   Mit Zitat antworten
Alt 24.11.07, 21:26   #4 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
Zitat:
Original von rusty-spoon
EDIT// evtl sollte ich dazu sagen dass variablen wie $name vorher mit mysql_real_escape_string entschärft werden
Das bringt rein gar nichts wenn man keine hochkommas verwendet.

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)
Elderan ist offline   Mit Zitat antworten
Alt 24.11.07, 21:31   #5 (permalink)
Themenstarter
 
Registriert seit: 25.03.07
rusty-spoon Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von Elderan
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)
also sollten sql strings eher so aussehen?
Code:
$sql = "UPDATE 'mcs_produkt_kategorien' SET 'name' = '$name' WHERE 'kategorienr' = '$kategorienr' "
Danke für die Denkanstöße
rusty-spoon ist offline   Mit Zitat antworten
Alt 24.11.07, 22:53   #6 (permalink)
 
Registriert seit: 07.07.04
M.D.Geist Leistung: Facit NTK
Likes: 0
Standard

Hallo rusty-spoon,

die Hochkommas die die verwendest sind die falschen die Abfrage sollte so aussehen:

Code:
$sql=" UPDATE `mcs_produkt_kategorien` SET `name` = '{$name}' WHERE `kategorienr` LIKE '{$kategorienr}' "
M.D.Geist ist offline   Mit Zitat antworten
Alt 25.11.07, 03:44   #7 (permalink)
Themenstarter
 
Registriert seit: 25.03.07
rusty-spoon Leistung: Facit NTK
Likes: 0
Standard

werde ich mir angewöhnen danke
rusty-spoon ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Security Area » Webmaster-Security » SQL Datensätze bearbeiten mit möglichst wenig Informationen vom Client
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ä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


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61