input filteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

ICT Systeemspecialist Netwerk

ICT Systeemspecialist Netwerk Salaris Schaal Schaal 9 Standplaats Kralingen, Rotterdam Fte 1,00 Einddatum (werkenbij) 05-08-2020 Solliciteren Solliciteren Ongekend uitdagend Evides ICT heeft als missie de afdelingen van Evides te helpen in het optimaal bedienen van klanten. Het team Generieke IT houdt zich bezig met beheren van de IT Infrastructuur. Binnen het team Generieke IT is een vacature ontstaan voor ICT Systeemspecialist Netwerk. De inzet van IoT en daarmee dus ook van IoT-netwerken zal de komende tijd toenemen. Het upgraden van het Wi-Fi-netwerk vormt een actuele belangrijke uitdaging voor onze afdeling. De juiste keuze in de aanleg van breedband-WAN vereist continu

Bekijk vacature »

C# Developer

C# Developer De uitgebreide versie Jij hebt ruim twee jaar ervaring als developer. Nu wil je graag je tanden zetten in nog complexere projecten. Met je team bereik je nieuwe hoogtes en zelfstandig maak je meters. Stilstand is achteruitgang voor jou; je hebt behoefte aan collegae die jou alles leren over Microsoft technologie maar wilt tegelijkertijd ook graag je eigen opgedane kennis delen. Alles wat vandaag nog onbekend is, moet je morgen toepassen in de volgende uitdaging en dàt is wat jou scherp houdt. Je hebt geen zin in een 60-urige werkweek maar haalt wel plezier uit zo nu en

Bekijk vacature »

Noordoost Java Developer vacature

Java Developer Noordoost Word onderdeel van een topteam met ervaren Java Developers. Loop voorop in de ontwikkelingen en help mee innoveren. Focus op Java Wij bouwen State of the Art applicaties met de nieuwste Java technologie en frameworks. Dit doen we door ons te richten op de open source-oplossingen binnen de wereld van Java, alle nieuwe ontwikkelingen te volgen en onze kennis te delen binnen onze eigen Java Community. Dit betekent bijvoorbeeld dat we aanwezig zijn op veel conferenties; Oracle Code One, Devoxx en JFall. We organiseren ook onze eigen collegiale sessies en hackatons waar we kennis en plezier combineren.

Bekijk vacature »

Windows Systeembeheerder

Als jij ICT in- en uitademt, dan zijn wij op zoek naar jou! Voor ons team zijn wij op zoek naar een: Windows systeembeheerder Omschrijving: Voor onze klanten, allemaal MKB-bedrijven uit de regio, verzorgen wij de ICT-omgeving. Zowel remote als bij de klant op de vloer. Wij helpen onze klanten met alle voorkomende ICT-zaken en zorgen dat het op rolletjes loopt. Wij zoeken een no-nonsense collega die plezier haalt uit het oplossen van ICT-problemen, groot en klein. Herken jij jezelf in het profiel van Windows Systeembeheerder ? Je vindt klanten helpen leuk en bent klantgericht Je houdt van verantwoordelijkheid Je

Bekijk vacature »

Lead Drupal Ontwikkelaar / Full Digital Agency / U

Functieomschrijving Kent Drupal voor jou geen geheimen en ben jij de Lead Ontwikkelaar die graag meewerkt aan innovatieve software oplossingen voor grote en toonaangevende organisaties? Lees dan snel deze vacature van Lead Drupal Ontwikkelaar! Ontwikkelen van webapplicaties in de nieuwste versies van Drupal; Doorontwikkelen van huidige applicaties; Aansturen van talentvolle ontwikkelaars; Meedenken over architecturen; Sparringspartner van de projectmanager. Functie-eisen Minimaal HBO-werk en denkniveau; Minimaal 5 jaar aantoonbare werkervaring met Drupal; Ervaring in Scrum/Agile omgevingen; Aantoonbare ervaring met het aansturen van developers; Communicatief vaardig. Bedrijfsomschrijving Deze organisatie gelegen in het hartje van Utrecht biedt grote (inter)nationale organisaties maatwerk oplossingen op het

Bekijk vacature »

SQL Developer / BI / Miljoenen eindgebruikers

