Veiligheid loginsysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Medior front-end developer gezocht (€3.300 -

Functie Wat ga je doen? Jij als front-end developer gaat werken binnen de teams van/voor onze klant. Je werkt in een team met starters en ervaren ontwikkelaars met allemaal 1 overeenkomst; passie voor het vak. Maak je een fout? Geen probleem, leer ervan en ga dan weer door. Door de variëteit aan werk kun je in verschillende omgevingen een kijkje nemen en jezelf dus snel ontwikkelen. Wat hebben we jou te bieden? • Uitdagende projecten bij mooie klanten (bij jou in de buurt, of binnenkort intern vanuit ons kantoor!) • Een jonge organisatie met talentvolle collega’s • Veel ruimte voor

Bekijk vacature »

Senior Fullstack developer wanted! (C#, Java, Angu

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze klanten. Geen werkdag is hetzelfde, je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfskritische systemen. Een voorbeeld hiervan is een cliënt-volgsysteem bij Reclassering Nederland. Andere klanten waar wij onder andere voor werken: KPN, Philips, Nationale-Nederlanden, Kamer van Koophandel, ABN AMRO, Bovemij, Arval en de Politie. Werken bij Sogeti Nieuwe ontwikkelingen volgen we op de voet en delen we binnen de

Bekijk vacature »

Developer Angular & Kotlin

Dit ga je doen Het (door)ontwikkelen van mobiele apps en webapplicaties; Het opstellen van technisch ontwerp en het bespreken van ontwerpen met de software architect; Het uitvoeren van werkzaamheden op het gebied van technisch testen; Het in de gaten houden van nieuwe ontwikkelingen op jouw vakgebied en het adviseren van de organisatie hierover. Hier ga je werken Het gaat om een bekend internationaal handelsbedrijf met ruim 800 medewerkers, verdeeld over verschillende deelbedrijven. Deze organisatie is van oorsprong een familiebedrijf, er wordt hard gewerkt, er heerst een no nonsense en doeners mentaliteit, een informele sfeer en er is een mix van

Bekijk vacature »

Senior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Front-end Developer (HTML/CSS, Angular/React/Vue,

Functie Je zal aan de slag gaan in een klein, hecht team met front-end development experts die de ambitie delen mooi werk te leveren. Samen met hen zal je werken aan het gebruiksvriendelijk en interactief maken van complexe webapplicaties, websites en mobile apps. Je levert klanten wat ze nodig hebben terwijl je actief aan jezelf blijft werken met de ondersteuning vanuit je werkplek. Talen als Javascript programmeer jij vloeiend en je hebt kennis van frameworks als React en Angular. Je zou je het liefst nog veel meer ontwikkelen in verschillende front-end talen. Deze kennis deel je graag met je collega’s,

Bekijk vacature »

Junior Back end developer PHP, Symfony

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

Ervaren Full-Stack PHP Developer

Functieomschrijving Gezocht! Ervaren PHP Developer! Voor een organisatie in de regio Harderwijk zoeken wij een ervaren PHP Developer die het IT team van dit bedrijf gaat versterken. We zijn op zoek naar een enthousiaste en breed georiënteerde IT-er die het innovatieve bedrijf nog een stap verder kan brengen. Voor deze functie zoeken wij iemand die communicatief goed is en die zelfstandig problemen op kan lossen. Je werkt samen met een externe ontwikkelpartij en kunt hun dus uitdagen op het geleverde werk. Het schrijven van concepten aan de AI en hardware kant valt onder je verantwoordelijkheden. Het bedrijf noemt zichzelf een

Bekijk vacature »

Software Developer

Longship.io gaat de wereld veroveren met baanbrekende software en legendarische... pizza-avonden! Lees hier de vacature van Software Developer! Bij Longship werken we met een team van 5 mensen aan software voor laadpaal operators. Longship is ontstaan in 2020 met als doel om de elektrische mobiliteitstransitie aan te jagen. We zijn nu al een wereldwijde speler doordat we continu voorop lopen in innovatie. Ons platform helpt het versneld elektrificeren van wagenparken, internationaal! Wij zijn een startup met grote ambities die we willen bereiken met een relatief klein en efficiënt team. Je krijg de kans om ontzettend veel te leren van ervaren

Bekijk vacature »

Software Programmeur PHP

Functie Wij zijn op zoek naar een PHP programmeur voor een leuke opdrachtgever in omgeving Alblasserdam. Heb jij altijd al willen werken bij een bedrijf dat veilige netwerkverbindingen levert door middel van veilige oplossingen? Lees dan snel verder. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Tevens

Bekijk vacature »

Back-End Developer in Laravel / PHP

Functie omschrijving Wij zijn op zoek naar een Medior PHP Laravel Developer voor een gaaf bedrijf in de omgeving van Amsterdam! Voor een enthousiast team die zich graag bezig houdt met softwareontwikkeling zijn wij op zoek naar versterking. Je werkt in een klein ontwikkelteam en bent zeer betrokken bij alle aspecten van de softwareoplossingen. Van het ontwerpen tot de oplevering. Binnen deze functie ga je aan de slag met het aanpassen, verbeteren en vernieuwen van de logistieke oplossingen. Je krijgt veel te maken met koppelingen naar systemen en de verzoeken van de klant. Je komt terecht in een team, waarbij

Bekijk vacature »

Senior Mobile Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Mobile Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

Bekijk vacature »

UX Writer (m/v/d)

UX Writer (m/v/d) Everything we do, starts with you. Together with you, we build the most human-centric fintech. We have the ambition to create the next. And - with Bertelsmann - a strong foundation to start from. Let’s make it new – for society and for yourself. Wij zijn op zoek naar een UX Writer (m/v/d) Fulltime - Op ons kantoor in Amsterdam of Heerenveen / deels vanuit huis Als UX Writer bij Riverty hou jij je bezig met onze strategie om daar te zijn waar onze gebruikers zijn en op de manier waarop zij ons nodig hebben, terwijl wij

Bekijk vacature »
Wouter H

wouter H

02/10/2014 22:34:05
Quote Anchor link
Hallo beste mensen en php-ers

Al een flinke tijd gebruik ik onderstaande login systeem, dat ik gedeeltelijk zelf, gedeeltelijk met snippets van het internet geplukt bij elkaar heb gekregen. Ik ben niet helemaal zeker of het veilig is. En ben benieuwd wat jullie er van vinden. Bvd.

Groeten Wouter
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<?php
//login.php

//cleanQuery

function cleanQuery($string)
{

  if(get_magic_quotes_gpc())  
  {

    $string = stripslashes($string);
  }

  if (phpversion() >= '4.3.0')
  {

    $string = mysql_real_escape_string($string);
  }

  else
  {
    $string = mysql_escape_string($string);
  }

  return $string;
}


//salt
function salt($pass, $salt, $str="")
{

    $pass = str_replace(" ", "", $pass);
    $pass = strrev($pass);

    $arr[0] = strlen($pass);
    $arr[1] = strlen($salt);
    
    while($arr[0] > $arr[1] + 1)
    {

        $salt = $salt.$salt;
        $arr[1] = strlen($salt);
    }


    $split_len = floor(max($arr) / (min($arr) - 1));
    
    $salt = explode(" ", chunk_split($salt, $split_len, " "));
    array_pop($salt);
    $salt = array_reverse($salt);
    
    $j = $arr[0] > count($salt) ? $arr[0] : count($salt);
    
    for($i=0; $i<$j; $i++)
    {

        if(isset($pass{$i}))    $str .= $pass{$i};
        if(isset($salt[$i]))    $str .= $salt[$i];
    }

    
    return $str;
}

 
$logingoto = "admin.php";
$validate = "validate.php";
$error = "form.php";

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

    $_SESSION['user'] = NULL;
    unset($_SESSION['user']);
    $_SESSION['ip'] = NULL;
    unset($_SESSION['ip']);
    $_SESSION['id'] = NULL;
    unset($_SESSION['id']);
    $_SESSION['logged'] = NULL;
    unset($_SESSION['logged']);
    
    session_destroy();
}


if (!isset($_SESSION))
    {
  session_start(); }

require('connections/connection.php');

if (isset($_POST['login']))
{

  
  $username = cleanQuery($_POST['username']);
  $password = hash('sha256', salt($_POST['password'], 'randomnummersencijfers'));
  $ip = cleanQuery($_POST['ip']);
  $ip_check = cleanQuery($_SERVER['REMOTE_ADDR']);

  $query = mysql_query ("SELECT * FROM `users` WHERE username = '$username' ");
  $numrows = mysql_num_rows($query);
  $row = mysql_fetch_assoc($query);
  
  if($row['attempt'] % 3 == 0)  
  {

      if (strtotime("now") < $row['attempt'])
      {

          echo "to soon";
          die ;
      }

      else
      {
        $outtime = strtotime("now + 2 hours");
        mysql_query("UPDATE `users` SET `outtime` = '$outtime' WHERE `id` = " . $row['id']);
        header ("Location: " . root() );
        die;
      }
  }
    
  
  else
  {
      if ($row['emailcheck'] == 1 )
    {

      if ($username && $password)
      {
      
          if ($numrows != 0 and $row['type'] != 0)
          {

              $dbusername = $row['username'];
              $dbpassword = $row['password'];
              $id = $row['id'];
              
              if ($username == $dbusername && $password == $dbpassword)
              {

                  $session_id = rand(100000000,999999999);
    
                  $_SESSION['login'] = TRUE ;
                  $_SESSION['user'] = $row['id'];
                  $_SESSION['id'] = $session_id;
                  
                  $insert_session_id = mysql_query("UPDATE `users` SET `session` = '" . $session_id . "' , `attempt` = 1 WHERE `id` = " . $row['id'] );
                  
                  if (isset($_POST['verify']))
                  {

                      $verify = hash('sha256', salt(cleanQuery($_POST['verify']), 'randomnummersencijfers'));            
                                          
                      $check_query = mysql_query("SELECT * FROM `users` WHERE `id` = " . $id . " AND `verify` = '$verify' ");
                      $numrows_q = mysql_num_rows($check_query);
                      
                      if (isset($numrows_q) and @$numrows_q != 0 and $ip == $ip_check)
                      {

                          $insert_ip = mysql_query("INSERT INTO `userip` (`uid`, `ip`) VALUES (".$id.",'$ip')");                    
                      }

                      
                      else
                      {
                          header("Location: $error");
                          die;
                      }
                  }

                  
                  if ($ip == $ip_check)
                  {

                      $ip_query = mysql_query("SELECT * FROM `userip` WHERE `uid` = " . $row['id'] . " AND `ip` = '$ip' ");
                      @
$ip_row = mysql_fetch_assoc($ip_query);
                      @
$numrowsip = mysql_num_rows($ip_query);
                  
                      if (isset($numrowsip) and @$numrowsip != 0 and $ip_row['logged'] != 1)
                      {

                          //mysql_query("UPDATE `userip` SET `logged` = " . 1 . " WHERE `ip` = '$ip' AND `uid` = " . $id );
                          mysql_query("UPDATE `users` SET `logged` = '$ip', `attempt` = 1 WHERE `id` = " . $id );
                          $_SESSION['ip'] = $ip ;
                          header("Location: $logingoto");
                          die ;
                      }

                      
                      elseif ($ip_row['logged'] == 1)
                      {

                          header ("Location: $error");
                          die ;
                      }

                      
                      else
                      {
                          include('admin/layout/head.php');
                          include('admin/validate.php');
                          die ;
                      }
                  }                
              }

      
              else
                {
                    $max = maximum('attempt', 'users', 'id', $id);
                    @
mysql_query("UPDATE `users` SET `attempt` = " . $max . " WHERE `id` = " . $id );
                    header("Location: $error"); die ;
                }    
          }

      
          else
          {
            $max = maximum('attempt', 'users', 'id', $id) ;
            @
mysql_query("UPDATE `users` SET `attempt` = " . $max . " WHERE `id` = " . $id );
            header("Location: $error"); die ;
          }
      }

      
      else
      {
          $max = maximum('attempt', 'users', 'id', $id);
          @
mysql_query("UPDATE `users` SET `attempt` = " . $max . " WHERE `id` = " . $id );
          header("Location: $error"); die ;
      }    
    }

    
    elseif (isset($_POST['email']))
    {

        $email_ver = mysql_query("UPDATE `users` SET `emailcheck` = 1 WHERE `id` = " . $row['id'] );
        if (isset($email_ver)) { header("location: " . root()."verify"); die; }
        else echo mysql_error();
    }

    else    
    {
        header("Location: $error"); die ;
    }
  }  
}


?>

het formulier:
        <form action="login.php" method="POST">
            <p>Naam:<br /><input type="text" name="username" class="login"></p>
            <p>Wachtwoord:<br /> <input type="password" name="password" class="login" ></p>
            <input type="submit" name="login" class="logbutton" value="Login">
            <input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR'];?>" />
        </form>

- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 06/10/2014 12:15:27 door - Ariën -
 
PHP hulp

PHP hulp

20/04/2024 12:35:00
 
- Ariën  -
Beheerder

- Ariën -

02/10/2014 23:14:58
Quote Anchor link
- die() is niet netjes
- Fouten onderdrukken met @ is onnodig
- Gebruik liever de functies van mysqli i.p.v. mysql
- Waarom controleer je boven nog op PHP 4.3.0 of lager? Zo goed als niemand draait deze meer.
 
Phpnuke r

phpnuke r

03/10/2014 00:34:50
Quote Anchor link
Hallo Wouter H,

Goed dat je een code online plaatst om gerated te worden. Onderstaand een aantal tips, hopelijk heb je er wat aan

Om te beginnen zou ik een inlogsysteem maken gebaseerd op cookies. Hiermee heb je iets meer mogelijkheden wat mij betreft. Het is bijvoorbeeld makkelijker om een bepaalde tijd aan te geven hoelang de persoon is ingelogd. Bovendien sla je er erg veel in op. Een id is meer dan voldoende
Quote:
$_SESSION['user'] = NULL;
unset($_SESSION['user']);
$_SESSION['ip'] = NULL;
unset($_SESSION['ip']);
$_SESSION['id'] = NULL;
unset($_SESSION['id']);
$_SESSION['logged'] = NULL;
unset($_SESSION['logged']);


Ten tweede, hoewel ik de code niet helemaal technisch heb gelezen lijkt het mij erg makkelijk om in jouw login systeem te komen. Heb je wel eens gelezen over SQL injection? Dit is een zeer makkelijke methode om op vele sites in te loggen. Er zijn tegenwoordig nog belabberd veel websites waarop het mogelijk is. Probeer er eens wat informatie over te zoeken via google met 'php sql injection'.
'
En ten derde voor nu: Probeer af te komen van die oneindige if constructies. Een if in een if in een if in een if in een if. Reden: je code is nogal lastig om te lezen. ELke keer weer kijken waarvoor die else okal weer is! Probeer alles zo te beperken tot max. 2 if's in een if.

Je hebt bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if (isset($_POST['login'])) { ... ?>

Waarin een hele hoop zooi staat. Hoewel ik betwijfel of je niet gewoon kunt controlleren of username en password er zijn, had je het volgende beter kunnen doen (in geval post['login'] nodig is):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if( ! isset($_POST['login'])){
    Error::render("De variable login is er niet.");  //of maak er een echo van :P
}
//Content wat er in de if stond kan nu er onder worden gezet.
//Dit scheelt toch weer overal een TAB en je hebt direct overzicht.
//Je weet namelijk direct dat deze if GEEN else bevat.
//Bij jouw is dit overal weer een raadsel.
//Je mag overigens best wel een DIE in je code behouden maar je hebt er wel erg veel. Beperk dit tot max 2.

?>


Hopelijk is de uitleg duidelijk, aangezien ik niet al te veel tijd voor heb kunnen nemen.1111111
Gewijzigd op 03/10/2014 00:38:36 door phpnuke r
 
Wouter H

wouter H

03/10/2014 08:50:33
Quote Anchor link
@aar, dankjewel voor de reactie. Ook de code tags zal ik gebruiken.

@phpnuke r, dankjewel. Ik dacht dat door de functie cleanQuery, mysql injectie al werd voorkomen eigenlijk. Verder ga ik er mee aan de slag.
 
Dos Moonen

Dos Moonen

03/10/2014 15:14:19
Quote Anchor link
1) Welke PHP versie draai je?

2) Gebruik ALTIJD prepared statements, dan heb je die baggere (sorry, het is de waarheid) cleanQuery() ook niet meer nodig.
Dit betekend trouwens wel dat je MySQLi/PDO moet gebruiken, niet helemaal waar, maar dit is een goed iets.

3) Gebruik aub de familie van password_* functies. Dus password_hash() voor het hashen van een wachtwoord, password_verify() voor het controleren of een password en hash bij elkaar horen. Het genereert automatisch salts, veel veiliger dan dat jij het doet. De controlle van passwords is beter bestand tegen timing-attacks. Het algemene 'don't roll your own crypto, you are not an expert' verhaal dus...
 
Wouter H

wouter H

06/10/2014 11:18:13
Quote Anchor link
Dankjewel!

En de versie php is: 5.3
Gewijzigd op 06/10/2014 11:23:00 door wouter H
 
- Ariën  -
Beheerder

- Ariën -

06/10/2014 12:12:25
Quote Anchor link
Dan is die hele cleanQuery() functie dus niet meer nodig. Verder kan ik zeker aanraden om naar password_hash() en password_verify() te kijken.

Hoewel deze pas vanaf PHP 5.5 werken, is er al wel een compatibiliteitspakket beschikbaar die vanaf 5.3.7 werkt, ervanuitgaande dat je hoger dan deze PHP-versie zit:
https://github.com/ircmaxell/password_compat


- Aar -:
Ik heb de topictitel aangepast van 'login' naar 'Veiligheid loginsysteem'
Gewijzigd op 06/10/2014 12:16:07 door - Ariën -
 



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.