SQL, XSS Injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Low Code Developer - Consultant

Functie omschrijving Wil jij fungeren als een spin in het web en samenwerken met klanten? Voor een leuke en interessante opdrachtgever in omgeving Leiden zijn wij op zoek naar een Low Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten en het leiden van projecten. Ben jij toe aan een nieuwe uitdaging en heb jij verstand van datamodellering en NO CODE Platformen? Lees dan snel verder! Bij deze rol horen de volgende werkzaamheden: Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform,

Bekijk vacature »

Senior Organisatieontwikkelaar

Als Organisatieontwikkelaar zorg je ervoor dat we in het magazijn van Coolblue altijd vooruit voetballen op het gebied Medewerker en Organisatie Ontwikkeling. Zo draag je bij aan een toekomstbestendig magazijn waar we klanten én medewerkers elke dag blijven verwonderen. Wat doe je als Senior Organisatieontwikkelaar bij Coolblue? Als Organisatieontwikkelaar werk je voor het magazijn van Coolblue. Je krijgt er energie van om continue te bouwen aan een toekomstbestendige organisatie. Dat doe je samen met 17 collega's in het HR-team, ieder met een eigen specialisme. Je werkt graag zelfstandig en je weet snel je weg te vinden als verandermanager. Ook ben

Bekijk vacature »

Freelance Fullstack Java Developer

Functieomschrijving Voor een opdrachtgever in omgeving Rotterdam zijn wij op zoek naar ervaren Fullstack JAVA Developers die graag op projectbasis willen werken. Je komt terecht bij een informele developers club die mooie projecten uitvoeren voor grote klanten. Ben je een ervaren freelancer of werk je in loondienst en ben je toe aan een nieuwe uitdaging? Lees dan snel verder want wie weet is dit een leuke vacature voor jou! Het fijne van deze werkgever is dat je zelf mag beslissen hoe je te werk wilt gaan. Wil je als freelancer werken dan is dat OK. Wil je de zekerheid hebben

Bekijk vacature »

Java Developer / Sociaal domein

Dit ga je doen Nieuwbouw en doorontwikkeling; Beheer en wanneer nodig onderhoud; Bijdrage leveren in het functioneel- en technisch ontwerptraject; Analyseren van productie verstoringen; Meedenken over vernieuwingen en verbeteringen. Hier ga je werken De organisatie waar jij komt te werken focust zich op software development met een maatschappelijk tintje. De afdeling software ontwikkeling bestaat uit vijf verschillende scrum teams, met allen hun eigen focus gebied. Zo zijn er een aantal teams die zich focussen op specifieke applicaties, maar is er ook een team gericht op projecten. Binnen de organisatie staat innovatie en kwaliteit voorop. Een aantal applicaties draait nog op

Bekijk vacature »

.NET Developer

Dit ga je doen Programmeren in .NET, Javascript & C# en ontwikkelen in Web Services, Windows Services en MS SQL Server; Zelfstandig verbanden maken Analyseren, testen, bugs fixen, reviewen en rapporteren; Juiste prioriteiten stellen en verantwoordelijkheid nemen; Op architectuur niveau meedenken; Af en toe klanten bezoeken. Hier ga je werken Voor onze relatie zijn wij opzoek naar een .NET ontwikkelaar met minimaal 3 jaar werkervaring. Je komt te werken in een groeiend bedrijf met betrokken collega's die zorgen voor een familiaire sfeer op de werkvloer. Als .NET ontwikkelaar word jij vanaf de eerste werkdag betrokken bij het gehele ontwikkelproces. De

Bekijk vacature »

Senior PHP developer

Functie Als Senior PHP developer heb je een sterke mening over de architectuur van projecten en de processen binnen het team. Je bent de sparringpartner voor je Team Lead. Ook ondersteun je met jouw kennis de minder ervaren developers in jouw team. Ze werken regelmatig aan projecten vanaf scratch en dit geeft ruimte om voor nieuwe technieken te kiezen. Naast het ontwikkelen van software ben je continue bezig om ook jezelf te ontwikkelen. Ze werken met o.a.: PHP, Laravel, Doctrine, PHP Unit, Behat, React, TypeScript, (My)SQL, Postgress, Redis, ElasticSearch, Docker, Nginx, GIT flow, JIRA, AWS. Eisen • HBO werk- en

Bekijk vacature »

Senior Front-End Developer

