Veiligheid loginsysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back-end Developer Java

Dit ga je doen Het (door)ontwikkelen van een zelfgebouwde applicatie in Java, Spring Framework, SQL, HTML, CSS en Javascript; End-to-end beheer m.b.t. de applicatie en koppelen van applicaties binnen het landschap; Ontwikkelen van rapportages voor de interne organisatie; Ontwikkelen van aanvullende functionaliteiten m.b.t. de applicatie; Uitvoeren van testen en code reviews. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die medische gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen en verbeteren van de kwaliteit van de zorg in heel Nederland.

Bekijk vacature »

Low Code Ontwikkelaar

In het kort Als Low Code Developer werk je aan projecten bij en voor onze klanten, waarbij je voor het ontwikkelen van de oplossingen een technisch low-code platform gebruikt. Samen met het team streef je naar de beste oplossing en bepalen jullie de juiste aanpak. Je rol is divers en je bent van begin tot eind betrokken bij de ontwikkeling zowel de back-end en de front-end van de applicatie. Naast de ontwikkeling en oplevering, breng je ook advies uit aan de klant waarom bepaalde keuzes worden gemaakt. Je bent dan ook communicatief sterk en kunt je keuzes goed (inhoudelijk) onderbouwen.

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Ervaren PHP Developer

Functieomschrijving PHP Developer met brede ervaring gezocht! Ben jij een Full Stack PHP Developer met brede ervaring die toe is aan een volgende stap? Lees dan snel verder! Voor onze eindklant in de regio Nunspeet zijn wij op zoek naar een ervaren PHP Developer die het IT Team van deze organisatie gaat versterken. Wij zoeken een enthousiaste en breed georiënteerde IT-er die er voor gaat zorgen dat deze innovatieve organisatie de volgende stap gaat maken. Om deze functie goed uit te kunnen voeren moet je communicatief goed zijn en in staat zijn om zelfstandig problemen op te lossen. Daarnaast bestaat

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar een Embedded Software developer. Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij enthousiast en een echte team player? Lees dan snel verder en laat wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot aantal creatieve en ambitieuze ontwikkelaars. Ze

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Database Developer

Functie omschrijving Voor een logistieke dienstverlener in omgeving Zuid Beijerland zijn wij op zoek naar versterking. Weet jij als geen ander systemen aan elkaar te koppelen en heb jij goede kennis van SQL en UML, lees dan snel verder! Jouw taken zien er als volgt uit: Je bent in deze rol voornamelijk verantwoordelijk voor het bouwen, implementeren en beheren van koppelingen tussen de bestaande systemen (zowel business 2 business als application 2 application). Daarnaast inventariseer je de wensen van in- en externe klanten, die je vervolgens samen met je collega's, vertaalt naar technische specificaties, die jullie zelf ontwikkelen en implementeren.

Bekijk vacature »

.Net ontwikkelaars voor de zorgsector

Bedrijfsomschrijving Voor onze klant in de omgeving van Zwolle zijn wij op zoek naar een ervaren .Net ontwikkelaar, bij voorkeur met ervaring binnen de belangrijkste sector van Nederland, namelijk: de zorgsector. Deze internationale organisatie ontwikkelt software voor de zorgsector. Er werken zo'n 25 medewerkers hard aan een oplossing die gebruikt wordt door heel Nederland. Er heerst een informele sfeer waarbij er altijd ruimte is voor een grapje. Je collega's zijn stuk voor stuk sterke ontwikkelaars vanuit verschillende achtergronden en met verschillende leeftijden. Je komt hier terecht in een organisatie die zich hard inzet om de zorgsector te verbeteren. De mogelijkheden

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

Java developer (remote)

Functie Wat ga je doen als Java Developer? Jij als Java ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 ontwikkelaars binnen onze organisatie waarbij jij de brug slaat tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je jouw taken op voor de dag. Hieronder een aantal taken die jij zal uitvoeren: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden

Bekijk vacature »

Full Stack .NET Developer C# ASP.NET

Samengevat: Deze werkgever is gespecialiseerd in het op afstand bewaken en besturen van machines en processen. Ben jij een ervaren Full Stack .NET Developer? Heb je ervaring met C# en ASP.NET? Vaste baan: .Net Developer C# ASP.NET HBO €3.300 - €4.500 Deze werkgever is een snel groeiende onderneming gespecialiseerd in het op afstand bewaken en besturen van machines en processen, IoT (Internet of Things). Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Wil jij bij de top specialisten horen? Ben jij op zoek naar een

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Capelle ad Ijssel Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Een deel van jouw werkzaamheden: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps en Power BI.

Bekijk vacature »

Remote - Front-end Angular developer

Functie The IT team currently consists of the IT Manager, 2 back-end developers, 1 full-stack developer, 1 designer, and a DevOps engineer. They are currently looking for an experienced Front-end developer who will work autonomously and in a disciplined manner, being the only developer working on their Front-end applications at the start. They do have the ambition to find a second developer soon, who you will then be able to supervise. You will be working on the further development of their existing UI in Angular. But also developing a mobile app. They place great value on User Experience and opt

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

26/04/2024 02:19:27
 
- 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.