Mijn login veilig maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end developer @ Amsterdam

2021-11-19 iSense Front-end developer Ben jij een Front-end Developer die graag aan de slag wil bij een van de grootste en meest gerenommeerde financiële organisaties wereldwijd? Wil jij je richten op projecten waar je van scratch af aan (inhouse) de meest innovatieve oplossingen gaat bedenken én uitvoeren voor erkende organisaties (met o.a. Node.js en React)? Lees dan nu verder! ISHU51584 Organisatie Als jij een Front-end Developer bent is dit jouw kans om aan de slag te gaan bij een van de grootste en meest gerenommeerde financiële organisaties wereldwijd. Met diverse vestigingen zijn ze een belangrijke speler in de financiële markt.

Bekijk vacature »

Backend Developer Security

De vacature Je start je eerste dag met een standup. Dit gebeurt 2 keer per week organisatie-breed; de andere dagen met betrokken afdelingen. Hierin licht iedereen kort zijn dag toe. Werpt iemand een balletje op voor een kans of deelt een succes. Jij deelt vandaag dat je start bij Maqqie en zin hebt om de systemen te leren kennen. Eenmaal op je werkplek pak jij je nieuwe laptop uit. Kees geeft je een digitale rondleiding van de programma's waar we gebruik van maken. Aansluitend hierop alvast een kijk op de week, en wat er in grote lijnen in deze sprint

Bekijk vacature »

Startersfunctie JAVA developer @ Regio Rotterdam

2021-12-03 iSense Startersfunctie JAVA developer Klaar met je studie en ready om de arbeidsmarkt op te gaan als Fullstack Java Developer? Mooi! Wij helpen jou graag om je opgedane theorie te verbreden en te kunnen inzetten in de praktijk. Met het Graduate Programma van de Experis Academy start jij je loopbaan met de meest up-to-date kennis en word je begeleid ook tijdens het werken bij de klant. Kan jij ook niet wachten tot 7 februari? ISNA51149 Wat ga je doen tijdens het Fullstack JAVA ontwikkeltraject? Vanaf 7 februari 2022 krijg jij via de Experis Academy een unieke kans om jouw

Bekijk vacature »

BI Developer @ Arnhem

2021-11-22 iSense BI Developer Heb jij minimaal 3 jaar ervaring als BI Developer en wil jij werken aan een gezonder en sterker Nederland? Kijk je uit naar een functie binnen een groeiende organisatie in de sport branche waar je naast jouw huidige kennis en ervaring de ruimte krijgt om jezelf verder te ontwikkelen? Solliciteer dan snel! ISVI51808 Organisatie Voor een organisatie binnen de sport branche in regio Arnhem zijn wij op zoek naar een BI Developer. Je komt terecht in een team van 5 man waarvan 3 back-enders en 2 front-enders. De sfeer is informeel en iedereen is gelijk. Momenteel

Bekijk vacature »

Software .NET Backend Developer e-health platforms

Bedrijfsomschrijving Wij zoeken voor deze organisatie naar een slimme Software .NET Developer. Je gaat hier samen met andere goede Software Developers meewerken aan een gezondere wereld. Het bedrijf werkt inmiddels wereldwijd samen met ontzettend veel organisaties en instellingen, waaronder grote en bekende ziekenhuizen en zorginstellingen. De bedreifseigen e-health applicatie is waar jij je tanden in mag gaan zetten. Deze zeer grote en moderne software applicatie geeft inzichten op het gebied van de gezondheid op een individueel niveau. Dagelijks wordt er gewerkt aan vernieuwing van het platform, en daar hebben ze jou voor nodig. Functieomschrijving Je komt te werken in een

Bekijk vacature »

Python Developer

De vacature Je bent betrokken bij het gehele ontwikkeltraject van websites, waarbij jouw focus ligt op het ontwikkelen van de back-end en het CMS. Projecten zullen zowel zeer belevende/visuele websites als corporate websites zijn, die via een CMS beheerbaar zijn. Je technische aanpak is creatief en nauwkeurig waarbij je de structuren helder weet neer te leggen. Ook ben je in staat binnen een team samen te werken, waarbij zaken als kennisoverdracht en duidelijke/eenduidige code centraal staan. Tenslotte ga je tot het uiterste om de diverse door onze eindklant gemaakte producten naar een hoger niveau te tillen. Wij zoeken een gedreven

Bekijk vacature »

Sitecore Developer- Amersfoort

