Foutje in script.
Ik ben bezig met een site aan het maken voor me eigen kleine startende onderneming. Deze wil ik waar nodig goed beveiligen ik probeer samen met mijn neefje een inlog script te maken, wel heb ik het registratie scipt al werkende maar we komen hier nog niet echt uit.
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
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
<?php
ob_start();
include("header.php");
require("connect.php");
if(!$_GET['act']){
echo("<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form");
} else if($_GET['act'] == "login"){
$check = mysql_query "SELECT * FROM gebruiker WHERE gebruikersnaam = '{$_POST['gebruikersnaam']}' AND wachtwoord = 'md5($_POST['wachtwoord'])'";
if(mysql_num_rowS($check) > 0){
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
} else {
echo("The gebruikersnaam/wachtwoord was not found.");
}
?>
ob_start();
include("header.php");
require("connect.php");
if(!$_GET['act']){
echo("<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form");
} else if($_GET['act'] == "login"){
$check = mysql_query "SELECT * FROM gebruiker WHERE gebruikersnaam = '{$_POST['gebruikersnaam']}' AND wachtwoord = 'md5($_POST['wachtwoord'])'";
if(mysql_num_rowS($check) > 0){
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
} else {
echo("The gebruikersnaam/wachtwoord was not found.");
}
?>
Parse error: syntax error, unexpected '"' in we blijven deze fout krijgen en deze zit in lijn 19. Weet iemand toevallig wat de fout is alvast bedankt x
Gewijzigd op 07/02/2011 16:38:48 door Sonja van Rooijen
Dit is geen nette en juiste controle:
if(!$_GET['act']){
Bij echo geen () gebruiken. Gebruik daar enkele quotes en dubbele vooe de (valid) html.
$vars buiten de quotes houden. Script is lek => SQL-Injection.
Foutafhandeling ontbreekt.
Haakjes missen bij mysql_query().
"true" is een string, bedoel je niet de boolean: true?
Engels/Nederlands door elkaar?
"The gebruikersnaam/wachtwoord was not found."
Gewijzigd op 07/02/2011 16:50:21 door - SanThe -
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
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
<?php
include("header.php");
require("connect.php");
if(!$_GET['act']){
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
} else if($_GET['act'] == "login"){
$check = mysql_query("SELECT * FROM `gebruiker` WHERE `gebruikersnaam` = '{$_POST['gebruikersnaam']}' AND `wachtwoord` = 'md5($_POST['wachtwoord'])'");
if(mysql_num_rowS($check) > 0){
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
} else {
echo("The gebruikersnaam/wachtwoord was not found.");
}
?>
include("header.php");
require("connect.php");
if(!$_GET['act']){
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
} else if($_GET['act'] == "login"){
$check = mysql_query("SELECT * FROM `gebruiker` WHERE `gebruikersnaam` = '{$_POST['gebruikersnaam']}' AND `wachtwoord` = 'md5($_POST['wachtwoord'])'");
if(mysql_num_rowS($check) > 0){
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
} else {
echo("The gebruikersnaam/wachtwoord was not found.");
}
?>
Ziet deze er zo beter uit maar ik krijg nu de volgende foutmelding :(
syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING Line 15. ? Hoe lossen we dit probleem op>?
Aanvulling: Backtics horen niet in een query.
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
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
<?php
include("header.php");
require("connect.php");
if (!$_GET['act'])
{
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM `gebruiker` WHERE `gebruikersnaam` = '{$_POST['gebruikersnaam']}' AND `wachtwoord` = 'md5($_POST['wachtwoord'])'");
if (mysql_num_rowS($check) > 0)
{
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo("The gebruikersnaam/wachtwoord was not found.");
}
// Haha! Daar mist een haakje!
?>
include("header.php");
require("connect.php");
if (!$_GET['act'])
{
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM `gebruiker` WHERE `gebruikersnaam` = '{$_POST['gebruikersnaam']}' AND `wachtwoord` = 'md5($_POST['wachtwoord'])'");
if (mysql_num_rowS($check) > 0)
{
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo("The gebruikersnaam/wachtwoord was not found.");
}
// Haha! Daar mist een haakje!
?>
Trouwens, je kan aan de kleuren hierboven al zien dat je query niet is wat je denkt dat hij is. Zorg er ook eens voor dat deze code wordt uigevoerd aan het begin van je script, dan zie je wat je allemaal fout doet:
Gewijzigd op 07/02/2011 17:13:23 door Jelmer -
Je moet geen backticks gebruiken `gebruiker` moet 'gebruiker' worden.
Dit is ook fout, '{$_POST['gebruikersnaam']}' het moet zijn ' " .($_POST['gebruikersnaam']). " '
Ook is je script lek, sql injectie.
Ocirina - op 07/02/2011 17:14:41:
... `gebruiker` moet 'gebruiker' worden.
Echt niet. Gewoon zonder quotes.
Voor de sql injectie kun je trouwens mysql_real_escape_string gebruiken.
Gewijzigd op 07/02/2011 17:19:28 door Ocirina Ocirina
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
include("header.php");
require("connect.php");
if (!$_GET['act'])
{
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM 'gebruiker' WHERE `gebruikersnaam` = ' " .($_POST['gebruikersnaam']). " ' AND `wachtwoord` = 'md5($_POST['wachtwoord'])'");
if (mysql_num_rowS($check) > 0)
{
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo("The gebruikersnaam/wachtwoord was not found.");
}
?>
error_reporting(E_ALL);
ini_set('display_errors', true);
include("header.php");
require("connect.php");
if (!$_GET['act'])
{
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM 'gebruiker' WHERE `gebruikersnaam` = ' " .($_POST['gebruikersnaam']). " ' AND `wachtwoord` = 'md5($_POST['wachtwoord'])'");
if (mysql_num_rowS($check) > 0)
{
echo("You have been logged in.");
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo("The gebruikersnaam/wachtwoord was not found.");
}
?>
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING on line 18.
Iemand enig idee hoe deze fout kan.
Alvast bedankt allemaal XX
Code (php)
1
2
3
2
3
<?php
$check = mysql_query("SELECT * FROM gebruiker WHERE gebruikersnaam = ' ".$_POST['gebruikersnaam']."' AND wachtwoord ='".md5($_POST['wachtwoord'])."'");
?>
$check = mysql_query("SELECT * FROM gebruiker WHERE gebruikersnaam = ' ".$_POST['gebruikersnaam']."' AND wachtwoord ='".md5($_POST['wachtwoord'])."'");
?>
- Je script is lek -> sql injectie -> gebruik mysql_real_escape_string!
Code (php)
- Bij include hetzelfde als hierboven!
- Waarom nederlands / engels door elkaar?
Gewijzigd op 07/02/2011 17:28:09 door Jasper DS
Kijk eens aan zo komen we steeds een stapje verder nu de volgende fout Parse error: syntax error, unexpected $end on line 32. ? ik dacht dat het script gewoon goed afsloot?
Op het einde nog een }
Notice: Undefined index: on line 8
Notice: Undefined variable: PHP_SELF on line 14
?
- Verder is er ook geen foutafhandeling op je query!
- Heb je al iets aan de slq-injectie gedaan?
- gebruik " voor html en sql en ' voor php -> hoef je nooit te escapen.
Gewijzigd op 07/02/2011 17:36:22 door Jasper DS
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
include("header.php");
require("connect.php");
if (!$_GET['act'])
{
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM gebruiker WHERE gebruikersnaam = ' ".$_POST['gebruikersnaam']."' AND wachtwoord ='".md5($_POST['wachtwoord'])."'");
if (mysql_num_rowS($check) > 0)
{
echo 'you have been logged in.';
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo 'The gebruikersnaam/wachtwoord was not found.';
}
}
?>
error_reporting(E_ALL);
ini_set('display_errors', true);
include("header.php");
require("connect.php");
if (!$_GET['act'])
{
echo"<form method='POST' action='$PHP_SELF?act=login'>
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM gebruiker WHERE gebruikersnaam = ' ".$_POST['gebruikersnaam']."' AND wachtwoord ='".md5($_POST['wachtwoord'])."'");
if (mysql_num_rowS($check) > 0)
{
echo 'you have been logged in.';
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo 'The gebruikersnaam/wachtwoord was not found.';
}
}
?>
Dit is het script tot nu toe. De query nog niet getest maar deze zou wel naar behoren moeten werken?
Die tweede zal wel $_SERVER['PHP_SELF'] moeten worden inplaats van $PHP_SELF maar gooi dat er maar snel eruit want dat is onveilig "XSS". Gewoon uit typen.
Gewijzigd op 07/02/2011 17:38:18 door - Mark -
Wat dien in nu te verwijderen zodat dit script zonder problemen draait.
Opnieuw schrijven en deze keer volgens de regels.
Dient het hele script opnieuw geschreven te worden? En wat klopt er niet volgens de regels
Die PHP_SELF heb je niet nodig.
Gewoon
<form method="post" action="" > ...
Die notice:
Jij vraagt of de waarde van $_GET['act'] false/null is.
php vertelt jou: "merk op: $_GET['act'] bestaat niet".
Aangezien $_GET['act'] niet bestaat, vindt php het wat raar dat je vraagt wat $_GET['act'] is.
Wat je best doet, is lijn 8 vervangen door
if (empty($_GET['act']))
Gewijzigd op 07/02/2011 17:46:31 door Kris Peeters
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
include("header.php");
require("connect.php");
if (empty($_GET['act']))
{
echo <form method="post" action="login" >
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM gebruiker WHERE gebruikersnaam = ' ".$_POST['gebruikersnaam']."' AND wachtwoord ='".md5($_POST['wachtwoord'])."'");
if (mysql_num_rowS($check) > 0)
{
echo 'you have been logged in.';
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo 'The gebruikersnaam/wachtwoord was not found.';
}
}
?>
error_reporting(E_ALL);
ini_set('display_errors', true);
include("header.php");
require("connect.php");
if (empty($_GET['act']))
{
echo <form method="post" action="login" >
Gebruikersnaam: <input type='text' name='gebruikersnaam' /><br />
wachtwoord: <input type='password' name='wachtwoord' /><br />
<input type='submit' value='Login!' />
</form";
}
else if ($_GET['act'] == "login")
{
$check = mysql_query("SELECT * FROM gebruiker WHERE gebruikersnaam = ' ".$_POST['gebruikersnaam']."' AND wachtwoord ='".md5($_POST['wachtwoord'])."'");
if (mysql_num_rowS($check) > 0)
{
echo 'you have been logged in.';
$_SESSION['loggedin'] = "true";
$_SESSION['gebruikersnaam'] = $_POST['gebruikersnaam'];
}
else
{
echo 'The gebruikersnaam/wachtwoord was not found.';
}
}
?>
Parse error: syntax error, unexpected '<' on line 10
De fouten blijven maar komen, zou zo blij zijn als dit achter de rug is. Xx