Script helpen controleren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

- Rob -

- Rob -

16/03/2017 16:22:43
Quote Anchor link
Ik snapte niet wat ik moest isseten, nu wel :D

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
function loggedIn()
{
  if (isset($_SESSION['id']))
  {
    return true;
  }
  else
  {
    return false;
  }
}

function createAccount($gebruikersnaam, $wachtwoord, $emailadres, $admin, $ip, $datum)
{
  global $settings;
  global $link;

  $createAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `datum`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '".$link->real_escape_string(password_hash($wachtwoord, PASSWORD_DEFAULT))."', '".$link->real_escape_string($emailadres)."', '$ip', '".$link->real_escape_string($datum)."')");

  if (!$createAccount)
  {
    return false;
  }
  else
  {
    if ($admin === 1)
    {
      $setUserToAdmin = $link->query("INSERT INTO `".$settings['prefix']."adminstratoren` (`gebruikersnaam`, `ip`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '$ip')");

      if (!$setUserToAdmin)
      {
        return false;
      }
      else
      {
        return true;
      }
    }
    else
    {
      return true;
    }
  }
}

function createLog($bericht, $plaats, $ip, $datum)
{
  global $settings;
  global $link;

  $createLog = $link->query("INSERT INTO `".$settings['prefix']."logs` (`bericht`, `plaats`, `ip`, `datum`) VALUES ('".$link->real_escape_string($bericht)."', '".$link->real_escape_string($plaats)."', '$ip', '".$link->real_escape_string($datum)."')");

  if (!$createLog)
  {
    return false;
  }
  else
  {
    return true;
  }
}

function checkWrongAttempts($ip, $datum)
{
  $searchForWrongAttempts = $link->query("FF SNEL");

  if (!$searchForWrongAttempts)
  {
    return false;
  }
  else
  {
    return true;
  }
}

function login(gebruikersnaam, $wachtwoord)
{
  global $settings;
  global $link;
  global $ip;
  global $datum;

  $searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");

  if($searchForUser)
  {
    $userDetails = $searchForUser->fetch_assoc();

    if (
        $searchForUser->num_rows === 1
        && password_verify($wachtwoord, $userDetails['wachtwoord'])
      )
    {
      if (createLog($gebruikersnaam.' is met succes ingelogd', 'index', sha1($ip), $datum) === true)
      {
        $_SESSION['id'] = $userDetails['id'];
        return true;
      }
      else
      {
        return false;
      }
    }
  }
  else
  {
    return false;
  }
}

Ik heb nu dit, is dit dan al beter?
 
PHP hulp

PHP hulp

23/04/2024 20:24:26
 
- Ariën  -
Beheerder

- Ariën -

16/03/2017 16:33:47
Quote Anchor link
Ikzelf ben net als Ward geen fan van de globals in je script. Ikzelf roep ze graag netjes in de parameter van de functie aan.

Ook heb ik in mijn eigen CMS de foutafhandeling op de query() functie ingebouwd in een extend van de MySQli-class. Het in één van de enkele oplossingen die kan doen om je code zo compact mogelijk te houden.
 
- Rob -

- Rob -

16/03/2017 16:43:35
Quote Anchor link
Dus met de parameters, zoiets raden jullie dus aan:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
function createAccount($gebruikersnaam, $wachtwoord, $emailadres, $admin, $ip)
{
  $settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
  include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
  $datum = strtotime('Europe/Amsterdam');

  $createAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `datum`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '".$link->real_escape_string(password_hash($wachtwoord, PASSWORD_DEFAULT))."', '".$link->real_escape_string($emailadres)."', '$ip', '".$link->real_escape_string($datum)."')");

  if (!$createAccount)
  {
    return false;
  }
  else
  {
    if ($admin === 1)
    {
      $setUserToAdmin = $link->query("INSERT INTO `".$settings['prefix']."adminstratoren` (`gebruikersnaam`, `ip`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '$ip')");

      if (!$setUserToAdmin)
      {
        return false;
      }
      else
      {
        return true;
      }
    }
    else
    {
      return true;
    }
  }
}

