SQL, XSS Injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C#.NET Developer Jr. Functie

Functie omschrijving Bouw jij graag aan applicaties om processen in distributiecentra te optimaliseren? Wij zijn op zoek naar een C#.NET ontwikkelaar in regio Breda die hier graag een steentje aan bijdraagt! Jouw werkzaamheden zullen er als volgt uitzien: Je krijgt veel vrijheid in de keuze van de technieken die je gaat gebruiken. Uiteraard wel binnen de gestelde kaders, en door gebruik te maken van het .NET platform. Je gaat aan de slag met de ontwikkeling van een nieuwe module binnen de WMS suite van dit bedrijf. Deze "carrier" module gaat er voor zorgen dat de selectie van een vervoerder volledig

Bekijk vacature »

Full stack Python developer

Functie Samen met andere collega’s (een product owner, een software manager en een ervaren ontwikkelaar) ga jij onze producten verder ontwikkelen. Jouw verantwoordelijkheden zullen bestaan uit: – Verder wil gaan met de ontwikkeling van onze bestaande producten; nieuwe features! – Meedenkt over de roadmap van onze producten – Als sparringpartner kan optreden op het gebied van development – Zelf ook nieuwe ideeën op tafel durft te leggen en deze van scratch af aan wilt bouwen Hieronder ook een paar voorbeelden van projecten waar we momenteel mee bezig zijn of binnenkort aan willen beginnen: – Real-time interactie creëren in onze web

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

.NET Developer Senior

Dit ga je doen Het ontwikkelen van backend applicaties in C#; Het maken van vele koppelingen met andere ERP-applicaties zoals JD Edwards en SAP; Je bent (mede) verantwoordelijk voor het opstellen van technisch ontwerpen voor de te ontwikkelen software oplossingen; Je bent gemiddeld 90% van je tijd inhouse oplossingen aan het ontwikkelen en testen. De overige 10% van je tijd ben je bij klanten op locatie om oplossingen te implementeren, klanten te begeleiden en de software verder te innoveren; Naast het zelfstandig ontwikkelen van software oplossingen ben je ook bezig met het waarborgen van je contacten bij de klant, het

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 »

Software Developer .NET

Functie omschrijving .NET developer gezocht! Wij zoek op zoek naar een .NET Developer die zich niet uit het veld laat slaan voor een software bedrijf in de regio Veenendaal. Je gaat in deze functie aan de slag met het door ontwikkelen van bestaande producten en het ontwikkelen van nieuwe producten. Dit bedrijf ontwikkeld SaaS applicaties die zowel intern als extern gebruikt worden. Verder bestaat je functie uit: Het ontwikkelen en bouwen van webapplicatie, mobiele applicaties en websites vallen onder jouw verantwoordelijkheden; Werken met onder andere .NET, C#, HTML/CSS, Javascript en MSSQL/Oracle Databases; Hierin werk je samen met andere developers en

Bekijk vacature »

SQL database developer

Functie omschrijving Voor een software bedrijf in omgeving Breda zijn wij op zoek naar een SQL database ontwikkelaar. Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het huidige team developers zijn wij op zoek naar een SQL database ontwikkelaar. De klanten van dit groeiende bedrijf zitten door heel Europa en jouw werkzaamheden zullen er als volgt uitzien: Het samenstellen van de software op basis van de input vanuit de klant (T-SQL & C#.NET). Het bezoeken van klanten om de processen en mogelijkheden in kaart te brengen. Het ontwerpen van databases met T-SQL als programmeer laag.

Bekijk vacature »

C# Unity Developer

Functieomschrijving Ontwikkel jij mee door applicaties te bouwen die bijdragen aan het optimaliseren van processen? Voor een erkende werkgever in regio Tilburg zijn wij op zoek naar een Unity C# Developer die graag de uitdaging aangaat! Jouw werkzaamheden zullen er als volgt uitzien: Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Je bent verantwoordelijk voor het uitvoeren van updates/aanpassingen aan de reeds draaiende applicaties. Bedrijfsprofiel Je komt te werken voor een internationale werkgever in regio Tilburg. Samen met een vooruitstrevend team

Bekijk vacature »

Belastingdienst - Freelance Senior Applicatie ontw

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 6 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: We verwachten van je, dat je: Brede ervaring hebt als JAVA-ontwikkelaar; Ervaring hebt met Agile/Scrum-werken en je thuis voelt in een Agile omgeving; Een aandeel levert aan het scrumproces en in de SAFe-releasetrain; Zelfstandig werkt in een scrumteam en intensief de samenwerking op zoekt met je directe collega’s en je omgeving; Ervaring meebrengt met het schattten en inplannen van taken tot en met het testen en demonstreren van de opgeleverde functionaliteit; Collega’s in je

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 »

Back-end developer

Dit ga je doen Development d.m.v. XQuery, JSON/XML en REST API's; Ontwikkelen aan een tof en complex zorgplatform; Koppelingen maken met de NoSQL database; Testen en documenteren van de ontwikkelde functionaliteiten; Samenwerking met andere front- en back-end ontwikkelaars. Hier ga je werken Voor een vooruitstrevende organisatie binnen de zorg in Den Haag zijn wij opzoek naar een Back-end Developer die ervaring heeft met o.a.XQuery en Vue.JS of daarin graag zou willen ontwikkelen. Je zal ontwikkelen aan een tof en complex zorgplatform en koppelingen maken met de NoSQL database. Ook het testen en documenteren van de ontwikkelde functionaliteiten behoort tot jouw

Bekijk vacature »

PHP developer (Symfony, Doctrine)

Functie Als PHP developer wordt er een hoge mate van zelfstandigheid verwacht, maar ook dat je goed opereert in een team waar kennis wordt gedeeld en dingen als codereviews erg veel voorkomen. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden

Bekijk vacature »

Senior front-end developer (React)

Functie Momenteel zijn ze op zoek naar een ervaren front-end developer. Als senior werk je nauw samen met 5 collega developers. Een klein scrum team dus, met korte lijnen waardoor jouw ideeën snel tot uitvoering gebracht kunnen worden. De huidige applicaties worden veelal ontwikkeld met o.a. React, Redux, TypeScript. Ze zijn echt op zoek naar een kartrekker in het team. Naast het meedenken over, opzetten en uitvoeren van bijvoorbeeld de architectuur of toepassing van nieuwe technieken krijg je ook veel tijd om de meer junior (front-end) developers te begeleiden. Hierin nemen ze graag de tijd om mensen de ruimte te

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 »

Java (Java EE) Developer

In het kort Werken als Java developer betekent werken aan complexe IT projecten bij onder meer een internationaal containeroverslag bedrijf. Zo sturen we apparaten en eindgebruikers aan d.m.v. onze custom-made software oplossing, die dagelijkse vele duizenden containers verwerkt. Denk aan systemen die volautomatische kranen aansturen en op afstand bedienen, de volledige afhandeling van containernummerherkenning bij het laden en lossen van zeeschepen of het tonen van instructies aan de chauffeurs van ruim 300 straddle carriers. En dat allemaal redundant, robuust en in een dynamische 24/7 omgeving! Jij versterkt ons ontwikkelteam en gaat aan de slag met oa. Java i.c.m. Spring (Boot),

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

21/11/2024 23:19:10
 
- 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.