De beveiliging
Probeer wat je ook kunt bedenken, zolang je mij verteld hoe je het systeem hebt kunnen kraken.
http://maestro.themadman.nl
ik ga nog even verder kloten
Houd ons op de hoogte!
Ook is het zo dat de meeste problemen niet zozeer in het inlog systeem zitten, dwz: autenticate, dus: "wie ben je?" maar in het systeem daarachter, de authorisatie "wat mag je?". Kortom, wil je serieuze antwoorden raad ik je aan je code te plaatsen.
Een heel reeks van veiligheidsfouten, lekken of zwaktes liggen buiten de scope van het inlogschermpje wat je ons vraagt te kraken.
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
public function mstro_login()
{
$this->mstro_connect();
if($_POST['username'] != '' && $_POST['password'] != '')
{
session_regenerate_id();
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
$query = mysql_query('SELECT usr_id, usr_name, usr_active, usr_rank, usr_last, usr_url FROM mstro_users WHERE usr_name = "'.$username.'" AND usr_pass = "'.$password.'" AND usr_active = "1"');
if(mysql_num_rows($query) == "1")
{
$user = mysql_fetch_assoc($query);
if($user['usr_active'] == 1)
{
$_SESSION['USER_ID'] = $user['usr_id'];
$_SESSION['USERNAME'] = $user['usr_name'];
$_SESSION['LASTVISIT'] = $user['usr_last'];
$_SESSION['LEVEL_ACCESS'] = $user['usr_rank'];
$_SESSION['LOGGED'] = TRUE;
$time = time() + 300;
mysql_query("UPDATE mstro_users SET usr_last = '".$_SERVER['REMOTE_ADDR']."', usr_time = '$time' WHERE usr_name = '".$user['usr_name']."'");
header("Location: $user[usr_url]");
}
else
{
$this->mmsg = $this->unactive;
}
}
else
{
$this->mmsg = "Username/Password incorrect";
}
}
{
$this->mstro_connect();
if($_POST['username'] != '' && $_POST['password'] != '')
{
session_regenerate_id();
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
$query = mysql_query('SELECT usr_id, usr_name, usr_active, usr_rank, usr_last, usr_url FROM mstro_users WHERE usr_name = "'.$username.'" AND usr_pass = "'.$password.'" AND usr_active = "1"');
if(mysql_num_rows($query) == "1")
{
$user = mysql_fetch_assoc($query);
if($user['usr_active'] == 1)
{
$_SESSION['USER_ID'] = $user['usr_id'];
$_SESSION['USERNAME'] = $user['usr_name'];
$_SESSION['LASTVISIT'] = $user['usr_last'];
$_SESSION['LEVEL_ACCESS'] = $user['usr_rank'];
$_SESSION['LOGGED'] = TRUE;
$time = time() + 300;
mysql_query("UPDATE mstro_users SET usr_last = '".$_SERVER['REMOTE_ADDR']."', usr_time = '$time' WHERE usr_name = '".$user['usr_name']."'");
header("Location: $user[usr_url]");
}
else
{
$this->mmsg = $this->unactive;
}
}
else
{
$this->mmsg = "Username/Password incorrect";
}
}
Verder doe je niks aan foutafhandeling en gebruik je hele foute datatypes voor datums en tijden.
Ps. escapen op een wachtwoord die je met md5 gaat hashen is niet nodig, de md5-hash kan onmogelijk quotes e.d. bevatten.
Tot nu toe is er iid nog geen controle van ip-adres, webbrowser en user, maar dat komt er nog in. Over het hashen, is het bij een md5 niet nodig om een escape_string toe te passen?
Ps. Veel hacks vinden plaats via ingangen in code op andere locaties. Met meerdere domeinen op 1 server, kan het zomaar zijn dat je via domein X jouw website kunt hacken...
Dat zegt Frank dus net, in een MD5 hash komen alleen maar "normale' tekens voor. In principe is escape_string niet nodig voor de MD5 HASH.