De vacature As a Sitecore Developer, you will be an active member of client project teams playing a hands-on role in producing client solutions. You will be encouraged to continue to develop your skills, share your knowledge with team members and peers, and effectively lead a development stream on a project. A successful Sitecore Developer is highly adaptable, shows strong initiative, is able to work independently, has a driving desire to grow professionally towards specific goals, and is energized by working in a team environment. This position requires a focus on writing great code and a strong understanding of the

Bekijk vacature »

Python Developer - Capelle a/d IJssel

De vacature In jouw functie werk in projecten aan enterprise-applicaties. Met een team bouw je oplossingen op basis van Python. Dat is de kern van je werk. Maar bij ons ben je consultant en dat betekent meer dan alleen programmeren. Wij vinden het belangrijk dat je naast de techniek zelf ook oog hebt voor de context waarbinnen deze wordt gebruikt en dat je hierover kunt adviseren. Dat is onze en jouw toegevoegde waarde. Je bent op een punt in je loopbaan waar je toe bent aan een nieuwe fase. Met jouw ervaring ben je in staat om startende collega’s wegwijs

Bekijk vacature »

PHP Developer

De vacature Als Developer PHP ben je verantwoordelijk voor het ontwikkelen van state-of-the-art software. Jij werkt samen met developers, designers en testers in multidisciplinaire Agile Scrum teams aan innovatieve nieuwe producten. Intersoftware B.V.en UniTrust B.V. zijn vanaf medio 2019 onderdeel van één groep. Je draagt bij aan integratie van producten van deze bedrijven. Je start als Developer met enkele jaren (werk)ervaring met PHP en MySQL en groeit door. Heb je ruime ervaring, dan spreken we je graag als Senior developer. In alle gevallen ben je technisch zeer vaardig en heb je kennis van meerdere moderne ontwikkeltools. Je houdt je bezig

Bekijk vacature »

Java Developer

De vacature In deze diverse functie als Java Developer ben je verantwoordelijk voor de innovatie, realisatie en het beheer van de complexe informatiesystemen voor een van onze leuke klanten. Als Java Developer achterhaal je proactief de behoeften en wensen van de gebruikers binnen de organisatie. Deze vertaal je naar functionele en technische ontwerpen, afhankelijk van de omvang van het project. Vervolgens realiseer, programmeer en test je je oplossingen, om daarna samen met je klant te bespreken of het gewenste resultaat bereikt is. Functie eisen We zijn op zoek naar een Java Developer die: Een relevant diploma heeft op minimaal HBO

Bekijk vacature »

Boer zoekt Machine Learning Developer

Bedrijfsomschrijving Dit bijzondere bedrijf uit de regio Nijmegen ontwikkelt applicaties waar wereldwijd boerenbedrijven hun bedrijf mee ondersteunen. Van kleine sympathieke bio-bedrijfjes tot hele mooie grote professionele boerenbedrijven die al jaren gerund worden door dezelfde familie's. We hebben bij dit mooie bedrijf een vacature ervaren Machine Learning expert die toe is aan een nieuwe uitdaging. Ze doen dit voor bedrijven in ons eigen land en tot ver daarbuiten. Er zijn internationale kansen die ze niet voorbij laten gaan en binnen hun sector is het op IT vlak een top-speler. Men richt zich op het moment bijvoorbeeld op Nieuw-Zeeland en ook in

Bekijk vacature »

Junior Fullstack .NET Developer @ Regio Rotterdam

2021-10-18 iSense Junior Fullstack .NET Developer Heb je onlangs een hbo-, wo-opleiding of een minor richting de IT afgerond OF heb jij middels cursussen je sporen verdiend in het programmeren en wil je graag aan de slag als Fullstack .NET Developer? Lees dan snel verder! Want in januari/februari 2022 start de Experis Academy weer met een leerprogramma waarin IT-experts je opleiden tot developer met als specialisatie .NET. Dit allemaal met een salaris en een vooruitzicht op een baan bij een topwerkgever. ISLE51116 Locatie Rotterdam en omstreken Wat ga je doen tijdens het Fullstack .NET Developer ontwikkeltraject? Vanaf januari/februari 2022 krijg

Bekijk vacature »

.net/CRM Developer (Dynamics 365 CE) @ Rotterdam

2021-11-22 iSense .net/CRM Developer (Dynamics 365 CE) .net/CRM Developer ISHO51544-2 Organization Our client is located in the Rotterdam region and is an international organization that is involved in the processes surrounding food, pharmaceutical products and chemicals. In total you have about 1200 colleagues spread all over the world. In this position you work within a CRM team of 2 people, but the intention is that you contribute quickly to the growth of this team. There is a lot of collaboration in this team. You are therefore expected to be able to provide input yourself and to think along and talk

