inlog beveiligen
En ik ga nog geen mysqli gebruiken momenteel eerst wil ik het op deze manier werkend hebben.
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
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
<?php
if(isset($_POST['hidden'])){
// include('pagina/mysql_connect.php'); // connectie met database
// variable
$username = $_POST['gebruikersnaam']; // username
$password = $_POST['wachtwoord']; // wachtwoord
$username = mysql_real_escape_string($username); //sql injection
$password = mysql_real_escape_string($password); //sql injection
$password = md5_file($password); // wachtwoord versleutelen
$sql = "SELECT * FROM leden WHERE gebruikersnaam='$username' AND wachtwoord='$password'"; // wordt gecontroleerd of er een wachtwoord en gebruikersnaam bestaat
$query = mysql_query ($sql);
$inloggegevens = mysql_fetch_array($query);
$voornaam = $inloggegevens['voornaam'];
$achternaam = $inloggegevens['achternaam'];
$email = $inloggegevens['email'];
$gebruiker = $inloggegevens['gebruikersnaam'];
$password = $inloggegevens['wachtwoord'];
$num = mysql_num_rows($query);
if($num == 1){ // wanneer alles hieronder klopt ben je ingelogd
// Ingelogd
$_SESSION['gebruikersnaam'] = $gebruiker; // controleerd username
$_SESSION['wachtwoord'] = $password;
$_SESSION['voornaam'] = $voornaam;
$_SESSION['achternaam'] = $achternaam;
$_SESSION['email'] = $email;
$_SESSION['id'] = 1;//$fetch['id']; // controleer id
$_SESSION['ingelogd'] = true; // wanneer je ingelogd bent
if($_SESSION['gebruikersnaam']== "admin"){ // controleer of de gebruiker is of een admin
header('location: admin.php');
}else{
header('location: index.php'); // ga je naar de pagina member.
echo "Ingelogd"; }
}
else{
echo " Gebruikersnaam of Wachtwoord is verkeerd!! <br>"; // anders is het wachtwoord of gebruikersnaam verkeer of sta je nog niet in de database.
echo "<a href='index.php'>Terug</a>"; // ge je weer terug naar de pagina
}
}
else{
?>
if(isset($_POST['hidden'])){
// include('pagina/mysql_connect.php'); // connectie met database
// variable
$username = $_POST['gebruikersnaam']; // username
$password = $_POST['wachtwoord']; // wachtwoord
$username = mysql_real_escape_string($username); //sql injection
$password = mysql_real_escape_string($password); //sql injection
$password = md5_file($password); // wachtwoord versleutelen
$sql = "SELECT * FROM leden WHERE gebruikersnaam='$username' AND wachtwoord='$password'"; // wordt gecontroleerd of er een wachtwoord en gebruikersnaam bestaat
$query = mysql_query ($sql);
$inloggegevens = mysql_fetch_array($query);
$voornaam = $inloggegevens['voornaam'];
$achternaam = $inloggegevens['achternaam'];
$email = $inloggegevens['email'];
$gebruiker = $inloggegevens['gebruikersnaam'];
$password = $inloggegevens['wachtwoord'];
$num = mysql_num_rows($query);
if($num == 1){ // wanneer alles hieronder klopt ben je ingelogd
// Ingelogd
$_SESSION['gebruikersnaam'] = $gebruiker; // controleerd username
$_SESSION['wachtwoord'] = $password;
$_SESSION['voornaam'] = $voornaam;
$_SESSION['achternaam'] = $achternaam;
$_SESSION['email'] = $email;
$_SESSION['id'] = 1;//$fetch['id']; // controleer id
$_SESSION['ingelogd'] = true; // wanneer je ingelogd bent
if($_SESSION['gebruikersnaam']== "admin"){ // controleer of de gebruiker is of een admin
header('location: admin.php');
}else{
header('location: index.php'); // ga je naar de pagina member.
echo "Ingelogd"; }
}
else{
echo " Gebruikersnaam of Wachtwoord is verkeerd!! <br>"; // anders is het wachtwoord of gebruikersnaam verkeer of sta je nog niet in de database.
echo "<a href='index.php'>Terug</a>"; // ge je weer terug naar de pagina
}
}
else{
?>
Hacken in de zin van?
spamen en de hele site omgooien en rotzooi in de database stoppen waardoor de site naar een andere pagina gaat
En wat zegt de log van de webserver? Misschien zit het lek wel ergens anders?
Gebruik eens htmlentities voor het ophalen van gegevens uit een database.
Kijk eens naar bcrypt of password_hash().
- Aar - op 09/09/2014 19:41:12:
En md5() als encryptie is ook erg verouderd.
Kijk eens naar bcrypt of password_hash().
Kijk eens naar bcrypt of password_hash().
dan hebben we verouderde lessen gekregen....
Is eigenlijk gewoon hetzelfde als wat Aar zegt.
Hiermee hash je iets:
http://nl1.php.net/manual/en/function.password-hash.php
Hiermee bekijk je als een hash overeenkomt:
http://nl1.php.net/manual/en/function.password-verify.php
Verder kan ik nog wel wat tips geven:
- Kopiëren van variabelen is onnodig, zie ook lijn 7 en 8, je kan je $_POST-variabelen al prima gebruiken, dus waarom zou je $username willen gebruiken?
- Je password hoef je niet te escapen, deze kan in gehashte vorm sowieso al geen SQL-injection bevallen.
- Lijn 21 t/m 25 zijn ook onnodig, zoals ik net al al zei
- Enige foutafhandeling op je query kan geen kwaad, en bij grote voorkeur geen die(), maar een nette afhandeling met if/else
- Waarom spaar je de gebruikersgevens in een sessie? Die kan je toch ook prima uit je database halen? Wat je daar met het wachtwoord wilt doen, is mij een raadsel.
Dit waren een paar tips, ik kan niet garanderen dat het lek hiermee opgelost is, want dat zul je in de logfiles van de webserver moeten zien. Maar je script wordt er wel een stuk netter en overzichtelijker van.
Gewijzigd op 09/09/2014 19:52:14 door - Ariën -
Verander de paswoorden voor de backend
Verander de paswoorden voor je FTP verbinding
Verander de paswoorden voor de MySQL verbinding
Wanneer men iedere keer weer alles weet te veranderen is er een grote kans dat men dit gewoon via reguliere wegen doet door gebruik te maken van (gestolen ?) paswoorden.