Functieomschrijving Altijd al aan de slag willen gaan als Senior SQL Developer bij één van de meest vooraanstaande verzekeraars in Nederland? Wil jij je richten op het bedenken, ontwerpen, bouwen en implementeren van uiteenlopende BI oplossingen vanuit data van miljoenen gebruikers met de Microsoft BI Stack, T-SQL, PowerShell en Datawarehousing? Lees dan nu verder! Analyseren, ontwerpen, ontwikkelen en documenteren van BI oplossingen en complexe BI applicaties (met tools als T-SQL, PowerShell, SAS, SSIS, BIML BODS en BOXI) Maken van technische ontwerpen, data analyses en adviseren over de datawarehouse; Ontwerpen van functionele specificaties voor de dashboards en rapportages; Schakelen met stakeholders

Bekijk vacature »

Ruby on Rails ontwikkelaar / MVO bedrijf / Remote

Functieomschrijving Als Ruby on Rails ontwikkelaar kom je te werken in een deskundig team waar de technische lat hoog ligt. Het team bestaat momenteel uit 6 developers waarvan er vijf personen een WO en één persoon een HBO diploma richting de IT heeft. De applicaties die men maakt betreffen Cloud applicaties en betreffen allemaal maatwerk. Je gaat fullstack aan de slag maar men is nu op zoek naar iemand die zich binnen dit fullstack werk, ietwat wil focussen op de frontend kant. Het merendeel van de developers uit het team focussen ze zich namelijk al op de backend kant waardoor

Bekijk vacature »

Senior Fullstack .NET developer

Wil jij samen met gemotiveerde en slimme collega’s bouwen aan ons geavanceerde landschap in Azure? En vind je het ook nog eens leuk om jouw kennis te delen met junior- en medior devs? Dan heb je wellicht interesse in de positie van: Senior fullstack .NET developer voor ons kantoor in Alkmaar Over de positie: Bij SnelStart werken we in een AGILE-structuur om de productie meer focus en impact te geven. Met je collega’s kom je tot de beste resultaten door onderlinge discussie, goede refinement sessies, reviews en écht teamwork. Je hebt de vrijheid om de dingen te doen zoals jij

Bekijk vacature »

.Net Developer - B2B & B2C klantportalen, were

Al meer dan 25 jaar bouwt dit hecht en informeel team software developers in Rotterdam complexe bedrijfskritische (web & mobile) applicaties voor het MBK en multinationals, zowel in het binnen- als buitenland. Ze bouwen uiteenlopende applicaties voor uiteenlopende klanten. Om maar wat voorbeelden van organisaties en software oplossingen te noemen: Een uitgebreid ERP en projectmanagement systeem, waardoor een bouwbedrijf haar processen wereldwijd just-in-time kan inrichten. Een klantportaal voor een verzekeringsmaatschappij, waardoor 2+ miljoen klanten gebruiksvriendelijk hun zaken regelen en inzien. Een patiënten portaal voor de registratie, bijhouden van het patenten dossier, de planning en facturatie van de zorg zodat de

Bekijk vacature »

Senior .NET developer/ architect gezocht, api deve

Ben je een ervaren .NET developer en op zoek naar baan waarbij je je ook meer kunt gaan richten op architectuur? Binnen een leuke, sociale en betrokken werkomgeving? Met technieken als .NET Core en Azure? Dan zou deze baan wellicht iets voor jou kunnen zijn. Voor een organisatie in Rotterdam zijn we op zoek naar eens senior .NET ontwikkelaar/ architect. De organisatie bevindt zich in de financiële branche en is een van de grotere spelers in hun vakgebied. De organisatie bestaat uit circa 600 medewerkers en heeft verschillende vestigingen in Nederland. Het hoofdkantoor zit in Rotterdam en daar is ook

Bekijk vacature »

Fullstack .NET developer voor het onderwijs

Functieomschrijving Onze klant bouwt SAAS oplossingen voor het onderwijs en ze hebben inmiddels een aantal innoverende applicaties in de markt staan. Je gaat samen met je team op Scrum basis aan de slag om deze .NET applicaties verder te verbeteren en uit te bouwen. Je team bestaat uit een aantal .NET developers en frontenders en naast technisch uitdagend development werk, ga je ook meedenken met de architectuur en zorg je dat de kwaliteit van de applicaties hoog zijn want ze moeten altijd stabiel en snel werken! Functie-eisen - Je hebt een afgeronde HBO opleiding (IT) - Je hebt ervaring met

