von subjective |
Beim Login selbst arbeitet man natürlich mit dem Benutzernamen. Ich würde jedoch die ID des Benutzers in der Session ablegen.
Im Manual findest du ein Beispiel zu mysql_real_escape_string(). |
von ramon |
wegen den ID´s.
frage zwar den usernamen ab und vergleiche den,aber habe den in der datenbank nur an einer stelle beim benutzer halt stehen... ändere ich den ab, oder einer will den ändenr,dann klappt das alles nach wievor ,weil ich in den anderen tabellen mit den ID´s arbeite, in der datenbank, dann passt das doch oder nicht ?
kannste mein beispiel mal hier hin schrieben wie das richtig heissen mus bezüglich der angriffe von aussen ? |
von subjective |
Üblicherweise arbeitet man intern mit ids - der Benutzername kann sich "theoretisch" auch ändern.
Fehlen tut das Absichern der Formularwerte für das SQL mit mysql_real_escape_string(). Wenn du Pech hast, gibt ein Angreifer einfach SQL statt dem Benuzternamen/Passwort an und modifiziert deine SQL-Query so, dass er kein Passwort mehr benötigt. Bedenke das dies innerhalb von PHP ein einfacher String ist. Erst das DBMS interpretiert ihn. |
von ramon |
Habe mich mal ein wenig damit beschäftigt, da ich eine mysql datenbank anwendung in Verbindung mit PHP habe, und dieses über ein Login-System steuern möchte.
Dazu verwenden will ich die PHP-Session, und habe eigentlich auch schon geschafft was ich wollte,nur sieht man das ein bissl zu "einfach" aus, und ich wollte mal fragen ob da jetzt noch irgendwas fehlt, oder alles stimmt, oder wie !?
hier mal meine login.php - ist denke ich selbterklärend:
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: |
<?
require "dbconnect.php";
connectToMyDatabase();
?>
<html>
<head>
<title>...please log in !!!</title>
</head>
<body>
<form method="POST" action="<?=$PHP_SELF; ?>">
<p>user:
<input type="text" name="userName" size="20"></p>
<p>password:
<input type="password" name="password" size="20"></p>
<p><input type="submit" value="senden" name="send"></p>
</form>
<?
$userName = $_POST['userName'];
$password = $_POST['password'];
$query = "SELECT user_name, password
FROM vm_user
WHERE user_name = '$userName'";
$result=mysql_query($query);
while ($daten=mysql_fetch_array($result, MYSQL_ASSOC))
{
$user = "$daten[user_name]";
$pw = "$daten[password]";
}
if (isset($_POST['password'])) {
if(("$user" == "$userName") && ("$pw" == "$password")) {
session_start();
$_SESSION["user"] = $_POST['userName'];
header("LOCATION: vinyl_own.php?".strip_tags(SID) );
}
else
header("LOCATION: login_failt.php");
}
?>
</body>
</html>
|
und in den anderen, nächsten dateien mache ich nur n session_start() und hole mir den gespeicherten namen mit
$user = $_SESSION["user"];
und die $user nehme ich dann für die datenbankbefehle als usernamen halt, wo entsprechende db-einträge editiert oder gelöscht werden können und so.
mehr ist das nicht, und das is so ein korrektes login system ? Oder muss ich doch noch irgendwo was vergleichen oder so.
zu der datei oben habe ich auch eine frage noch:
die variablen $user und $password kann er ja erst korrekt belegen,wenn das formular abgeschickt wird, und dann macht er mit den variablen noch die db-abfrage um die die daten für den vergleich zu bekommen ? Ich meine,es geht ja,verstehe nur nicht ganz warum, weil die variablen ja erst belegt werden können,wenn das formular abgeschickt wird !? |
|