function createLog($bericht, $plaats, $ip)
{
  $settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
  include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
  $datum = strtotime('Europe/Amsterdam');

  $createLog = $link->query("INSERT INTO `".$settings['prefix']."logs` (`bericht`, `plaats`, `ip`, `datum`) VALUES ('".$link->real_escape_string($bericht)."', '".$link->real_escape_string($plaats)."', '$ip', '".$link->real_escape_string($datum)."')");

  if (!$createLog)
  {
    return false;
  }
  else
  {
    return true;
  }
}

function checkWrongAttempts($ip, $plaats)
{
  $settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
  include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
  $datum = strtotime('Europe/Amsterdam');

  $searchForWrongAttempts = $link->query("SELECT * FROM `".$settings['path']."foutepogingen` WHERE `ip`='$ip' AND `plaats`='".$link->real_escape_string($plaats)."' AND `datum` BETWEEN '$datum' AND '".strtotime('+15 minutes', $datum)."'");

  if (
      !$searchForWrongAttempts
      || $searchForWrongAttempts->num_rows === 0
    )
  {
    return false;
  }
  else
  {
    if ($searchForWrongAttempts->num_rows > 3)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
}

function insertWrongAttempt($ip, $plaats)
{
  $settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
  include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
  $datum = strtotime('Europe/Amsterdam');
}

function login($gebruikersnaam, $wachtwoord)
{
  $settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
  include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
  $datum = strtotime('Europe/Amsterdam');
  global $ip;

  if (checkWrongAttempts(sha1($ip), $datum, 'index') === false)
  {
    $searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");

    if($searchForUser)
    {
      $userDetails = $searchForUser->fetch_assoc();

      if (
          $searchForUser->num_rows === 1
          && password_verify($wachtwoord, $userDetails['wachtwoord'])
        )
      {
        if (createLog($gebruikersnaam.' is met succes ingelogd', 'index', sha1($ip)) === true)
        {
          $_SESSION['id'] = $userDetails['id'];
          return true;
        }
        else
        {
          return false;
        }
      }
    }
    else
    {
      return false;
    }
  }
  else
  {
    return false;
  }
}
 
Ben van Velzen

Ben van Velzen

16/03/2017 16:45:27
Quote Anchor link
Wat is dit: strtotime('Europe/Amsterdam')? Wat is er mis met gewoon de juiste timezone in te stellen en time() te gebruiken? Ik kan me ook niet voostellen dat dat tot een correct resultaat leidt.

En nog steeds combineer je je ifs niet, de nesting is gewoon te veel.
Gewijzigd op 16/03/2017 16:46:18 door Ben van Velzen
 
- Rob -

- Rob -

16/03/2017 16:46:23
Quote Anchor link
Bedoel je met de juiste timezone UTC?
Want als ik dat doe en ik doe:
date_default_timezone_set('Europe/Amsterdam');
werkt het dan nog oké?

Toevoeging op 16/03/2017 16:48:23:

"En nog steeds combineer je je ifs niet, de nesting is gewoon te veel." waar zou ik dan me ifs kunnen combineren?
Gewijzigd op 16/03/2017 16:47:03 door - Rob -
 
- Ariën  -
Beheerder

- Ariën -

16/03/2017 16:52:34
Quote Anchor link
date_default_timezone_set() is de enige functie om de juiste tijdzone in te stellen. Maar doe dit bij voorkeur hogerop in php.ini. Tenzij je een afwijking wilt hebben op website-niveau. Of je moet op een buitenlands webhosting zitten. ;-)
 
Ben van Velzen

Ben van Velzen

16/03/2017 16:54:26
Quote Anchor link
Gebruik inderdaad date_default_timezone_set en gooi geen timezones in strtotime. Helemaal als strtotime niet van toepassing is zoals hoe jij het gebruikt. Gewoon time() gebruiken.

Je kunt je if condities omdraaien, dan hoef je ook niet meer te nesten. Houd in het achterhoofd dat return de functie meteen stopt, dus dan heb je ook geen else condities meer nodig.

Bijvoorbeeld, in plaats van dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if (
          $searchForUser->num_rows === 1
          && password_verify($wachtwoord, $userDetails['wachtwoord'])
        )

?>


Kun je dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if (
          $searchForUser->num_rows !== 1
          || !password_verify($wachtwoord, $userDetails['wachtwoord'])
        ) {

  return false;
}