Bekijk vacature »

C# Developer gezocht die mee wil denken in archite

Functieomschrijving Ben jij een C# ontwikkelaar die ook kennis heeft van VB.NET en/of Java? Krijg jij energie van het verbeteren van software m.b.v. C# om een betere Enterprise Application Integration te krijgen? Lees dan snel verder! Verantwoordelijk voor de volledige ontwikkelcyclus; Meedenken in de architectuur van de applicaties, EAI is hierin key!; Verbeteren en doorontwikkelen van bestaande software, voornamelijk met C#; Bruggenbouwer van functioneel naar development, waarbij je zelf ook hands-on bezig bent; Direct schakelen met interne klanten. Functie-eisen HBO werk- en denk niveau; Ervaring met EAI is een pre; Aantoonbare ervaring met het doorontwikkelen van bestaande software; Je hebt

Bekijk vacature »

.NET C# ontwikkelaar gezocht (C# Winforms, Xamarin

.NET C# ontwikkelaar bij een slagvaardig en hard groeiend bedrijf met korte lijnen? In een omgeving waar je onder andere direct samen met de oprichter werkt aan het verder ontwikkelen van een vernieuwend product? Dan is deze vacature zeker iets voor jou. Voor een bedrijf in Rotterdam zijn we momenteel op zoek naar een .NET C# ontwikkelaar. Het gaat om klein bedrijf dat op een punt is aanbeland waar de vraag naar hun software flink aan het toenemen is. Hierdoor zijn ze op zoek naar meerdere .NET ontwikkelaars die samen met de oprichter en nog verschillende andere collega’s hun software

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