As a Senior Front-end Developer you maintain the balance between creativity and functionality for our webshop, and you coach your fellow developers. How do I become a Senior Front-End Developer at Coolblue? As a Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present this within the team. You are also proud of your work and welcome all feedback. Would you also like to become a Senior Front-End Developer at Coolblue?

Bekijk vacature »

PHP Developer - medior functie

Functieomschrijving Ben jij innovatief en wil jij je kennis graag delen met jouw nieuwe collega's? Lees dan snel verder! Voor een leuke opdrachtgever in de omgeving van Roosendaal zoeken wij een Symfony developer. Of je nou junior, medior of senior bent, je krijgt hier alle vrijheid en verantwoordelijkheid om jouw eigen loopbaan te ontwikkelen. Je gaat je hier bezig houden met en inspelen op de actualiteiten van jouw vakgebied. Techstack: Symfony, PHP, mySQL. Kennis van Svelte is helemaal mooi meegenomen. Bedrijfsprofiel Al sinds '99 is dit webbureau actief. De kernwaarden binnen het bedrijf zijn integer, dienstbaar en deskundig. Je komt

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 »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Rotterdam! 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! Binnen deze rol houdt jij je met het volgende bezig: 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

Bekijk vacature »

Node.js developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

.NET developer

Functie Voor jou als junior .NET ontwikkelaar staat er een flinke uitdaging klaar bij dit bedrijf waar jij veel van kan gaan leren. Zo willen zij een flinke uitbreiding doen op het webbased gedeelte dat zij nu hebben en willen zij het standaard deel gaan moderniseren. Jouw team is dan ook op zoek naar een junior .NET ontwikkelaar die het leuk vindt om op basis van research en development aan de slag te gaan. Jouw mening telt mee als het gaat om hoe en met wat deze applicaties gebouwd en herschreven gaan worden. Jouw functie bij dit bedrijf gaat dan

Bekijk vacature »

.NET developer

Functie Als junior .NET ontwikkelaar ga jij aan de slag in één van de 5 IT teams van dit bedrijf. Jullie werken op basis van interne klantprojecten aan voornamelijk webapplicaties. Dit betekent dat jij continu uitgedaagd wordt en veelal met verschillende soorten projecten bezig bent. Het gave is dan ook dat jullie als team samen bekijken welke technieken het beste passen bij het project waar jullie verantwoordelijk voor zijn. Zo kan het zijn dat jij als .NET developer gaat werken aan een project, maar dat jullie als team liever gebruik maken van Haskell of F# om de klus te klaren.

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met 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 (denk aan ECT) 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

Bekijk vacature »

Junior Fullstack Developer

Functie omschrijving Heb jij je universitair diploma Informatica afgerond en ben jij op zoek naar een startersfunctie waar jouw ontwikkeling in een hoog vaandel staat? Voor een softwarebedrijf in Amsterdam zijn wij op zoek naar een Junior Fullstack Developer. Je begint met een op maat gemaakte training om de kennis bij te spijkeren die jij nog mist. Uiteraard leer je het meeste tijdens je werk, maar de training geeft je hiervoor alvast de juiste handvatten. Je kunt het volgende verwachten! Jij ontwikkelt in technieken als Java, Javascript en SQL. Je werkt hierbij volgens de Agile/Scrum methode; Na het afronden van

Bekijk vacature »

Pagina: 1 2 volgende »

John De Zon

John De Zon

04/09/2015 14:53:18
Quote Anchor link
Hallo,

ik ben bezig met een registratie script voor m'n website. Ik heb me voorgenomen de beveiliging zo goed als ik kan te maken vanaf het begin.
Is dit script veilig? En waarom geeft mysql_real_escape_string niets terug?

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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $fname = @$_POST['fname'];
    $lname = @$_POST['lname'];
    $uname = @$_POST['uname'];
    $email = @$_POST['email'];
    $password = @$_POST['password'];
    $checkbox = @$_POST['checkbox'];


    $errors = array();

    if(trim($fname)=='') {
        $errors[] = 'U moet uw voornaam invullen';
    }


    if(trim($lname)=='') {
        $errors[] = 'U moet uw achternaam invullen';
    }


    if(trim($uname)=='') {
        $errors[] = 'U moet uw gebruikersnaam invullen';
    }


    if(trim($email)=='') {
        $errors[] = 'U moet uw email invullen';
    }

    
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        
    }
else {
        $errors[] = 'U moet een geldig emailadres invullen';
    }


    if(trim($password)=='') {
        $errors[] = 'U moet uw wachtwoord invullen';
    }
