Veiligheid Inlogsysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Als Front-end developer samenwerken met de beste c

Functie Momenteel zijn we voor één van de projecten bij hun key partner, een voorloper in de energiesector, op zoek naar gedreven Front-end developers. Ze nemen de lead in dit project en werken uitsluitend met vooruitstrevende technologieën. Ze verwachten dat de technologie die hier wordt ontwikkeld uiteindelijk door veel meer grote corporates, in verschillende sectoren zal worden toegepast. Dit is dan ook een heel uitdagend project om aan mee te gaan werken. Het team bestaat o.a. uit User Experience designers, Data Scientists en Software Engineers. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Voor een opdrachtgever in omgeving Moordrecht zijn wij op zoek naar een programmeur. 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

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 »

Delphi developer

Functie Als Delphi developer ga jij aan de slag in een team met twee andere ervaren Delphi programmeurs waaronder de Hoofd programmeur. Als team zijn jullie verantwoordelijk voor de doorontwikkeling van jullie bestaande applicatie. Daarnaast zijn jullie verantwoordelijk voor het onderhouden van deze applicatie en het oplossen van eventuele bugs. Eisen - HBO werk en denk niveau; - Minimaal één jaar ervaring met Delphi; - Goede beheersing van de Nederlandse taal in woord en geschrift; - Jij bent zelfstandig, maar kan ook in team verband werken. Aanbod - €3000,-- €4000,- op basis van jouw kennis en ervaring; - 8% vakantiegeld;

Bekijk vacature »

Junior Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Samenwerken in een team van 10 collega's; Opleveren van mooie eindproducten, middels de Agile methodiek; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als startende IT-professional kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven.

Bekijk vacature »

Senior Product Developer

Functieomschrijving Als senior Product Developer ben je verantwoordelijk voor bestaande mobiliteitsproducten en de ontwikkeling van nieuwe mobiliteitsconcepten. Met behulp van diverse klantonderzoeken, klantsessies en salesmeetings zorg je ervoor dat je de veranderende mobiliteitsbehoeften in de markt kent. Hier speel je op in door innovatieve, flexibele, efficiënte en duurzame vervoersoplossingen te bedenken, te ontwikkelen, te implementeren en uiteindelijk samen met Sales en Marketing collega’s in de markt te zetten. Je initieert en neemt deel aan (internationale en afdeling overschrijdende) projecten, vaak in de rol van projectleider. In die rol bewaak je de voortgang, coördineer je de activiteiten en zorg je voor

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

Bekijk vacature »

Medior PHP Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte website die in eigen beheer zijn. In onze vestiging in Nederweert zitten onze development afdelingen en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé PHP/Back-end developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het bedenken van nieuwe functionaliteiten Het verbeteren van het

Bekijk vacature »

App Developer

Samen werken aan een gezonder Nederland en toekomstbestendige zorg voor iedereen. Dat is de impact die jij kan hebben als App Developer bij VGZ. Wil jij een bijdrage leveren aan een maatschappij waarin iedereen zich thuis voelt? Bekijk dan de vacature. Uit onderzoek van Computable is VGZ verkozen tot ‘beste niet-ICT werkgever voor ICT’ers van Nederland’ Hoe ook jij het verschil maakt Als App developer werk jij aan het belangrijkste communicatiekanaal van VGZ, namelijk de App! Als App developer bij VGZ maak je onderdeel uit van een van onze App-teams. Met een goede mix van kennis en ervaring zet je

Bekijk vacature »

Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Opleveren van mooie eindproducten, middels de Agile methodiek; Samenwerken in een team van 10 collega's; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven. De

Bekijk vacature »

Database developer - SQL

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je sluit aan bij meetings en brengt het gehele logistieke proces in kaart. Vervolgens ga je als lead developer aan de slag om de klus te klaren. Je stuurt het junior developer team en helpt, zo nodig,

Bekijk vacature »

Junior .NET developer

Functie Wij zijn bezig met het ontwikkelen van een nieuw product en wij hebben jouw hulp hierbij nodig! Als junior .NET ontwikkelaar krijg jij de kans om samen met ons deze nieuwe uitdaging aan te gaan! Momenteel bestaat ons team uit drie interim Software Engineers. Twee hiervan zijn zeer ervaren .NET specialisten die inmiddels hun strepen in dit vakgebied al hebben behaald. Ook hebben wij een junior als onderdeel van ons team die zich op dit moment nog bezig houdt met de Front-end (Angular/TypeScript), maar zich nu ook meer gaat verdiepen in de backend. Wij willen ons team graag verder

Bekijk vacature »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

Bekijk vacature »
Pjotter Prins

Pjotter Prins

14/04/2011 19:30:55
Quote Anchor link
Beste lezer,