SAP S/4 DIGITAL EAM CONSULTANT (PM, CS, PS, FSM, A

SAP S/4 DIGITAL EAM CONSULTANT (PM, CS, PS, FSM, AIN) Utrecht 13th month pay & Holiday allowance Bonus Program 26 holidays Training & Learning opportunities Laptop & Smartphone 32-40 hours p.w. As an SAP S/4 Digital EAM Consultant you will assess, design and deliver a full end-to-end digital experience to our asset intensive clients for Enterprise Asset Management processes. You will use your SAP S/4 experience to collaborate with our clients in advising and ultimately transforming them into the new SAP era of intelligent assets. You will align the client’s strategic vision for Operational Excellence with SAP S/4 EAM as

Bekijk vacature »

Pagina: 1 2 volgende »

Ruben D

Ruben D

28/12/2017 17:11:07
Quote Anchor link
Hallo allemaal,

Dit is eerder een vraag om advies over veiligheid.
Ik merkte deze functies onlangs op:
$sanitized_a = filter_var($a, FILTER_SANITIZE_EMAIL);

Dus je kan input filteren tegen sql injectie bvb.

Nu vraag ik mij af of dit even veilig is om te gebruiken als de zelfgemaakte functies gelijk in wordpress.
 
PHP hulp

PHP hulp

03/08/2020 11:08:03
 
Jan Koehoorn

Jan Koehoorn

28/12/2017 17:55:05
Quote Anchor link
Ruben D op 28/12/2017 17:11:07:
Dus je kan input filteren tegen sql injectie bvb.

Daar is deze functie niet specifiek voor bedoeld. Deze functie probeert van een string nog een geldig emailadres te maken. Om SQL injection tegen te gaan kun je beter gebruik maken van bv. PDO en Prepared Statements
Gewijzigd op 28/12/2017 17:55:37 door Jan Koehoorn
 
Ruben D

Ruben D

28/12/2017 18:27:29
Quote Anchor link
Ja dat klopt, met "FILTER_SANITIZE_STRING" dan.
Ik zou het ook zo doen maar wou weten of dit daar ook tegen helpt.
 
Thomas van den Heuvel

Thomas van den Heuvel

28/12/2017 19:21:54
Quote Anchor link
Een verkeerd gebruik van prepared statements is nog steeds even fataal (denk bijvoorbeeld aan het concateneren van lappen SQL waarmee je in wezen het prepared-statement-stramien bypassed). Het grootste probleem is dat iemand zich op een zeker moment veilig waant enkel door het gebruiken van een bepaalde techniek (lees: goocheltruc), zonder dat men precies weet wat de gevaren nu eigenlijk zijn. Als je niet weet wat een hondendrol is weet je ook niet wanneer je er in staat. En dan heb je letterlijk stront.

SQL injectie voorkom je ook niet (altijd) simpelweg door het filteren van input, tenzij deze heel strict is. Wat veel beter werkt tegen SQL injectie is output escaping. En vaak gaan input filteren en output escapen hand in hand.

Desalniettemin zijn dit twee compleet verschillende dingen.

EDIT: en sanitizen is wéér iets anders, daarbij wordt vaak geprobeerd recht te buigen wat eigenlijk al krom is. Vergelijk dit met een typecast waarbij getracht wordt iets om te zetten naar een bepaald type waarbij alles wat onleesbaar is uit oogpunt van dat type wordt weggekapt. Maar daarmee was dus eigenlijk de invoer al ongeldig... Invoer is meestal gewoon GOED of FOUT, en niet MISSCHIEN-GOED-DUS-LAAT-IK-PROBEREN-ER-IETS-VAN-TE-BAKKEN.

> filter input, escape output
> mysql_real_escape_string() is geen wondermiddel
Gewijzigd op 28/12/2017 19:25:56 door Thomas van den Heuvel
 
Ruben D

Ruben D

28/12/2017 19:42:18
Quote Anchor link
verkeerd als hier: (geen input filter)
$stmt = $pdo->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->execute([$_POST['name'], 29]);

of bypass gelijk dit denk ik dat je bedoeld?
$stmt = $pdo->prepare("INSERT INTO myTable (name, age) VALUES ($name, ?)");

Ik dacht wel ergens gelezen te hebben dat mysqli escape eruit gaat bij recente versies.
Ik zal is kijke of ik het nog kan vinden.
 
Jan Koehoorn

Jan Koehoorn

28/12/2017 20:51:17
Quote Anchor link
Sowieso gebruik je nooit rechtstreeks $_POST variabelen in parameter binding.

Voordat je de waarden gebruikt om aan je insert query te koppelen, heb je alles gevalideerd (met bv. een EmailValidator class) en in orde bevonden.

Een andere optie, is werken met Value Objects, waarbij de validatie in de constructor plaatsvindt. Een Value Object voor een email adres kan er zo uitzien:

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
<?php
class Email
{
    private $email;

    public function __construct($email)
    {

        if ( ! filter_var($email, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException(sprintf('[%s] is not a valid email address', $email));
        }


        $this->email = $email;
    }


    public function __toString()
    {

        return $this->email;
    }
}

?>


Het voordeel van werken met Value Objects is, dat je in je hele codebase nu nog maar één plek voor het valideren van email adressen hebt, namelijk in de constructor van dat object.
Gewijzigd op 28/12/2017 21:23:05 door Jan Koehoorn
 
Thomas van den Heuvel

Thomas van den Heuvel

29/12/2017 01:20:47
Quote Anchor link
Jan Koehoorn op 28/12/2017 20:51:17:
Value Objects

Dit klinkt allemaal best zinnig enzo, maar hoe ga je dit inpassen in de validatie van formuliergegevens? Wanneer een exception gethrowd wordt, wordt de normale flow van het programma onderbroken.

Ik zou ook niet zeggen dat een exception hier op zijn plaats is, het ligt immers in de lijn der verwachting dat iemand (al dan niet per ongeluk) een verkeerd e-mailadres invult. Ook wil je dan niet dat alles gestaakt wordt maar idealiter krijg je dan gebruiksvriendelijke terugkoppeling over *alle* velden waar mogelijk iets mis mee is (en niet enkel de eerste waar ie op stuk loopt, denk aan JavaScript popups uit de jaren 90 :p).

Ik had ook eerder een berichtje in deze thread in een ander draadje geklopt hoe je exceptions zou moeten zien (als ik er (ver) naast zit hoor ik dat ook graag, ben benieuwd naar andere inzichten over exceptions).

Mogelijk zou een exception bijvoorbeeld (wel?) op zijn plaats zijn bij formulierafhandeling wanneer een CSRF-token niet meer klopt (of niet meer bestaat) bij validatie omdat dat echt iets "onverwachts/ongeplands" is. Maar zelfs dan heb je liever dat (wanneer je sessie onderwater weer hersteld is, want het is meestal zoiets als een verlopen sessie ofzo) je weer teruggestuurd wordt naar het formulier met de zojuist ingevulde informatie -ook al is deze goed- maar met de mededeling dat het token is verlopen en je nogmaals dient te submitten. Dat lijkt mij vriendelijker dan een aparte "oeps, er ging iets mis" pagina nadat je het afgelopen half uur een verhaal hebt zitten typen, en dat je dat dan kwijt bent.

Oftewel: ik zie niet zogauw hoe het (veelvuldig) gebruiken van exceptions een goed idee is bij formulierafhandeling/-validatie. Het is niet "fataal" als iemand iets verkeerds ingevuld heeft, noch is het dan onduidelijk wat er vervolgens zou moeten gebeuren.
Gewijzigd op 29/12/2017 01:26:50 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

29/12/2017 01:50:45
Quote Anchor link
@Thomas:

Ik vind dat ook wat lastig. Op het forum heb ik mensen wel eens horen (niet letterlijk) zeggen dat je beter overal exceptions kunt gebruiken (ipv if-statements). Ik vraag me dus ook wel af wanneer wel en wanneer niet. Mij lijkt het ook niet logisch om een fout e-mailadres af te vangen met een exception, en toch schijnt het te gebeuren.

Want eigenlijk is het natuurlijk best raar ... Je vangt een situatie die zich kan voordoen af met een exception ... maar als je weet dat de situatie zich kan voordoen ... in hoeverre is het dan nog een exception? En ... wanneer is iets dan überhaupt nog een exception? Iemand die een typfout maakt (veelvoorkomend gedrag) zie ik niet als een exception, iemand die een fout wachtwoord invoert ook niet. Dat is allemaal VOORSPELBAAR gedrag.

Maar wat zou dan wel een exception kunnen zijn ... Misschien een keuzeformulier dat als waarde A, B of C verwacht, maar X ontvangt? Dan is er sprake van iets onverwachts wat riekt naar een hackpoging, maar verder zou ik het zo gauw ook even niet weten.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/12/2017 14:37:52
Quote Anchor link
Precies, maar dan zou je kunnen zeggen: ik heb een set A, B, C en hier moet een geldige keuze in gemaakt worden. Als je dan X krijgt is dat geen geldige keuze. Het is dan nog steeds duidelijk wat er zou moeten gebeuren (kies een geldige waarde).

Was dat niet ook op de DOS-prompt: de keuze-loop vliegt er toch ook niet uit als je iets anders dan [a]bort, [r]etry, [f]ail kiest? :)

Zoals ik het zie is een exception een soort van noodrem, waarbij de code zegt "ik kom er ff niet uit". Een hoger gelegen laag / ander stuk code beslist dan meestal wat er moet gebeuren. Dit is denk ik ook een kenmerk van exceptions: de plek waar aan de noodrem wordt getrokken is zelden tot nooit de plek waar dit verder wordt afgehandeld. Immers, dit zou namelijk inhouden dat de code al een soort van idee heeft van wat er mis is gegaan, en hoe hier mee omgegaan moet worden. Wat weer een indicatie is dat je hiervoor geen exception hoeft te/zou moeten gebruiken :).
 