else {
        $password = password_hash($password, PASSWORD_DEFAULT);
    }

    
    if(!isset($checkbox)) {
        $errors[] = 'U moet de richtlijnen accepteren';
    }

    
    if ($errors==true) {
        $err = true;
    }
else {
        $sql = "INSERT INTO users (
        id, fname, lname, uname, email, password
        ) VALUES (
        '', '"
. mysqli_real_escape_string($connection, $fname) . "', '" . mysqli_real_escape_string($connection, $lname) . "', '" . mysqli_real_escape_string($connection, $uname) . "', '" . mysqli_real_escape_string($connection, $email) . "', '" . mysqli_real_escape_string($connection, $password) . "'
        )"
;
        if(mysqli_query($connection, $sql)) {
            echo 'Succes!';
        }
else {
            echo "Error: " . $sql . "<br>" . mysqli_error($connection);
        }
    }
}

?>


Alvast bedankt!!!

Mvg
Gewijzigd op 05/09/2015 18:38:54 door John De Zon
 
PHP hulp

PHP hulp

19/05/2024 17:07:12
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 14:56:04
Quote Anchor link
Als je error_reporting op E_ALL en display_errors op 1 zou zetten, dan zou je zien dat er een parameter voor de connectie ontbreekt bij mysqli_real_escape_string.

Zo moet het wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysqli_real_escape_string($con, $fname);
?>


Verder raad ik aan om even per veld te kijken hoe je het valideert. Want ik heb het idee dat je lukraak gewoon wat regels aan het kopiëren bent. Want je kan prima kijken naar de juiste waarde die er nodig is.

Voor mailadressen is er filter_var('[email protected]', FILTER_VALIDATE_EMAIL);
Voor je checkbox zullen mogelijk vaste waardes zijn, zoals 1 of 0
En voor passwoorden hoe je niet op XSS te controleren. Die worden toch altijd gehashed.
Gewijzigd op 04/09/2015 15:00:35 door - Ariën -
 
John De Zon

John De Zon

04/09/2015 15:01:05
Quote Anchor link
Dank je, Aar voor de snelle reactie!
Is deze code veilig? Welke extra beveiliging moet ik er nog aan toevoegen om echt veilig te zijn?
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 15:02:48
Quote Anchor link
Zoals ik al zei: Valideer de waardes gewoon met de juiste methodes.
Gewijzigd op 04/09/2015 15:04:03 door - Ariën -
 
John De Zon

John De Zon

04/09/2015 15:03:44
Quote Anchor link
Had het einde van je vorige post niet gezien sorry!
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 15:04:16
Quote Anchor link
Ok.. ;-)


En empty() is overigens ook een vreemde controle die meer toestaan dan je hoopt.
Ik gebruik altijd:

