Login check username!
Toevoeging op 11/03/2014 16:07:50:
Snelle Jaap op 11/03/2014 16:03:14:
Kun je eigenlijk ook je wachtwoord opslaan met wat anders dan MD5? Heb ook wel is gehoord van SHA2 ofzo.
ik deed geen md5 ik deed crypt() maar Dos Moonen Zegt dat ik password_hash moet gebbruiken maar dan krijg ik een error!
jaap: Ja tuurlijk, en zijn talloze mogelijkheden, waarvan MD5 toch wel wordt afgeraden en al vrij oud is. Daarnaast heb je SHA1 SHA2 SHA256 SHA512 Blowfish en nog meer.
en nu heb ik het eff zo dan neergezet.
login.php
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
51
52
53
54
55
56
57
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
<?php
require_once 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(isset($_POST['username'],$_POST['password'])) {
if(!preg_match("/^[a-z ]+$/i",$_POST['username']) || strlen(trim($_POST['username'])) < 1) {
$errors[] = 'Username is empty or incorrect. Only letters and spaces allowed';
}
if(strlen(trim($_POST['password'])) < 6) {
$errors[] = 'Password must contain atleast 6 characters';
}
if(!isset($errors)) {
$query = "
SELECT
username,password
FROM
accounts
WHERE
username = '" . mysqli_real_escape_string($connection, $_POST['username']) . "'
";
$result = mysqli_query($connection, $query);
if($result) {
if(mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
if(crypt($_POST['password'], $row['password']) == $row['password']) {
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location:".$_SERVER['SCRIPT_NAME']);
exit();
} else {
$errors[] = 'Wrong password';
}
} else {
$errors[] = 'Username does not exist';
}
} else {
$errors[] = 'Er is een fout opgetreden. Probeer het later nog eens.';
}
}
}
}
if(isset($errors)) {
foreach($errors AS $error) {
echo $error . '<br />';
}
}
?>
require_once 'config.php';
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(isset($_POST['username'],$_POST['password'])) {
if(!preg_match("/^[a-z ]+$/i",$_POST['username']) || strlen(trim($_POST['username'])) < 1) {
$errors[] = 'Username is empty or incorrect. Only letters and spaces allowed';
}
if(strlen(trim($_POST['password'])) < 6) {
$errors[] = 'Password must contain atleast 6 characters';
}
if(!isset($errors)) {
$query = "
SELECT
username,password
FROM
accounts
WHERE
username = '" . mysqli_real_escape_string($connection, $_POST['username']) . "'
";
$result = mysqli_query($connection, $query);
if($result) {
if(mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
if(crypt($_POST['password'], $row['password']) == $row['password']) {
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location:".$_SERVER['SCRIPT_NAME']);
exit();
} else {
$errors[] = 'Wrong password';
}
} else {
$errors[] = 'Username does not exist';
}
} else {
$errors[] = 'Er is een fout opgetreden. Probeer het later nog eens.';
}
}
}
}
if(isset($errors)) {
foreach($errors AS $error) {
echo $error . '<br />';
}
}
?>
register.php
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
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
<?php
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (trim($_POST['username']) == "" || trim($_POST['password']) == "" || trim($_POST['re_password']) == "" || trim($_POST['email']) == "" || trim($_POST['re_email']) == "") {
echo '<div class="errorbox">Please fill in all fields!</div>';
} else {
$checkuser = mysqli_query($connection, "SELECT username FROM accounts WHERE username = '" . $_POST['username'] . "'");
if (mysqli_num_rows($checkuser)> 0) {
echo '<div class="errorbox">Username already exist!</div>';
} else {
if ($_POST['password'] != $_POST['re_password']) {
echo '<div class="errorbox">Password is is not equal!</div>';
} else {
if ($_POST['email'] != $_POST['re_email']) {
echo '<div class="errorbox">Email is not equal!</div>';
} else {
$name = mysqli_real_escape_string($connection, $_POST['username']);
$pass = crypt(($_POST['password']));
$email = mysqli_real_escape_string($connection, $_POST['email']);
$sql = mysqli_query($connection, "
INSERT INTO accounts(
username,
password,
email
) VALUES (
'" . $name . "',
'" . $pass . "',
'" . $email . "'
)");
$con = mysqli_close($connection);
header("Location: login.php");
}
}
}
}
}
?>
include 'config.php';
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (trim($_POST['username']) == "" || trim($_POST['password']) == "" || trim($_POST['re_password']) == "" || trim($_POST['email']) == "" || trim($_POST['re_email']) == "") {
echo '<div class="errorbox">Please fill in all fields!</div>';
} else {
$checkuser = mysqli_query($connection, "SELECT username FROM accounts WHERE username = '" . $_POST['username'] . "'");
if (mysqli_num_rows($checkuser)> 0) {
echo '<div class="errorbox">Username already exist!</div>';
} else {
if ($_POST['password'] != $_POST['re_password']) {
echo '<div class="errorbox">Password is is not equal!</div>';
} else {
if ($_POST['email'] != $_POST['re_email']) {
echo '<div class="errorbox">Email is not equal!</div>';
} else {
$name = mysqli_real_escape_string($connection, $_POST['username']);
$pass = crypt(($_POST['password']));
$email = mysqli_real_escape_string($connection, $_POST['email']);
$sql = mysqli_query($connection, "
INSERT INTO accounts(
username,
password,
) VALUES (
'" . $name . "',
'" . $pass . "',
'" . $email . "'
)");
$con = mysqli_close($connection);
header("Location: login.php");
}
}
}
}
}
?>
Misschien dat je er dan makkelijker uit komt met de register.php erbij? Maar ik zelf kom er nu gewoon niet uit.
http://nl3.php.net/manual/en/function.password-hash.php kijkt zie je dat password_hash() vanaf PHP 5.5.5 in de core zit.
Als je naar de "See Also" scrolt kom je een link naar een PHP versie van password_hash() tegen voor PHP >= 5.3.7
Michael, MD5 wordt niet aangeraden omdat het oud is. Je wilt juist graag een oud algoritme. Een oud algoritme waar in al die jaren geen fouten zijn gevonden. In MD5 zijn fouten gevonden.
Bcrypt is jaren oud, maar er zijn geen fouten van bekend.
$hash = password_hash($password, PASSWORD_DEFAULT); of $hash = password_hash($password, PASSWORD_BCRYPT); is hoe je het wachtwoord hashed. Controleren doe je met password_verify($password, $hash).
PASSWORD_DEFAULT is op het moment het zelfde als PASSWORD_BCRYPT, maar dit kan in een toekomstige PHP versie veranderen. Je code zal gewoon blijven werken als het veranderd.
Lees vooral zelf de documentatie eens door. Oh en http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords
Als je op Als je naar de "See Also" scrolt kom je een link naar een PHP versie van password_hash() tegen voor PHP >= 5.3.7
Michael, MD5 wordt niet aangeraden omdat het oud is. Je wilt juist graag een oud algoritme. Een oud algoritme waar in al die jaren geen fouten zijn gevonden. In MD5 zijn fouten gevonden.
Bcrypt is jaren oud, maar er zijn geen fouten van bekend.
$hash = password_hash($password, PASSWORD_DEFAULT); of $hash = password_hash($password, PASSWORD_BCRYPT); is hoe je het wachtwoord hashed. Controleren doe je met password_verify($password, $hash).
PASSWORD_DEFAULT is op het moment het zelfde als PASSWORD_BCRYPT, maar dit kan in een toekomstige PHP versie veranderen. Je code zal gewoon blijven werken als het veranderd.
Lees vooral zelf de documentatie eens door. Oh en http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords
maar wat moet er nog bij dan?
Want ik heb nu dit in mijn register.php
Toevoeging op 11/03/2014 16:28:27:
Lol want als ik nu wil inloggen zeg ie op lijn 19 undifined password_hash
password_verify($_POST['password'], $row['password']) is dus genoeg.
Nogmaals: password_* is simpeler te gebruiken.
"Lol want als ik nu wil inloggen zeg ie op lijn 19 undifined password_hash"
Dan heb je blijkbaar geen PHP 5.5.5 of hoger, lees mijn bovenstaande nog eens grondig door om de "userland implementation" te vinden voor PHP 5.3.7 en hoger.
Gewijzigd op 11/03/2014 16:52:27 door Dos Moonen
want ik gebruik xampp
Had trouwens iets verkeerd gelezen, ik dacht dat je password_verify() al gebruikte, maar dat was password_hash() in je login.php, mijn bovenstaande reactie heb ik aangepast.
en in mijn register.php
Maar moet ik dus in mijn login.php Dat doet password_verify() al voor je: https://github.com/ircmaxell/password_compat/blob/master/lib/password.php#L234
Beetje ingewikkeld misschien, maar dat is om timing attacks tegen te gaan. Weer ietsjes veiliger. De C versie doet dat ook trouwens.
Guys het is allemaal gelukt dankje wel allemaal:D