Jan Koehoorn

Jan Koehoorn

29/12/2017 16:46:59
Quote Anchor link
Thomas van den Heuvel op 29/12/2017 01:20:47:
Jan Koehoorn op 28/12/2017 20:51:17:
Value Objects

Dit klinkt allemaal best zinnig enzo, maar hoe ga je dit inpassen in de validatie van formuliergegevens?


Niet. Daar vul je gewoon een array met errors. Je zou trouwens wel kunnen denken aan een AJAX call op de onblur van een formfield, met daarin dan weer wél de check met het value object. Dan heb je userfriendly validation aan the client side en uiteraard check je altijd serverside. Ik zou dat alleen doen bij formulieren met veel velden. Dan is het wel prettig om meteen na het verlaten van het veld erachter te komen dat het invalid is, en niet pas bij het submitten van het formulier.
 
Ozzie PHP

Ozzie PHP

29/12/2017 17:23:44
Quote Anchor link
Thomas van den Heuvel op 29/12/2017 14:37:52:
Precies, maar dan zou je kunnen zeggen: ik heb een set A, B, C en hier moet een geldige keuze in gemaakt worden. Als je dan X krijgt is dat geen geldige keuze. Het is dan nog steeds duidelijk wat er zou moeten gebeuren (kies een geldige waarde).