if(trim($var)=='') {
 
Thomas van den Heuvel

Thomas van den Heuvel

04/09/2015 15:15:16
Quote Anchor link
Ik zie nergens character encoding aanduidingen.

Escaping (htmlspecialchars, mysqli_real_escape_string) werkt alleen goed wanneer je met de juiste character encoderingen aan de gang gaat:
(- in de opslag van je code-documenten, maar dit zorgt niet vaak voor problemen)
- in je HTML document
- in je database-connectie
- in je database tabellen

Verder:
Je bent daar INPUT aan het escapen middels (strip_tags, htmlspecialchars).

Waarom doe je dit? Dit wordt niet als een goede bezigheid beschouwd - je past daarmee al op voorhand je rauwe input aan. Dat is nergens voor nodig. Daarnaast escape je deze voor de HTML-context, terwijl je deze data daarna invoegt (en opnieuw escaped) in een SQL-context (met behulp van _real_escape_string).

Nog veel belangrijker dan wat je doet is dat je begrijpt wat je doet.

De algemene stelregel is nog steeds filter input, escape output.

Wat in het bovenstaande script ontbreekt is fatsoenlijke input filtering. Er vanuitgaande dat dit een soort van gebruikers registratie systeem is zou je aan de volgende input filtering kunnen denken:

- als alle invoer verplicht is, kijk of de getrimde variant van de invoer niet leeg is
- als je beperkingen wilt opleggen aan het uiterlijk van een gebruikersnaam, maak dan gebruik van een whitelist (geef aan wat is toegestaan) in plaats van een blacklist (door tags te strippen) en dan maar te hopen dat het resultaat iets is wat niet voor problemen zorgt; het grote nadeel van een blacklist is dat als je een geval vergeet dit geval wordt doorgelaten; daarom is een whitelist meestal beter: je definieert precies wat is toegestaan
- gebruik filter_var voor het e-mailadres en check voor een MX record, of nog beter, stuur gewoon een activatiemail naar het bewuste adres

Haal ook die @ weg en ontwikkel met error_reporting en display_errors aan.

Maak een database-wrapper voor mysqli-functies, zodat je in plaats van mysqli_real_escape_string($connection, $field) een kortere variant kunt gebruiken ($db->escape($field) ofzo) en ook andere zaken makkelijk kunt automatiseren.
Gewijzigd op 04/09/2015 15:17:21 door Thomas van den Heuvel
 
John De Zon

John De Zon

04/09/2015 18:28:37
Quote Anchor link
Hoe kan ik een whitelist opzetten? Heb al een deel van de code gewijzigd.
 
Johan K

Johan K

04/09/2015 18:48:46
Quote Anchor link
Thomas van den Heuvel op 04/09/2015 15:15:16:
- als alle invoer verplicht is, kijk of de getrimde variant van de invoer niet leeg is

Trimmen is niet slim op een wachtwoord veld. Het is een extra karakter die mensen kunnen gebruiken in hun wachtwoord.

Thomas van den Heuvel op 04/09/2015 15:15:16:
- als je beperkingen wilt opleggen aan het uiterlijk van een gebruikersnaam, maak dan gebruik van een whitelist (geef aan wat is toegestaan) in plaats van een blacklist (door tags te strippen) en dan maar te hopen dat het resultaat iets is wat niet voor problemen zorgt; het grote nadeel van een blacklist is dat als je een geval vergeet dit geval wordt doorgelaten; daarom is een whitelist meestal beter: je definieert precies wat is toegestaan

???
Een simpele regex is voldoende -> http://bfy.tw/1daY

Thomas van den Heuvel op 04/09/2015 15:15:16:
Maak een database-wrapper voor mysqli-functies, zodat je in plaats van mysqli_real_escape_string($connection, $field) een kortere variant kunt gebruiken ($db->escape($field) ofzo) en ook andere zaken makkelijk kunt automatiseren.

Als er een classe word gemaakt zou het "escapen" eigenlijk automatisch moeten gaan.
Gewijzigd op 04/09/2015 18:51:54 door Johan K
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 18:49:18
Quote Anchor link
Een reguliere expressie van tekens die mogen.
 
John De Zon

John De Zon

04/09/2015 18:53:40
Quote Anchor link
- Aar - op 04/09/2015 18:49:18:
Een reguliere expressie van tekens die mogen.


?? En hoe maak ik dat? Ik heb geen idee hoe ik daaraan zou moeten beginnen....

Alvast bedankt voor de snelle reacties!
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 19:05:10
Quote Anchor link
Bedankt eerst welke karakters te wilt toestaan. Wel of geen spaties, en mogen er ook cijfers?

Een voorbeeld is:
"[A-Za-z_0-9]"

Met preg_match() kan je controleren of een waarde aan deze voorwaarde voldoet.
Gewijzigd op 04/09/2015 19:07:24 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

04/09/2015 19:45:32
Quote Anchor link
Johan K op 04/09/2015 18:48:46:
Trimmen is niet slim op een wachtwoord veld. Het is een extra karakter die mensen kunnen gebruiken in hun wachtwoord.

Ik zeg nergens dat dat de enige controle zou moeten zijn of dat je dit altijd en overal blind zou moeten toepassen. Je moet per veld bepalen wat nodig is. Als een veld verplicht is, is het controleren of deze "leeg" is een minimale controle. Ik zeg dat je de getrimde variant moet vergelijken met een lege string, NIET dat je de invoer moet AANPASSEN naar de getrimde variant.

Johan K op 04/09/2015 18:48:46:
Een simpele regex is voldoende

Hoe is een regex geen whitelist?

Johan K op 04/09/2015 18:48:46:
Als er een classe word gemaakt zou het "escapen" eigenlijk automatisch moeten gaan.

Nee, niet automatisch nee. Tenzij je een prepared statements laag aan het bouwen bent, in welk geval je beter van PDO gebruik kunt maken (die van MySQLi is brak). Naar mijn mening moet je dit soort dingen niet automatiseren omdat er dan geen bewustzijn meer is.

Daarnaast wil je soms nog steeds de keuze hebben om op bepaalde plaatsen rauwe data te gebruiken, je wilt dan niet hebben dat deze data automatisch ge-escaped wordt. Je wilt niet dat je klasse je op voorhand beperkt in je handelen.

@Aar, je wilt de hele string controleren dit doe je met ^...expressie...$. Daarnaast heb je de de /i modifier die een case-insensitive match doet. Hierbij moet je ook niet vergeten dat $ ook één newline karakter (\n) accepteert wat vaak vergeten wordt en dat de return-waarde van preg_match gelijk moet zijn aan 1.

Een match voor een (niet-lege) string die enkel uit alfanumerieke karakters zou bestaan wordt dus zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$input
= 'lala123';
if (preg_match('#^[a-z0-9]+$#i', $input) == 1) {
    echo 'input bestaat enkel uit alfanumerieke karakters';
    // en voor de goede orde zou je $input hier nog moeten trimmen!
} else {
    echo 'input bestaat NIET enkel uit alfanumerieke karakters of is leeg';
}

?>

Zelf ook ff testen natuurlijk...

Met accolades zou je nog een minimale/maximale lengte aan kunnen geven.
{exacte_lengte}
{minimale_lengte,}
{mininmale_lengte, maximale_lengte}
Gewijzigd op 04/09/2015 23:45:53 door Thomas van den Heuvel
 
John De Zon

John De Zon

04/09/2015 22:31:49
Quote Anchor link
Ik gebruik nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    if (preg_match('#^[a-z0-9]+#i', $fname) != 1) {
        $errors[] = 'Fout!';
    }

?>

Maar dit staat wel toe dat ik bv. Jan-" ingeef.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/09/2015 23:47:16
Quote Anchor link
Ah, $ vergeten, zie bovenstaande edit.

Je had dit ook met enige moeite al af kunnen leiden uit mijn vorige post:

Hele string matchen is ^...expressie...$
Gewijzigd op 04/09/2015 23:49:26 door Thomas van den Heuvel
 
Johan K

Johan K

05/09/2015 11:18:56
Quote Anchor link
Thomas van den Heuvel op 04/09/2015 19:45:32:
Ik zeg nergens dat dat de enige controle zou moeten zijn of dat je dit altijd en overal blind zou moeten toepassen. Je moet per veld bepalen wat nodig is. Als een veld verplicht is, is het controleren of deze "leeg" is een minimale controle. Ik zeg dat je de getrimde variant moet vergelijken met een lege string, NIET dat je de invoer moet AANPASSEN naar de getrimde variant.

Ik vergelijk niets met een lege string, hou het gewoon lekker simpel en voer direct de regex uit op velden waar nodig is zoals een username & password. Op andere velden zoals checkbox of optionele velden voldoet empty().

Thomas van den Heuvel op 04/09/2015 19:45:32:
Hoe is een regex geen whitelist?

Is het ook, maar je maakt het moeilijker dan dat het is.

Thomas van den Heuvel op 04/09/2015 19:45:32:
Nee, niet automatisch nee. Tenzij je een prepared statements laag aan het bouwen bent, in welk geval je beter van PDO gebruik kunt maken (die van MySQLi is brak). Naar mijn mening moet je dit soort dingen niet automatiseren omdat er dan geen bewustzijn meer is.

Daarnaast wil je soms nog steeds de keuze hebben om op bepaalde plaatsen rauwe data te gebruiken, je wilt dan niet hebben dat deze data automatisch ge-escaped wordt. Je wilt niet dat je klasse je op voorhand beperkt in je handelen.

PDO bindParam / bindValue escaped alles als string tenzij anders is doorgegeven of je wilt je zelf open stellen om user input direct in je sql te gebruiken.


Voor mijn username validatie gebruik ik deze:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
function validateUsername($name){
  return preg_match('/^[A-z0-9_-]{3,16}$/', $name);
}
 echo validateUsername('FooBar_09') ? 'true' : 'false'; // true;


Dit houd in dat alfabetische, numerieke en _ en - karakters mogen, de rest niet.
 
DavY -

DavY -

05/09/2015 11:40:45
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
function validateUsername($name){
  return filter_var($name, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => "/^[A-z0-9_-]{3,16}$/")));
}