Ik ben bezig met het schrijven van een inlog systeem en wil deze graag zo veilig mogelijk. Ik gebruik al een salt, en mysql_real_escape_string. Maar nu wil ik graag weten wat ik kan doen om mijn passwords en databases nog veiliger te maken.

Ook check ik op elke pagina of de users zijn ingeloged door middel van een session.
Vervolgens controleer ik of de session met het ip adres overeenkomt met de cookie en het ip adres wat daarin is opgeslagen. Is dit veilig of zijn er nog andere dingen die ik moet doen om dit veiliger te maken?
 
PHP hulp

PHP hulp

15/01/2025 22:46:32
 
Bram Boos

Bram Boos

14/04/2011 20:31:23
Quote Anchor link
Session hijacking?
 
Pjotter Prins

Pjotter Prins

14/04/2011 21:04:34
Quote Anchor link
Ja precies dit probeer ik te voorkomen door het ip adres op te slaan in een cookie en per pagina te kijken of het ipadres nog steeds overeenkomt met het ipadres in de cookie. Is dit een juiste manier?
En welke functies gebruiken jullie nog meer om user input te controleren?
 
Arjan -

Arjan -

14/04/2011 21:13:00
Quote Anchor link
Alleen controleren of iemand is ingelogd met behulp van het bestaan van een sessie (variabele) is niet voldoende. Het is beter wanneer iemand inlogt het ipadres op te slaan in de database en telkens wanneer een pagina geladen wordt, in de database te controleren op de hash (niet de hash van het wachtwoord) en user_id, waarbij ook het ipadres van de gebruiker gecontroleerd wordt met het ipadres in de database (als deze niet overeenkomt is het aannemelijk dat de sessie is "gestolen"). Hierdoor hoef je niet het ipadres op te slaan in de sessie, maar bewaar je 'm in de database. Dit ipadres blijft onveranderd, tenzij iemand opnieuw inlogt.

En het is belangrijk om onderscheid te maken tussen cookies en sessions (zijn ook cookies, maar dan serverside). Dit om misverstanden te voorkomen.
Gewijzigd op 14/04/2011 21:15:27 door Arjan -
 
Pjotter Prins

Pjotter Prins

14/04/2011 22:02:01
Quote Anchor link
@arjan
Ik heb dit geschreven:
------------------------------------------------

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
<?php session_start();
function
check_login($id, $session_id, $ip) {
    include_once('connection.php');
    $error = FALSE;
    if($id == '') {
        $error = TRUE;
    }

    if ($session_id == ''){
        $error = TRUE;
    }

    if ($ip == ''){
        $error = TRUE;
    }

    else {
        $query = "SELECT ip, session_id FROM users WHERE id = '" . mysql_real_escape_string($id) . "'";
        $result = mysql_result($query);
        $result = mysql_fetch_assoc($result);
        if($_SERVER['REMOTE_ADDR'] != $ip) {
            $error = TRUE;
        }

        if ($session_id != $result['session_id']) {
            $error = TRUE;
        }

        if ($error == TRUE) {
            return FALSE;
        }
else {
            return TRUE;
        }
    }
}
------------------------------------


In deze functie zijn id, session_id, ip allemaal sessions, maar is dit veilig?
Gewijzigd op 14/04/2011 22:05:43 door Pjotter Prins
 
Arjan -

Arjan -

14/04/2011 22:04:45
Quote Anchor link
Je hebt dus geen hash wat je met elkaar controleert? Lijkt mij niet verstandig. Maak tijdens het inloggen een unieke hash aan die je zowel in de database stopt en in de sessie. Deze dien je dan ook te vergelijken met elkaar. Wat je nu doet is alleen controleren op id (is eenvoudig te veranderen) en het ipadres.
 
Pjotter Prins

Pjotter Prins

14/04/2011 22:10:18
Quote Anchor link
Ik snap wat je bedoelt. Dit heb ik proberen te doen met de variabele session_id. Bij het aanmelden geef ik deze een waarde mee met de functie uniqid();. Deze heb ik in mijn database gezet en vervolgens lees ik deze uit voor de user met het id dat overeenkomt met de variabele id ($id). Heb ik het dan goed uitgevoerd? Of kan ik nog wat verbeteren?

PS. Bedankt voor de super snelle reactie ;)
Gewijzigd op 14/04/2011 22:10:36 door Pjotter Prins
 
Arjan -

Arjan -

14/04/2011 22:12:42
Quote Anchor link
Met je sessie id hoef je weinig te doen. Gewoon tijdens het inloggen een md5(uniqid(mt_rand(),true)) (eventueel met een salt) gebruiken. Dus wachtwoord is alleen nodig om het inloggen mogelijk te maken. Binnen een sessie doe je hier niets meer mee. Deze in de database stoppen (bij de goede user) en meegeven in een sessie variabele. Deze zal je dan elke keer moeten verifieren met de database. Als je dit doet in combinatie met de userid en ipadres dan zit je al aardig veilig.
Gewijzigd op 14/04/2011 22:13:46 door Arjan -
 