// volgende conditie hier
?>
 
- Rob -

- Rob -

16/03/2017 16:56:57
Quote Anchor link
Oké bedankt! Kan ik php.ini op mijn webhost gewoon aanpassen als ik die opzoek bij filezilla bv.?

Toevoeging op 16/03/2017 17:00:07:

Ben? Ik heb van dit:

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
<?php
session_start();
date_default_timezone_set('Europe/Amsterdam');

$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');

include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/functions.php');

if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']) && loggedIn() === false)
{

  if (login($_POST['gebruikersnaam'], $_POST['wachtwoord']) === true)
  {

    echo '1+Je bent met succes ingelogd';
  }

  else
  {
    echo '0+De ingevulde gegevens zijn niet goed';
  }
}

?>

dit gemaakt:
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
<?php
session_start();
date_default_timezone_set('Europe/Amsterdam');

$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');

include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/functions.php');

if (
    isset($_POST['gebruikersnaam'], $_POST['wachtwoord'])
    &&
loggedIn() === false
    && login($_POST['gebruikersnaam'], $_POST['wachtwoord']) === false
  )
{

  echo '0+De ingevulde gegevens zijn niet goed';
}

else
{
  echo '1+Je bent met succes ingelogd';
}

?>

Dit is toch wat je bedoeld?
 
- Ariën  -
Beheerder

- Ariën -

16/03/2017 17:02:22
Quote Anchor link
- Rob - op 16/03/2017 16:56:57:
Oké bedankt! Kan ik php.ini op mijn webhost gewoon aanpassen als ik die opzoek bij filezilla bv.?

Ligt aan de installatie op de webserver.
Kijk in phpinfo naar "Scan this dir for additional .ini files" of gebruik de php-flags in .htaccess.
 
Ben van Velzen

Ben van Velzen

16/03/2017 17:05:44
Quote Anchor link
Nee, dat is niet wat ik bedoel, je moet lezen wat ik als voorbeeld geef. Nu combineer je verschillende dingen die om verschillende redenen tot een fout leiden, dus technisch gezien ook met een ander bericht.
Bekijk het voorbeeld nog eens.
 
- Rob -

- Rob -

16/03/2017 17:11:38
Quote Anchor link
Volgensmij snap ik het,

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
function loggedIn()
{
  if (isset($_SESSION['id']))
  {
    return true;
  }
  else
  {
    return false;
  }
}

naar dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
function loggedIn()
{
  if (!isset($_SESSION['id']))
  {
    return false;
  }
}

en dan dit toepassen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
if (loggedIn() != false)
{
  header('Location: '.$settings['path'].'paneel/');
  exit();
}


Toevoeging op 16/03/2017 17:18:01:

En dan nog 1 laatste vraag, als ik password_hash() gebruik, is het dan nog nodig om deze te escapen met real_escape_string?
 
Ben van Velzen

Ben van Velzen

16/03/2017 17:26:29
Quote Anchor link
Je snapt blijkbaar dus niet wat er gezegd wordt. Dat, of je wil het niet snappen. Je past het voorbeeld op compleet andere code toe. Dan heeft verdere uitleg ook geen zin.

>> En dan nog 1 laatste vraag, als ik password_hash() gebruik, is het dan nog nodig om deze te escapen met real_escape_string?

Voor de consistentie: ja zeker.
Gewijzigd op 16/03/2017 17:27:38 door Ben van Velzen
 
Marthijn Buijs

Marthijn Buijs

16/03/2017 17:29:27
Quote Anchor link
>> En dan nog 1 laatste vraag, als ik password_hash() gebruik, is het dan nog nodig om deze te escapen met real_escape_string?

Voor de consistentie: ja
Voor de beveiliging: nee
 
- SanThe -

- SanThe -

16/03/2017 18:53:05
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function loggedIn()
{

  if (isset($_SESSION['id']))
  {

    return true;
  }

  else
  {
    return false;
  }
}

?>

Kan gewoon zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function loggedIn()
{

  return isset($_SESSION['id']);
}

?>
Gewijzigd op 16/03/2017 18:53:26 door - SanThe -
 

Pagina: « vorige 1 2



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.