Ik snap wat je bedoelt ... maar stel we hebben 2 radiobuttons waarbij je kunt kiezen of je van een product de variant van € 50 wilt hebben, of de luxere variant van € 65.

Je kunt dus kiezen uit waarde € 50 of € 65. Stel dat je nu ineens als waarde € 1 krijgt (een keuze-optie die helemaal niet beschikbaar is), zou je dan niet een exception kunnen gooien? In dat geval heeft namelijk iemand handmatig de POST-data gewijzigd en is er blijkbaar sprake van een soort hackpoging. Dit gaat weer net iets verder dan simpelweg 'een ongeldige keuze'.

In zo'n geval zou ik misschien op een hoger niveau het IP-adres even willen blokkeren vanwege verdacht gedrag.
 
Jan Koehoorn

Jan Koehoorn

29/12/2017 17:40:52
Quote Anchor link
Ozzie PHP op 29/12/2017 17:23:44:
In zo'n geval zou ik misschien op een hoger niveau het IP-adres even willen blokkeren vanwege verdacht gedrag.


En dat is een goed voorbeeld van Value Objects. Je throwt een Exception, en in de catch log je iets, of je onderneemt een andere actie. Bij Value Objects kun je denken aan geldbedragen, datumbereiken, emailadressen, etc.
 
Ozzie PHP

Ozzie PHP

29/12/2017 20:21:08
Quote Anchor link
@Jan,

Maar dan moet dat value object wel weten welke waardes wel en niet zijn toegestaan. De toegestane waardes geef je dan als parameter mee in een array of zo?
 
Jan Koehoorn

Jan Koehoorn

29/12/2017 20:30:29
Quote Anchor link
@ Ozzie,

nee, de enige parameter(s) die je aan de constructor meegeeft, zijn de value(s) die je wilt gebruiken. De validatie vindt geheel in de constructor plaats, en je kunt natuurlijk ook properties gebruiken om bijv. een onder- en bovengrens van een waarde aan te geven.

Mijn voorbeeld hierboven in dit topic is niet helemaal volledig. Een Value Object is bijvoorbeeld altijd final, want je wilt dat de waarde niet kan veranderen als hij eenmaal gevalideerd is, door hem bijvoorbeeld te extenden, wat dus verboden is. Een VO heeft ook geen setters. Dat is eigenlijk de essentie van een Value Object; alleen het feit dat hij aangemaakt is en dus door de constructor-validatie komt, garandeert dat hij altijd valid is.

Er is nog veel meer te vertellen over Value Objects, maar dat valt een beetje buiten dit topic, maar er zijn goeie blogs over te vinden.

Edit:


Nog één aanvulling: wanneer je in een andere class in de constructor een type-hint naar een Value Object aangeeft, garandeer je dus dat die property altijd valid is. Bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
class Subscriber {
    private $name;
    private $email;

    public function __construct($name, Email $email) {
        $this->name = $name;
        $this->email = $email;
    }
}

?>


Als nu $email niet van het type Email is, of niet goed aangemaakt is, krijg je automatisch een Exception. Het scheelt je dus heel veel validatie.

Toevoeging op 29/12/2017 20:41:04:

Jan Koehoorn op 28/12/2017 20:51:17:
Sowieso gebruik je nooit rechtstreeks $_POST variabelen in parameter binding.

Voordat je de waarden gebruikt om aan je insert query te koppelen, heb je alles gevalideerd (met bv. een EmailValidator class) en in orde bevonden.

Een andere optie, is werken met Value Objects, waarbij de validatie in de constructor plaatsvindt. Een Value Object voor een email adres kan er zo uitzien:

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
<?php
final class Email
{
    private $email;