Bekijk vacature »

Junior .NET ontwikkelaar @ Utrecht e.o.

2021-11-18 iSense Junior .NET ontwikkelaar Klaar met je studie en ready om de arbeidsmarkt op te gaan als Fullstack .NET Developer? Mooi! Wij helpen jou graag om je opgedane theorie te verbreden en te kunnen inzetten in de praktijk. Met het Graduate Programma van de Experis Academy start jij je loopbaan met de meest up-to-date kennis en word je begeleid ook tijdens het werken bij de klant. Kan jij ook niet wachten tot 7 februari? ISLE51101 Locatie Utrecht e.o. Wat ga je doen tijdens dit opleidingstraject? Vanaf 7 februari 2022 krijg jij via de Experis Academy een unieke kans om

Bekijk vacature »

.NET Developer

Ben je op zoek naar een uitdagende functie als software developer in een informele en dynamische organisatie? Wil jij werken aan een cloud platform en heb je kennis van Microsoft Azure en/of C# (.NET)? Denk je in oplossingen in plaats van problemen en denk je altijd een stapje vooruit? Dan is dit echt iets voor jou! Functieomschrijving Als software ontwikkelaar ben je enthousiast, flexibel en leergierig en altijd gedreven om ervoor te zorgen dat je het beste resultaat bereikt. Je technische kennis helpt je om complexe problemen te vertalen naar eenvoudige oplossing. Je werkt in een klein team, waarbinnen je

Bekijk vacature »
Jeroen de wilde

Jeroen de wilde

10/08/2018 13:50:22
Quote Anchor link
Hoi,

Ik heb een login-form gemaakt deze werkt perfect.
Maar als ik een sql injectie test doe 'OR'1'='1 werkt de login gewoon.
als ik dan mysqli_real_escape_string gebruik dan werkt de login niet.
Hopelijk kunnen jullie me helpen.

Alvast dank

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
<?php
if (isset($_SESSION['loginId'] )){ // direct doorsturen als men ingelogd is ...
if ($_SESSION['regelment'] == "0") {
header("location: voorwaarden.php");
}
else{
header("location: dashboard.php");
}

}
else{
if (isset($_POST['login'])){
/************ select ******************/
//echo get_magic_quotes_gpc(); // zo kan je checken of magoc quotes aan of af ligt 0 = off - 1 = on
/*** SECURITY !! zorg dat magical quotes aanstaat in de php ini ***/


$login = htmlentities($_POST['login']);

/*md5 versleuteling, unieke string opp basis van een woord */
$paswoord = md5($_POST['paswoord']);

// Maak een query die login en paswoord zoekt
$query ="SELECT * FROM `leden` where `email` = '".$login ."' OR `login` = '".$login ."' AND `paswoord` = '".$paswoord."'";
// resultaat maken door query uit te voeren met onderstaand commando
$result = mysql_query($query) or trigger_error( mysql_error() );
// controle of login en paswoord correct zijn
if( mysql_num_rows( $result ) == 0 || empty($login) || empty($paswoord)){
$error = "Login en paswoord verkeerd!"; // geen records gevonden / login is leeg of paswoord is leeg ...
}else{
// maak een array met de gegevens
$rij = mysql_fetch_array($result);
// Maal session variabelen die blijven standaard 20 minuten bestaan
$_SESSION['loginId'] = $rij['id'];
$_SESSION['loginNaam'] = $rij['voornaam'];

header("location: dashboard.php"); // stuur door naar de overzicht pagina
}
}

?>
 
PHP hulp

PHP hulp

08/12/2021 16:17:54
 
Thomas van den Heuvel

Thomas van den Heuvel

10/08/2018 14:07:35
Quote Anchor link
Haakjes?
(A OR B) AND C
is iets compleet anders dan
A OR (B AND C)

get_magic_quotes() is er allang uit.
htmlentities() helpt niet bij beveiliging in queries - dit is escaping voor de HTML-context, niet voor een SQL-context.

Het makkelijkste is gewoon alle DATA die je invoegt in SQL te voorzien van quotes + een real_escape_string() functie, het een is niet veilig zonder het ander.

Daarbij hoort na een header('Location: ...') eigenlijk altijd een exit;.

En MD5 voor hashing van wachtwoorden is inmiddels ook achterhaald, gebruik password_hash() en password_verify().

Dus, ik weet niet waar je deze ouwe meuk vandaan hebt, maar het wordt waarschijnlijk tijd om wat kennis op te frissen over deze onderwerpen.
 
- Ariën -
Beheerder

- Ariën -

10/08/2018 14:09:16
Quote Anchor link
Als je mysqli_real_escape_string gebruikt moet je natuurlijk ook systematisch overal mysqli functies in PHP gebruiken.

Houd ook rekening dat md5() als hashing-algoritme voor je wachtwoorden niet meer veilig is. Gebruik liever bCrypt met password_hash() een een controle met password_verify().

Ook hoort er na een location-header een exit(). Je script moet ook stoppen.
Gewijzigd op 10/08/2018 16:16:18 door - Ariën -
 
Willem vp

Willem vp

10/08/2018 14:14:22
Quote Anchor link
> Maar als ik een sql injectie test doe 'OR'1'='1 werkt de login gewoon.

Dan werkt je formulier dus niet perfect. ;-)
Waar/waarop heb je de mysqli_real_escape_string gebruikt? Op $query (fout) of op $login en $password (goed)?

