Is dit login script veilig?
Ik heb vandaag een login script gemaakt.
Maar is ie mysql injectie veilig??
Code (php)
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
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
<?php
include 'connect.php';
if($_SESSION['username']) {
header('location: index.php');
}
?>
<html>
<head>
<title>Login - Emergency-online</title>
</head>
<body>
<?php
if($_POST){
$usern = mysql_real_escape_string(stripslashes($_POST['username']));
$q = mysql_query('select * from users where username="'.$usern.'"');
$c = mysql_num_rows($q);
if($c > 0) {
$pass = mysql_real_escape_string(stripslashes($_POST['password']));
$passn = md5($pass);
$query = 'select * from users where username="'.$usern.'"';
$result = mysql_query($query);
$in = mysql_fetch_array($result);
if($in['password'] == $passn) {
$_SESSION["username"] = mysql_real_escape_string($usern);
echo 'logged';
}else{
?>
<h3>Er is een fout opgetreden</h3>
<font color="red">De gebruikersnaam en/of wachtwoord is incorrect.</font>
<?php
}
}else{
?>
<h3>Er is een fout opgetreden</h3>
<font color="red">De gebruikersnaam en/of wachtwoord is incorrect.</font>
<?php
}
}else{
?>
<h1>Inloggen op Emergency-online</h1>
<form method="POST">
<table border='0'>
<tr><td>Gebruikersnaam:</td><td><input type="text" name="username" /></td></tr>
<tr><td>Wachtwoord:</td><td><input type="password" name="password" /></td></tr>
<tr><td></td><td><input type="submit" value="Inloggen" /></td></tr>
</table>
<?php
}
?>
include 'connect.php';
if($_SESSION['username']) {
header('location: index.php');
}
?>
<html>
<head>
<title>Login - Emergency-online</title>
</head>
<body>
<?php
if($_POST){
$usern = mysql_real_escape_string(stripslashes($_POST['username']));
$q = mysql_query('select * from users where username="'.$usern.'"');
$c = mysql_num_rows($q);
if($c > 0) {
$pass = mysql_real_escape_string(stripslashes($_POST['password']));
$passn = md5($pass);
$query = 'select * from users where username="'.$usern.'"';
$result = mysql_query($query);
$in = mysql_fetch_array($result);
if($in['password'] == $passn) {
$_SESSION["username"] = mysql_real_escape_string($usern);
echo 'logged';
}else{
?>
<h3>Er is een fout opgetreden</h3>
<font color="red">De gebruikersnaam en/of wachtwoord is incorrect.</font>
<?php
}
}else{
?>
<h3>Er is een fout opgetreden</h3>
<font color="red">De gebruikersnaam en/of wachtwoord is incorrect.</font>
<?php
}
}else{
?>
<h1>Inloggen op Emergency-online</h1>
<form method="POST">
<table border='0'>
<tr><td>Gebruikersnaam:</td><td><input type="text" name="username" /></td></tr>
<tr><td>Wachtwoord:</td><td><input type="password" name="password" /></td></tr>
<tr><td></td><td><input type="submit" value="Inloggen" /></td></tr>
</table>
<?php
}
?>
Zo niet zeg ff wat er fout is plz
Gewijzigd op 04/05/2011 11:46:27 door Jeffrey Barn
Er kan maar 1 keer een else zijn dus die andere moet je verwijderen.
maar dat hoort zo maar zitten er nog veiligheids fouten in?
Het kan veel korter:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?
if ($_POST) {
$user = mysql_real_escape_string($_POST['username']);
$pass = md5($_POST['password']);
$query = mysql_query("SELECT * FROM users WHERE username='$user' AND password='$pass'");
if (mysql_num_rows($query) > 0) {
// ingelogd
$_SESSION['username'] = $user;
} else {
// niet ingelogd
}
}
if ($_POST) {
$user = mysql_real_escape_string($_POST['username']);
$pass = md5($_POST['password']);
$query = mysql_query("SELECT * FROM users WHERE username='$user' AND password='$pass'");
if (mysql_num_rows($query) > 0) {
// ingelogd
$_SESSION['username'] = $user;
} else {
// niet ingelogd
}
}
isset kunnen gebruiken.
- Je moet altijd al je PHP boven je HTML afhandelen, niet ergens halverwege
- SQL kan je beter met hoofdletters schrijven
- $usern = ... is onzinnig variabelen kopiëren.
- * is een wildcard, je kan veel beter selecteren wat je wilt hebben
- mysql_real_escape_string is alleen nodig in query. Voor sessions niet
- waarom fetch_array? Gebruik gewoon fetch_assoc, dit is sneller
- Je mist een doctype
- Forms moeten niet opgemaakt worden met tabellen
- Laat je code wat beter inspringen
- if($_SESSION['username']) is niet netjes. Als je wilt kijken of hij bestaat zou je - Je moet altijd al je PHP boven je HTML afhandelen, niet ergens halverwege
- SQL kan je beter met hoofdletters schrijven
- $usern = ... is onzinnig variabelen kopiëren.
- * is een wildcard, je kan veel beter selecteren wat je wilt hebben
- mysql_real_escape_string is alleen nodig in query. Voor sessions niet
- waarom fetch_array? Gebruik gewoon fetch_assoc, dit is sneller
- Je mist een doctype
- Forms moeten niet opgemaakt worden met tabellen
- Laat je code wat beter inspringen
@Wouter: hij wilde alleen weten of het injectie veilig was ... :)
Toevoeging op 04/05/2011 12:22:45:
Code (php)
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
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
<?php
include 'connect.php';
if($_SESSION['username']) {
header('location: index.php');
}
?>
<html>
<head>
<title>Login - Emergency-online</title>
</head>
<body>
<?php
if ($_POST) {
$user = mysql_real_escape_string($_POST['username']);
$pass = md5($_POST['password']);
$query = mysql_query("SELECT * FROM users WHERE username='$user' AND password='$pass'");
if (mysql_num_rows($query) > 0) {
$_SESSION['username'] = $user;
} else {
?>
Foute login
<?php
}
}else{
?>
<h1>Inloggen op Emergency-online</h1>
<form method="POST">
<table border='0'>
<tr><td>Gebruikersnaam:</td><td><input type="text" name="username" /></td></tr>
<tr><td>Wachtwoord:</td><td><input type="password" name="password" /></td></tr>
<tr><td></td><td><input type="submit" value="Inloggen" /></td></tr>
</table>
<?php
}
?>
include 'connect.php';
if($_SESSION['username']) {
header('location: index.php');
}
?>
<html>
<head>
<title>Login - Emergency-online</title>
</head>
<body>
<?php
if ($_POST) {
$user = mysql_real_escape_string($_POST['username']);
$pass = md5($_POST['password']);
$query = mysql_query("SELECT * FROM users WHERE username='$user' AND password='$pass'");
if (mysql_num_rows($query) > 0) {
$_SESSION['username'] = $user;
} else {
?>
Foute login
<?php
}
}else{
?>
<h1>Inloggen op Emergency-online</h1>
<form method="POST">
<table border='0'>
<tr><td>Gebruikersnaam:</td><td><input type="text" name="username" /></td></tr>
<tr><td>Wachtwoord:</td><td><input type="password" name="password" /></td></tr>
<tr><td></td><td><input type="submit" value="Inloggen" /></td></tr>
</table>
<?php
}
?>
Dit heb ik nu.
Dit is veel beter dank jullie wel.
Toevoeging op 04/05/2011 12:26:17:
Trouwens Daniel dank je jij ook hoor wouter :P
Maar ik wou maar 1 ding weten xD.
Bedankt :P
Daniel O op 04/05/2011 12:17:08:
@Wouter: hij wilde alleen weten of het injectie veilig was ... :)
Maar als de basis van een script slecht is en de code onoverzichtelijk heb je niks aan die ene real_escape_string, want de rest gaat dan alsnog fout.
@Wouter ben het met je eens hoor... je hebt alleen geen antwoord gegeven op zijn vraag ;)