veilig login
dus heb ik nu een zo veilig mogelijke login proberen te maken met de vele criteria en tips die hier gegeven wordt en ben tot een stukje php script gekomen en wil aan jullie vragen of dit goed is en zal werken.
hieronder dan het stukje code
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
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
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$gebruikersnaam = trim($_POST['name']);
$wachtwoord = trim($_POST['password']);
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1('password' .$salt);
if(empty($_POST[$gebruikersnaam])){
$noName = "vul uw naam in";
}
if(empty($_POST[$wachtwoord])){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT name, password
FROM members
WHERE name='" .mysql_real_escape_string($_POST[$gebruikersnaam]). "'
");
if($gUser === false){
$errDB = "er ging iets fout in de database";
}
else {
if (sha1($_POST[$wachtwoord] .$salt)== $pass && ($_POST[$gebruikersnaam])== 'name' ){
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$gebruikersnaam = trim($_POST['name']);
$wachtwoord = trim($_POST['password']);
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1('password' .$salt);
if(empty($_POST[$gebruikersnaam])){
$noName = "vul uw naam in";
}
if(empty($_POST[$wachtwoord])){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT name, password
FROM members
WHERE name='" .mysql_real_escape_string($_POST[$gebruikersnaam]). "'
");
if($gUser === false){
$errDB = "er ging iets fout in de database";
}
else {
if (sha1($_POST[$wachtwoord] .$salt)== $pass && ($_POST[$gebruikersnaam])== 'name' ){
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
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
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
<form method="post" id="loginForm" action="">
<div>
<label for="name">Naam:</label>
<input id="name" name="name" type="text" />
<?php if(isset($noName)){
echo $noName;
} ?>
</div>
<div>
<label for="password">Wachtwoord:</label>
<input id="password" name="password" type="password" />
<?php if(isset($noPassword)){
echo $noPassword;
}
?>
</div>
<div><input type="submit" id="send" name="send" value="login"></div>
<?php if(isset($noMatch)){
echo $noMatch;
}
if(isset($errDB)){
echo $errDB;
}
?>
</form>
<div>
<label for="name">Naam:</label>
<input id="name" name="name" type="text" />
<?php if(isset($noName)){
echo $noName;
} ?>
</div>
<div>
<label for="password">Wachtwoord:</label>
<input id="password" name="password" type="password" />
<?php if(isset($noPassword)){
echo $noPassword;
}
?>
</div>
<div><input type="submit" id="send" name="send" value="login"></div>
<?php if(isset($noMatch)){
echo $noMatch;
}
if(isset($errDB)){
echo $errDB;
}
?>
</form>
- $pass = sha1('password' .$salt);
Dus het wachtwoord is 'password' en dat staat niet in een database.
- if(empty($_POST[$gebruikersnaam])){
$_POST?
Waarschijnlijk bedoel je: if(empty($gebruikersnaam)){
- if(empty($_POST[$wachtwoord])){
Idem.
- mysql_real_escape_string($_POST[$gebruikersnaam])
Idem.
- if($gUser === false){
Er is nog geen query uitgevoerd. $gUser is tekst.
- if (sha1($_POST[$wachtwoord] .$salt)== $pass && ($_POST[$gebruikersnaam])== 'name' ){
Idem $_POST?
En je inlognaam is dus 'name'.
Je hebt gelijk santhe ik zag even door alle bomen het bos niet meer denk ik ik ga het even aanpassen!
$gebruikersnaam = trim($_POST['name']);
en dan gebruik je een empty(). Als de variabele echter niet bestaat gaat je script op bovenstaande al onderuit. Altijd dus EERST controleren met isset(), dan pas gebruiken. En ik zou zoals te doen gebruikelijk ook geen empty gebruiken. Als er niets is ingevuld krijg je gewoon geen record uit de database dus wordt de gebruiker ook niet ingelogd.
maakt dit wat uit?
voor de rest hieronder de nieuwe php code
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
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$gebruikersnaam = $_POST['name'];
$wachtwoord = $_POST['password'];
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1($wachtwoord .$salt);
if(!isset($gebruikersnaam)){
$noName = "vul uw naam in";
}
if(!isset($wachtwoord)){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($gebruikersnaam). "'
AND
password = '" .mysql_real_escape_string($pass). "'
");
$controle = mysql_query($gUser);
if($controle === false){
$errDB = "er ging iets fout in de database";
}
else {
if (mysql_num_rows($controle) > 0){
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$gebruikersnaam = $_POST['name'];
$wachtwoord = $_POST['password'];
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1($wachtwoord .$salt);
if(!isset($gebruikersnaam)){
$noName = "vul uw naam in";
}
if(!isset($wachtwoord)){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($gebruikersnaam). "'
AND
password = '" .mysql_real_escape_string($pass). "'
");
$controle = mysql_query($gUser);
if($controle === false){
$errDB = "er ging iets fout in de database";
}
else {
if (mysql_num_rows($controle) > 0){
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
Je doet nog steeds de isset op de verkeerde plaats.
Reshadd farid op 14/03/2012 16:33:02:
Sowieso vraag ik me af waarom je dit doet.
Regel 6 en 7 zijn overbodig. Verder kan iedereen die de juiste url kan raden gewoon het systeem binnenkomen, je zult de pagina's moeten beveiligen door gebruik te maken van sessie's.
kan je misschien een voorbeeld geven?
Toevoeging op 14/03/2012 16:43:54:
@jens de sessie komt er inderdaad nog in het ging hier nog even om qua wachtwoord beveiliging en controle van invoer
@obelix ik weet dat het normaal gesproken beter in de query kan verwerken maar kom ik daarmee niet in de problemen als ik de wachtwoord eruit haal?
Jij doet dit:
Code (php)
Ik zeg dit:
Code (php)
Wat is het verschil?
Reshadd farid op 14/03/2012 16:40:15:
@obelix ik weet dat het normaal gesproken beter in de query kan verwerken maar kom ik daarmee niet in de problemen als ik de wachtwoord eruit haal?
Geen idee wat je bedoelt.
De bewerkingen die je loslaat op de variabele die je aanmaakt, kun je ook gewoon toepassen op de $_POST waarde. Waarom de $_POST waarde kopiëren naar een variabele?
hierbij de code
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
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1('password' .$salt);
if(!isset('name')){
$noName = "vul uw naam in";
}
if(!isset('password')){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($_POST['name']). "'
AND
password = '" .mysql_real_escape_string(sha1($_POST[$pass .$salt])). "'
");
$controle = mysql_query($gUser);
if($controle === false){
$errDB = "er ging iets fout in de database";
}
else {
if (mysql_num_rows($controle) > 0){
$_SESSION['name'] = $naam;
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1('password' .$salt);
if(!isset('name')){
$noName = "vul uw naam in";
}
if(!isset('password')){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($_POST['name']). "'
AND
password = '" .mysql_real_escape_string(sha1($_POST[$pass .$salt])). "'
");
$controle = mysql_query($gUser);
if($controle === false){
$errDB = "er ging iets fout in de database";
}
else {
if (mysql_num_rows($controle) > 0){
$_SESSION['name'] = $naam;
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
Gewijzigd op 14/03/2012 16:56:43 door Reshad F
Op regel 27 zit je een beetje fout met je $_POST variabele key.
Op regel 42 gebruik je $naam die niet bestaat.
Reshadd farid op 14/03/2012 16:51:44:
Ik zou niet controleren op >0, maar of het 1 is.
Er is toch maar 1 gebruiker/wachtwoord combinatie mogelijk?
Of heb jij meerdere gebruikers met dezelfde naam en hetzelfde wachtwoord?
ik heb regel 24 hierin veranderd
hoe moet ik de session dan doen? met
mysql_real_escape_string(sha1($pass)) [edit: had je in $pass staan]
Alleen vraag ik me af of dan die mysql_real_escape_string nog nodig is. Enige rare code die een hacker erin gooit zou al verdwenen moeten zijn door de encryptie, maar dat zou je anders even zelf moeten proberen.
regel 42: hier kan he gewoon $_POST['name'] gebruiken. Je hebt het gecontroleerd en het is een goede gebruikersnaam, dus die kan je nu in je sessie zetten.
$_SESSION['name'] = $_POST['name'];
Session_register moet je niet gebruiken. Is in php 5.4 niets eens meer aanwezig.
Gewijzigd op 14/03/2012 17:33:50 door Erwin H
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
58
59
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
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1($_POST['password'] .$salt);
if(!isset($_POST['name'])){
$noName = "vul uw naam in";
}
if(!isset($_POST['password'])){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($_POST['name']). "'
AND
password = '" .mysql_real_escape_string(sha1($_POST['password'])). "'
");
$controle = mysql_query($gUser);
if($controle === false){
$errDB = "er ging iets fout in de database";
}
else {
if (mysql_num_rows($controle) > 0){
$_SESSION['name'] = $_POST['name'];
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
include ('connect.php');
$salt = "#@#123456789876548946234986$$23#423#%FAW%#AWD1314";
$pass = sha1($_POST['password'] .$salt);
if(!isset($_POST['name'])){
$noName = "vul uw naam in";
}
if(!isset($_POST['password'])){
$noPassword = "vul een wachtwoord in";
}
$gUser = ("SELECT
name, password
FROM
members
WHERE
name = '" .mysql_real_escape_string($_POST['name']). "'
AND
password = '" .mysql_real_escape_string(sha1($_POST['password'])). "'
");
$controle = mysql_query($gUser);
if($controle === false){
$errDB = "er ging iets fout in de database";
}
else {
if (mysql_num_rows($controle) > 0){
$_SESSION['name'] = $_POST['name'];
header("location: http://www.reshadfarid.nl/admin/admin.php");
exit;
}
else {
$noMatch = "er is geen match gevonden voor desbetreffende wachtwoord en gebruikersnaam";
}
}
}
?>
nu heb ik nog een vraag aangezien ik de enige ben die gebruik gaat maken van de login kan ik dan gewoon zelf een wachtwoord invoegen in mijn database? dus een password 'hardcoded' aanmaken die echoen en in mijn database plakken?
Gewijzigd op 14/03/2012 17:37:52 door Reshad F
Maar je password check gaat nu fout, dat weet je toch?
en hoe zou ik een beveiligde password hardcoded kunnen genereren met hoe ik het nu heb?
$pass = sha1($_POST['password'] .$salt);
password = '" .mysql_real_escape_string(sha1($_POST['password'])). "'
(tweede regel een deel van je SQL statement)
Als je het ingegeven password plus de salt in $pass stopt, wat moet je dan in je SQL statement invoegen?