Ander dingetje: je query is sowieso niet goed.

SELECT * FROM leden where email = '$login' OR login = '$login' AND paswoord = '$paswoord'

AND precedeert boven OR, dus eigenlijk staat hier dit:

SELECT * FROM leden where email = '$login' OR (login = '$login' AND paswoord = '$paswoord')

Anders gezegd: als je een geldig email-adres opgeeft, kun je inloggen zonder dat je password wordt gecontroleerd.

Je bedoelt waarschijnlijk:

SELECT * FROM leden where (email = '$login' OR login = '$login') AND paswoord = '$paswoord'

En md5 gebruiken om je password te versleutelen: ík zou het niet durven... (hint: password:hash())
 
Jeroen de wilde

Jeroen de wilde

10/08/2018 16:01:19
Quote Anchor link
Bedankt allemaal voor de hulp en het advies.
Ik heb nu de onderstaande code

Enkel als ik de $login = htmlentities($_POST['login']); wijzig in $login = mysqli_real_escape_string($_POST['login']);

Dan werkt mijn login niet.

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
<?php
if (isset($_SESSION['loginId'] )){ // direct doorsturen als men ingelogd is ...
if ($_SESSION['regelment'] == "0") {
header("location: voorwaarden.php");
}
else{
header("location: dashboard.php");
}

}
else{
if (isset($_POST['login'])){
/************ select ******************/

$login = mysqli_real_escape_string($_POST['login']);

/*md5 versleuteling, unieke string opp basis van een woord */
$paswoord = hash($_POST['paswoord']);

// Maak een query die login en paswoord zoekt
$query =" SELECT * FROM leden where (email = '$login' OR login = '$login') AND paswoord = '$paswoord'";
// resultaat maken door query uit te voeren met onderstaand commando
$result = mysql_query($query) or trigger_error( mysql_error() );
// controle of login en paswoord correct zijn
if( mysql_num_rows( $result ) == 0 || empty($login) || empty($paswoord)){
$error = "Login en paswoord verkeerd!"; // geen records gevonden / login is leeg of paswoord is leeg ...
}else{
// maak een array met de gegevens
$rij = mysql_fetch_array($result);
// Maal session variabelen die blijven standaard 20 minuten bestaan
$_SESSION['loginId'] = $rij['id'];
$_SESSION['loginNaam'] = $rij['voornaam'];

header("location: dashboard.php"); // stuur door naar de overzicht pagina
}
}

?>
 
- Ariën -
Beheerder

- Ariën -

10/08/2018 16:09:06
Quote Anchor link
Lees even de reactie nog goed door, merendeel heb je niet of fout toegepast.
Zo is hash geen bestaande PHP-functie, en gebruik je nog de verouderde MySQL-functies in plaats van MySQLi.
En nog een aantal dingen hier in dit topic genoemd zijn.

NB: Het is 'wachtwoord' of 'password', maar geen 'paswoord' ;-)
Gewijzigd op 10/08/2018 16:15:08 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

10/08/2018 16:27:45
Quote Anchor link
Dit wordt ondertussen mijn favoriete aangehaalde passage: header('Location: ...') transporteert je NIET (meteen) automagisch naar de nieuwe locatie (interne link).