?>


Nadeel hieraan is dat je de gebruiker niet laat weten, als ie:

- zijn naam te kort heeft ingevuld
- zijn naam te lang heeft ingevuld
- zijn naam illegale karakters bevat
Gewijzigd op 05/09/2015 11:41:05 door DavY -
 
Thomas van den Heuvel

Thomas van den Heuvel

05/09/2015 11:52:04
Quote Anchor link
Johan K op 05/09/2015 11:18:56:
Ik vergelijk niets met een lege string, hou het gewoon lekker simpel en voer direct de regex uit op velden waar nodig is zoals een username & password. Op andere velden zoals checkbox of optionele velden voldoet empty().

Ik heb het ook niet over wat jij doet, ik voelde mij genoodzaakt op opnieuw/beter toe te lichten wat ik bedoelde, omdat het antwoord wat jij gaf mij deed denken dat ik invoer aan het aanpassen (trimmen) was...

Johan K op 05/09/2015 11:18:56:
Is het ook, maar je maakt het moeilijker dan dat het is.

Daarom zeg ik ook dat je per veld moet bepalen wat nodig is...

Johan K op 05/09/2015 11:18:56:
PDO bindParam / bindValue escaped alles als string tenzij anders is doorgegeven

Oh really, zet querylogging eens aan en kijk wat PDO daadwerkelijk doet. 9 van de 10 keer negeert deze gewoon typehints en zet om alle DATA quotes heen (in de uiteindelijke query). But hey, don't take my word for it.

