Is dit login script veilig?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jeffrey Barn

jeffrey Barn

04/05/2011 11:46:09
Quote Anchor link
Hallo,

Ik heb vandaag een login script gemaakt.
Maar is ie mysql injectie veilig??

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
PHP hulp

PHP hulp

15/05/2024 00:35:19
 
Maikel  B

Maikel B

04/05/2011 11:55:45
Quote Anchor link
Je hebt er een dubbele else instaan. deze laten allebei dezelfde fout zien.
Er kan maar 1 keer een else zijn dus die andere moet je verwijderen.
 
Jeffrey Barn

jeffrey Barn

04/05/2011 11:57:34
Quote Anchor link
Dank je,

maar dat hoort zo maar zitten er nog veiligheids fouten in?
 
Daniel O

Daniel O

04/05/2011 12:09:55
Quote Anchor link
Je doet 2x mysql_real_escape_string() op de gebruikersnaam ... dat is overbodig, sterker nog .. daar kun je problemen mee krijgen. Verder is het niet logisch om eerst te checken of de user gevonden is, en vervolgens nog een query doen om de user op te halen... Bovendien hoef je niet bang te zijn dat men in het password sql kan injecten, aangezien je de md5 ervan neemt.

Het kan veel korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
  }
}
 
Wouter J

Wouter J

04/05/2011 12:13:20
Quote Anchor link
- if($_SESSION['username']) is niet netjes. Als je wilt kijken of hij bestaat zou je 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
 
Daniel O

Daniel O

04/05/2011 12:17:08
Quote Anchor link
@Wouter: hij wilde alleen weten of het injectie veilig was ... :)
 
Jeffrey Barn

jeffrey Barn

04/05/2011 12:18:08
Quote Anchor link
Dank je

Toevoeging op 04/05/2011 12:22:45:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
Wouter J

Wouter J

04/05/2011 12:41:14
Quote Anchor link
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.
 
Daniel O

Daniel O

04/05/2011 12:47:42
Quote Anchor link
@Wouter ben het met je eens hoor... je hebt alleen geen antwoord gegeven op zijn vraag ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.