Dit kan serieuze veiligheidslekken introduceren. Daarom is het handiger om hier een functie van te maken die meteen alles regelt, zoals ook in die reactie staat uitgelegd.
 
Jeroen de wilde

Jeroen de wilde

10/08/2018 17:50:15
Quote Anchor link
Bedankt,

Ik vervang alles naar mysqli en ik gebruik de functie voor de headers.
Wat zou ik nog moeten toepassen bij $login = htmlentities($_POST['login']);

Nogmaals dank voor de hulp
 
- Ariën -
Beheerder

- Ariën -

10/08/2018 18:07:55
Quote Anchor link
mysqli_real_escape_string natuurlijk gebruiken. Je wilt niet dat iemand met een SQL-injection je database leegtrekt. Lees wel de manual even door van alle mysqli-functies. Want het is vaak niet enkel een 'i' toevoegen, maar in sommige gevallen moet je verwijzen naar je connectie.

Of je moet de object georiënteerde versie gebruiken, welke ik eigenlijk aanraad. Die kan je makkelijker uitbouwen met eigen functies, als je wilt.
Gewijzigd op 10/08/2018 18:14:27 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

10/08/2018 19:51:59
Quote Anchor link
Bepaalde karakters of bepaalde karakterreeksen kunnen in een bepaalde context (in een HTML-document, een SQL-query, in JavaScript, een XML-document et cetera) een speciale betekenis hebben die de werking van zo'n stuk functionaliteit kan manipuleren. Soms op een zodanige wijze dat de werking een ongewenst of zelfs schadelijk effect heeft. Zo'n inbraak op de werking wordt doorgaans ook wel een injectie genoemd.

Een van de bekendere hacks in systemen is de SQL-injectie, waarbij de werking van een query zodanig wordt gemanipuleerd dat het effect van de query rampzalige gevolgen kan hebben voor de administratie of veiligheid (of beide) in een systeem. Een query die verantwoordelijk is voor het inloggen van leden tot een systeem dient dus 100% waterdicht te zijn voor dit soort onzin. Anders bestaat de kans dat het beveiligingsmechanisme wat ervoor moet zorgen om ongewenste individuen buiten te houden volledig omzeild wordt. En je query moet natuurlijk van zichzelf goed in elkaar zitten, als dit niet het geval is gaat fatsoenlijke escaping je niet redden.

Gelukkig zijn daar (contextspecifieke) escaping-functies, die tot doel hebben specifieke speciale karakters of -reeksen binnen een specifieke context onschadelijk te maken. Zo is er voor (My)SQL real_escape_string(), en voor HTML bijvoorbeeld htmlspecialchars() (die eigenlijk de voorkeur verdient boven htmlentities()).

Een functie gebruiken voor een context waarvoor deze niet bedoeld is heeft echter geen enkele zin. htmlentities() is dan ook ongeschikt voor gebruik in een query. Hiervoor gebruik je (enkele) quotes in combinatie met real_escape_string(). Het een is niet veilig zonder het ander.

En dan is er nog een bijkomende aangelegenheid: character encoderingen. Alle tekst die je ooit ergens ziet in code, documenten of op het scherm heeft een character encoding. Heel kort door de bocht is dit de vertaling van specifieke bitreeksen (nullen en enen) naar de symbolen (letters en cijfers) die deze representeren in een bepaalde character encoding.

Omdat alles een character encoding heeft, dien je er dus ook voor te zorgen dat deze in de pas lopen. Door al je "tekst" gelijk te schakelen ban je namelijk problemen uit die (waarschijnlijk onbewust) ontstaan door (automatische) vertalingen hiertussen als deze van elkaar zouden afwijken. Zo heb je bijvoorbeeld:
- de character encoding waarmee PHP-, HTML- etc. bestanden worden opgeslagen
- de character encoding die wordt meegegeven in de header() of meta-tags voor je HTML-document
- de character encoding die wordt gebruikt bij het maken van een verbinding met je database (via set_charset())
- de character encoding van de database, de tabellen en wellicht de individuele kolommen

En dit is zeker relevant voor escaping want escaping-functionaliteit is (naast het feit dat deze altijd bedoeld is voor een specifieke context) sterk afhankelijk van de character encoding.

Van al deze onderwerpen dien je wat kaas gegeten te hebben voordat je uberhaupt overweegt om een loginsysteem in elkaar te flansen zetten.
 
Jeroen de wilde

Jeroen de wilde

11/08/2018 15:37:50
Quote Anchor link
Super bedankt voor de hulp en informatie
 



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.