Johan K op 05/09/2015 11:18:56:
of je wilt je zelf open stellen om user input direct in je sql te gebruiken.

Dat lijkt mij duidelijk niet de bedoeling. Maar goed, het kan zijn dat jij nooit rauwe SQL passages nodig hebt gehad in je query en hier dus nog nooit tegenaan bent gelopen.

Johan K op 05/09/2015 11:18:56:
Voor mijn username validatie gebruik ik deze:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
function validateUsername($name){
  return preg_match('/^[A-z0-9_-]{3,16}$/', $name);
}
 echo validateUsername('FooBar_09') ? 'true' : 'false'; // true;


Dit houd in dat alfabetische, numerieke en _ en - karakters mogen, de rest niet.


Lees de handleiding van preg_match() eens, hier staat:
Quote:
preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.

Als je je return-value van je functie als boolean wilt behandelen/gebruiken, vergelijk dan met het cijfer 1.

Daarnaast accepteert jouw functie ook de volgende waarde:
"1234567890123456\n"

Yup. 17 karakters. En een linebreak. De volgende keer dat jij een csv-export van je users maakt dan breekt deze misschien wel.


Lukraak reageren op wat iemand zegt is makkelijk.

Proberen te begrijpen en te doorgronden wat iemand bedoelt is aanzienlijk moeilijker.
 
Ozzie PHP

Ozzie PHP

05/09/2015 14:48:45
Quote Anchor link
>> Een match voor een (niet-lege) string die enkel uit alfanumerieke karakters zou bestaan wordt dus zoiets:

Waarom niet gewoon zo?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$input
= 'abc123';
if (ctype_alnum($input)) {
    echo 'oke';
}
else {
    echo 'niet oke of leeg';
}
 
John De Zon

John De Zon

05/09/2015 18:44:07
Quote Anchor link
Ik heb het script geüpdatet. Ik denk dat ik zowat alle tips heb gebruikt...
Dat van die whitelist ga ik niet meer doen omdat ik het nut er niet meer kan inzien. Dank voor het uitleggen van de Whitelist ik zal dit zeker meenemen.
Is het script veilig? Zijn er eventueel nog dingen die beter moeten?
 
Eddy E

Eddy E

05/09/2015 19:20:15
Quote Anchor link
Even tussendoor: weet je hoe vervelend het is als je een wachtwoord intypt op je telefoon en dat die dan automatisch een spatie erachter zet en daardoor dus niet geldig is ?

Een rtrim($iets) zou echt handig zijn.
Ook bij emailadressen: mijn emailadres staat in mijn woordenboek (Swiftkey), dus als ik maar 4 letters type, dan vult hij het aan. Met een spatie. Nu moet ik die altijd verwijderen (heel vervelend) omdat het anders verkeerd kan gaan.
Trouwens: facebook bijvoorbeeld niet. Als je daar je emailadres invult bij het inloggen MET een spatie, dan haalt ie die spatie weg.
Waarschijnlijk kijkt hij eerst of je rauwe input bestaat. Zo niet: is een rtrim() anders dan de rauwe input? Zo ja: probeer het eens met rtrim() erover..
 

Pagina: 1 2 volgende »



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.