    public function __construct($email)
    {

        if ( ! filter_var($email, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException(sprintf('[%s] is not a valid email address', $email));
        }


        $this->email = $email;
    }


    public function __toString()
    {

        return $this->email;
    }
}

?>


Het voordeel van werken met Value Objects is, dat je in je hele codebase nu nog maar één plek voor het valideren van email adressen hebt, namelijk in de constructor van dat object.
Gewijzigd op 29/12/2017 20:37:53 door Jan Koehoorn
 
Ozzie PHP

Ozzie PHP

29/12/2017 21:31:45
Quote Anchor link
@Jan,

>> nee, de enige parameter(s) die je aan de constructor meegeeft, zijn de value(s) die je wilt gebruiken.

Oké ... maar hoe zou je dat dan doen bij een keuze met radiobuttons ... in het voorbeeldje wat ik gaf, kun je dmv een radiobutton waarde ABC123 of XYZ789 kiezen. Hoe voorkom je dan dat een hacker de waarde KLM456 verstuurt? Anders gezegd ... hoe weet dat value object dat alleen ABC123 en XYZ789 zijn toegestaan?
 
Jan Koehoorn

Jan Koehoorn

29/12/2017 21:42:18
Quote Anchor link
Voorbeeld met alleen de constructor:

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
<?php
class MyVerySpecificValueSet
{
    private $allowed = [
        'ABC123' => true,
        'XYZ789' => true,
    ];


    private $val;

    public function __construct($val)
    {

        if (empty($this->allowed[$val])) {
            throw new InvalidArgumentException(
                sprintf('[%s] is not a valid value for [%s]', $val, __CLASS__)
            );
        }


        $this->val = $val;
    }
}

?>
 
Ozzie PHP

Ozzie PHP

29/12/2017 21:53:28
Quote Anchor link
Maar nu maak je de waardes hardcoded ... dat lijkt me niet handig, want dan kun je ze niet vanuit de formulierafhandeling meegeven. Dan zou je voor ieder formulier een aparte class moeten maken.
 
Jan Koehoorn

Jan Koehoorn

29/12/2017 21:58:17
Quote Anchor link
Het aanmaken van een class is in PHP absoluut geen dure operatie. En bovendien: hoeveel formulieren heb je op je website? Je kunt zonder enige probleem tientallen of honderden VO's aanmaken. En als je dat onoverzichtelijk vindt, dan maak je gewoon een ouderwetse Validator Class.
 
Rob Doemaarwat

Rob Doemaarwat

29/12/2017 22:23:18
Quote Anchor link
Ik denk dat @Ozzie doelt op bijvoorbeeld een lijst die uit je database komt. En zelf denk ik dan nog door naar een lijst met waarden die weer afhankelijk is van een andere keuze in hetzelfde formulier. In een "kassa" scherm moet je bijvoorbeeld eerst een betaalmethode kiezen (PayPal, CreditCard, iDeal, enz). Alleen in het geval van iDeal moet je vervolgens ook nog een bank kiezen. Die betaalmethode moet je valideren (stel even dat die lijst uit een database komt), en dan moet je in één specifiek geval ook nog een bank kiezen (met een lijst die meestal door een betaalprovider wordt geleverd). Dat lijkt me allemaal wat lastig in zo'n "vast" Value Object te verwerken.

(ja, ik weet, we dwalen af ...).
 
Ozzie PHP

Ozzie PHP

29/12/2017 22:26:10
Quote Anchor link
Het gaat er niet om of het een dure operatie is ... stel je hebt een webshop en je verkoopt duizenden producten met een simpele en een dure versie die beiden anders geprijsd zijn. Om aan te geven welke versie je wil, moet je als klant de juiste prijs selecteren. Er zijn dus maar 2 prijzen mogelijk en iedere andere bedrag is sowieso verkeerd. Je wil dan niet bij ieder product handmatig gaan aangeven welke prijzen zijn toegestaan.

(uiteraard zit hier dan ook een programmeerfout als je het op deze manier zou programmeren, maar het is puur even als voorbeeldje bedoeld)

PS

Alvorens ik dit topic nu kaap ... Ruben ... heb jij al een antwoord op je vraag?
 
Ruben D

Ruben D

29/12/2017 22:39:56
Quote Anchor link
Ja filter input met PDO in database en output filteren met htmlentities denk ik.
Ik wou er even op in gaan wat het nut van bind_param is, is dit ook en filter op je variabel?
dan zou ik er dus 2 achter elkaar hebben, niet dat het erg is.

hierna mag je het kapen.
 

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.