Pjotter Prins

Pjotter Prins

14/04/2011 22:23:58
Quote Anchor link
Arjan - op 14/04/2011 22:12:42:
dan zit je al aardig veilig.


Thx. Dit heb ik nu gedaan. Maar ik wil niet aardig veilig. Het moet echt super veilig. Ik wil namelijk wat persoonlijke dingen op een pagina zetten.. Zijn er dan nog extra's die ik kan doen? tips & tricks?
 
Arjan -

Arjan -

14/04/2011 22:32:17
Quote Anchor link
Laat je code eens zien...
 
Pjotter Prins

Pjotter Prins

14/04/2011 22:53:00
Quote Anchor link
Bij het aanmelden gebruik ik het volgende en genereer ik de sessies:
--------------------
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$session_id
= sha1(salt1(uniqid(rand(), true)));
$query = "INSERT INTO users (session_id, ip) VALUES ('" . $session_id . "','" . $_SERVER['REMOTE_ADDR'] . "') WHERE email = '" . $result['email'] . "';";
$_SESSION['id'] = $id;
$_SESSION['session_id'] = $session_id;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
?>

------------------
Vervolgens controleer ik op elke pagina aan de hand van de volgende functie:

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
<?php session_start();
function
check_login($id, $session_id, $ip) {
    include_once('connection.php');
    $error = FALSE;
    if($id == '') {
        $error = TRUE;
    }

    if ($session_id == ''){
        $error = TRUE;
    }

    if ($ip == ''){
        $error = TRUE;
    }

    else {
        $query = "SELECT ip, session_id FROM users WHERE id = '" . mysql_real_escape_string($id) . "'";
        $result = mysql_result($query);
        $result = mysql_fetch_assoc($result);
        if($_SERVER['REMOTE_ADDR'] != $result['ip']) {
            $error = TRUE;
        }

        if ($session_id != $result['session_id']) {
            $error = TRUE;
        }

        if ($error == TRUE) {
            return FALSE;
        }
else {
            return TRUE;
        }
    }
}

?>
 
Arjan -

Arjan -

15/04/2011 09:48:14
Quote Anchor link
Ik neem aan dat salt1 een functie is waarbij je een salt toevoegt aan de uitkomst van uniqid(mt_rand(), true)? Waarom niet gewoon sha1($salt.uniqid(mt_rand(),true)) ?

En je controle kan een stuk korter:

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
session_start();

function
check_login($id, $session_id, $ip) {
    
    include_once('connection.php');
    
    $error = FALSE;
    
    if(trim($id) == '' OR trim($session_id) == '' OR trim($ip) == '') {
        $error = TRUE;
    }

    
    if($error === false) {
        
        $query = "
            SELECT
                ip,
                session_id
            FROM
                users
            WHERE
                id = '"
. mysql_real_escape_string($id) . "'
            AND
                session_id = '"
.mysql_real_escape_string($session_id)."'
            AND
                INET_ATON('"
.mysql_real_escape_string($_SERVER['REMOTE_ADDR']."')
            LIMIT 1
        "
;
        
        $result = mysql_result($query);

        if($result) {
            
            if(mysql_num_rows($result) > 0) {
            
                $data = mysql_fetch_assoc($result);
                
                return $data;
                
            }
else
                return false;
            
        }
else {
            return false;
        }
        
    }
}

?>


Wat ik heb aangepast:
- Logischer volgorde
- Controles laten uitvoeren door de database
- Simpele foutafhandeling toegevoegd (je had geen eens een controle ingebouwd om te controleren hoeveel records retourneert worden door de query)
- INET_ATON toegevoegd: Beter is om je ipadressen op te slaan in een unsigned integer veld, waarbij je telkens de functie INET_ATON gebruikt om een "normaal" ipadres om te zetten naar een integer. Dus ook bij het toevoegen / wijzigen (INSERT INTO / UPDATE) van het ipadres moet je dan deze functie gebruiken.
- In plaats van een boolean retourneert de functie nu, indien succesvol geauthenticeerd, de uitkomst van de query.

En ik raad je aan om eens te kijken naar PDO voor de databaselaag: http://phptuts.nl/view/27/

Als je PDO namelijk juist gebruikt (prepared statements) hoef je je geen zorgen meer te maken over sql injections (ideaal)!
Gewijzigd op 15/04/2011 10:05:33 door Arjan -
 
Pjotter Prins

Pjotter Prins

22/04/2011 23:24:22
Quote Anchor link
Beetje laat, maar bedankt voor je reactie!!
 



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.