Mijn login veilig maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end Developer

Dit ga je doen Je komt in een DevOps-cultuur te werken waarbij je met je team werkt aan de front-end van diverse brand websites; Het ontwerpen van functionele en grafische ontwerpen die worden geïmplementeerd; Draagt zorg voor het maken van analyses; Je werkt nauw met je collega’s samen en geeft elkaar feedback en suggesties waar nodig; Het uitwerken van vraagstukken die afkomstig zijn van verschillende klanten; Hier ga je werken Deze marktleider op gebied van fietsen en fietservaring is gevestigd in twee provincies, verspreid over meerdere locaties. Jij zult voornamelijk in regio Joure aan de slag gaan. De organisatie doelt

Bekijk vacature »

Back End Developer

As a Back End developer at KUBUS you will be developing the (web) application and services of BIMcollab. You have a focus on the back end of our software, for which we mainly work with C# and .NET. We use a full-stack approach, which means that in addition to the back-end, you will also help with other parts of the code. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact

Bekijk vacature »

Back-end Developer

Functie omschrijving Als Back-end Developer heb je de eer om als eerste interne developer bij deze organisatie te beginnen. Op dit moment zijn er externe developers, maar daar wil de organisatie verandering in brengen. Op termijn moet de gehele afdeling uit intern personeel bestaan. Je kan je voorstellen dat de eerste interne developer ook de nodige kennis mee moet brengen. Dat klopt. Je gaat je namelijk aan het begin bekommeren over de externe developers en uiteindelijk over je interne collega's. Verder ga je het volgende doen: Het bedenken, beheren en onderhouden van webportalen, API-koppelingen en applicaties; Je bedenkt en werkt

Bekijk vacature »

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. 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 binnen als

Bekijk vacature »

Medior Mobile Developer iOS Amsterdam

Functie What will you be doing as Mobile Developer? As an iOS app developer you will work in a multidisciplinary team of app developers, web developers and designers. You will work on world-class apps that will be used by thousands of people. There is a lot of room for self-development on a technical and personal level. Together with the rest of the team you develop in the newest techniques and you go for the best quality. We work with Kotlin Multiplatform Mobile to develop hybrid apps and we guarantee quality with peer reviews, unit testing and we use a CI/CD.

Bekijk vacature »

Junior PHP (Laravel) Developer

Functie omschrijving Wij zijn op zoek naar een PHP Laravel Developer! Sta je aan het begin van je carrière en ben je op zoek naar een leuke baan? Lees dan verder! Voor een softwarebedrijf in omgeving van Schiphol zijn wij op zoek naar een ervaren PHP (Laravel) Developer. Je gaat je bezighouden met het ontwikkelen van innovatieve bedrijfsapplicaties. Samen met het team, bestaande uit designers en developers, maak je mooie oplossingen voor bedrijven in diverse branches. Je zorgt dat de opgeleverde websites perfect werken en de klant meer dan tevreden is. Je kunt rekenen op een afwisselende baan met leuke

Bekijk vacature »

Full Stack C#.NET developer

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Testen en valideren van de ontwikkelde software. Actief deelnemen aan code reviews en bijdragen aan het verbeteren van de kwaliteit van de software. Je gaat aan

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 »

Software Developer C# - Deventer

Software Developer C# – Deventer Bijdragen aan de toekomst van het onderwijs! Ben jij op zoek naar een dynamische omgeving waar vol enthousiasme wordt gewerkt aan software voor interactieve dashboard- en analysetoepassingen ter verbetering van het onderwijs? Dan zijn wij het bedrijf voor jou! TIG is een bedrijf met een informele en ondernemende werksfeer, waarbij goede ideeën snel leiden tot concrete acties. Wij zijn een software ontwikkelorganisatie en focussen ons op het ontwikkelen en implementeren van oplossingen voor het leveren van managementinformatie, datavisualisatie en analyses voor het onderwijs. Met onze dashboard- en analyseoplossingen zetten scholen gegevens om naar betekenisvolle informatie.

Bekijk vacature »

Lead Fullstack developer

Functie omschrijving Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Wij zijn op zoek naar een full stack developer die zich bezig wil bezig houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator door middel van

Bekijk vacature »

Front end developer

Functie Jij als ervaren Front end developer bent een expert het gebied van Javascript en React. Je wordt onderdeel van een multidisciplinair team bestaande uit een PO, twee Front end developers, een DevOps/Back end developer, een UX/UI designer en een projectmanager. Verder is er iemand verantwoordelijk voor de HR en is de algemeen directeur nauw betrokken bij alle projecten. Dagelijks hou jij je bezig met de verschillende projecten die zijn opgenomen in de sprint. Daarnaast denk je mee over mogelijke oplossingen om de behoefte van de klant op de beste manier in te vullen. Verder spar jij intern met collega’s

Bekijk vacature »

Cloud Developer

Cloud Developers opgelet! Bij Luminis zijn ze opzoek naar jou. Lees de vacature en solliciteer direct. Luminis is een software- en technologiebedrijf met meerdere vestigingen. Vanuit deze vestigingen werken 200 professionals aan technisch hoogwaardige oplossingen voor klanten zoals KLM, Nike en Bol.com. Ook ontwikkelt Luminis eigen oplossingen op het gebied van cloud, Internet of Things, data intelligence, e-sports en e-learning. Luminis onderscheidt zich door aantoonbaar voorop te lopen in technologie en innovatie. Luminis heeft drie kernpunten die verankerd zitten in alles wat we doen: het omarmen van nieuwe technologie, meesterschap en kennis delen. Functiebeschrijving First things first! Het is belangrijk

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar start jij in een multidisciplinair team met 7 ontwikkelaars. Dit team is verdeeld onder Front-end ontwikkelaars en backend developers. De backend developers werken voornamelijk aan desktop applicaties in combinatie met backend systemen. Hier ga jij dus ook mee aan de slag! Hierbij wordt voornamelijk gebruik gemaakt van C# .NET, WPF, UWP, XAML en MVVM. WPF, UWP, .NET Core, Azure Devops en Entity Framework. WPF en UWP worden dan ook voornamelijk gebruikt voor de user interface van de desktop applicatie. Het development team is dan ook erg gedreven m.b.t. het ontwikkelen van vooruitstrevende en innovatieve horeca automatiseringsoplossingen.

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 »

Technisch Applicatie ontwikkelaar

Functie omschrijving 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! In deze functie werk jij voornamelijk aan: Het onderhouden en ontwikkelen van de IT systemen; Het opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werk je aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkel en implementeren je MS PowerApps en Power BI. Bedrijfsprofiel Je komt terecht bij een familiair

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

28/03/2024 09:44:01
 
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.