$_POST Unset?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mendix Developer

For our client in Amsterdam, we are looking for a Senior Mendix Developer. Company description Our client is an IT Consultancy company who’s been active for 10 years now. With their ambitious team, they are working with different clients in order to help them with analyzing their data and giving advice to them, regarding how they can use their data in the smartest ways, or to make sure that their mobile or web applications are working efficiently. As you get a glimpse of various industries, it is guaranteed that no day will be the same. Job description As a Mendix

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Software Ontwikkelaar .NET te Zaandam

Bedrijfsomschrijving Je komt hier terecht bij een door-en-door softwarebedrijf, waarbinnen meerdere SaaS pakketten worden ontwikkelt voor diverse sectoren. Hierbij kun je denken aan bijvoorbeeld de logistieke en medische branche. Deze organisatie kenmerkt zich door de hoge mate van complexiteit in de applicaties, wat betekent dat jij je hier niet zal gaan vervelen. Integendeel: Jij gaat hier elke dag ontzettend veel leren en je in razend tempo ontwikkelen als C# .Net Developer met focus op back-end. Het team bestaat uit ongeveer 20 personen personen, waarvan het grootste deel zich richt op software development. De sfeer is informeel en professioneel. De producten

Bekijk vacature »

Full stack developer Node.js

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

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 »

Software Developer

Dit ga je doen Ontwerpen, ontwikkelen en onderhouden van (mobiele) internettoepassingen; Ontwikkelen en onderhouden van Microservices; Ontwerpen en optimaliseren van databases; Identificeren van nieuwe trends/ontwikkelingen binnen de branche. 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 zich op het leveren van kwalitatief hoogwaardige producten aan alle hun klanten. De organisatie telt circa 4.000 medewerkers in meer dan 10 verschillende landen. Momenteel is de organisatie op zoek naar een Software Developer wilt meewerken aan het

Bekijk vacature »

C# Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Wil jij graag aan de slag als C# ontwikkelaar en jouw skills verder ontwikkelen? Zoek niet verder! Als C# ontwikkelaar ga je aan de slag met de volgende taken: (verdere) ontwikkeling van de software voor de interne processen binnen een .net omgeving; optimaliseren van de dataprocessing; ontwerpen en implementeren van zowel desktop- als web-programmatuur; ontwikkeling van tools ten behoeve van consultants en klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Den Bosch. Zij ontwikkelen business intelligence software voor een specifieke branche. Dit houdt in dat zij dashboards ontwikkelen

Bekijk vacature »

Front-end developer (medior/senior)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

PHP Laravel developer

Functie omschrijving Weet jij alles van Laravel en krijg je energie van het ontwikkelen van software hiermee? Laat snel wat van je horen want wij zoeken een PHP/Laravel developer in regio 's-Hertogenbosch. Jouw taken zullen bestaan uit: Softwareapplicaties ontwikkelen en verder optimaliseren in veel diverse projecten op basis van Agile/Scrum. Uitleg geven over software en applicaties Klantcontact hebben over bestaande applicaties. Documentatie schrijven over applicaties. Techstack: PHP, Laravel, HTML, CSS, Javascript. Bedrijfsprofiel Deze organisatie zit in de regio van 's-Hertogenbosch en is een klein softwarebedrijf. Er werken ongeveer 15 medewerkers, verdeeld in meerdere teams, zoals back-end en front-end development, projectmanagement

Bekijk vacature »

Full stack ontwikkelaar Laravel, Vue.js

Functie Als ontwikkelaar binnen deze organisatie hou jij je voornamelijk met lopende projecten voor de verschillende klanten. Zo bouw je de ene dag aan prijsschifting systemen en de andere dag onderzoek je crawlers en stel je ze zo in dat de data goed binnen komt binnen het systeem. Daarnaast bouw je mee aan dashboards en ben je dus constant bezig met het verbeteren van het platform. Er is een vaste werkwijze, zo werken ze met Trello kaarten en onderverdelen ze deze aan het begin van iedere week onder de developers. Dit wordt door de lead developer gedaan, maar in samenspraak

Bekijk vacature »

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

C# developer

Functie omschrijving We are looking for a dutch native speaker Ik ben op zoek naar een back-end developer, die met name kennis & ervaring heeft van de programmeertaal C#. Jij gaat aan de slag bij een topspeler in de logistieke sector, die zich behalve met logistiek, ook bezig houdt met softwareontwikkeling. Welke taken komen hierbij kijken? Je gaat desktop- en webapplicaties onderhouden en optimaliseren, waarin je werkt met o.a. C#, ASP.NET, SQL Server en T-SQL. Je hebt regelmatig klantcontact om de wensen in kaart te brengen en te evalueren over de huidige draaiende applicaties. Je implementeert nieuwe functionaliteiten toe aan

Bekijk vacature »

Front-end developer (Angular)

Functie Het team bestaat uit een architect, fullstack developers, app developers, de product owner en projectmanager. Eenieder draagt vanuit zijn discipline bij aan een complete oplossing voor de klant. Uiteraard zul je hierin nauw samenwerken met je collega’s. Jij wordt verantwoordelijk voor de front-end implementatie en fungeert als lead op dit gebied binnen het team. Je kunt helder formuleren, ideeën uitdragen en overbrengen aan je collega’s. Qua technische stack is het vooral van belang dat je ervaren bent met Angular, HTML5, CSS en TypeScript. Verder is ervaring in NgRx, Bootstrap, BEM en Cypress een pré, evenals affiniteit met UX/UI Design!

Bekijk vacature »

C# .NET Developer

Dit ga je doen Je richt je op het doorontwikkelen en herstructureren van het platform; Je werkt in teamverband en zelfstandig aan uitdagende projecten voor verschillende klanten; Softwareontwikkeling middels C# .NET; Je staat in contact met verschillende opdrachtgevers om de klantwensen te bespreken en deze vervolgens te ontwikkelen; Verbeteren van bedrijfsprocessen; Implementaties. Hier ga je werken Als .NET Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet

Bekijk vacature »

.NET Developer

Functie omschrijving Ervaren .NET Developer gezocht! Wij zoeken een ervaren .NET developer die aan de slag gaat voor een softwarebedrijf in de regio Rhenen. In deze rol ben jij zowel zelfstandig als in teamverband verantwoordelijk voor het ontwikkelen en verbeteren van bestaande producten. Daarnaast houdt jij je bezig met de nieuwbouw van websites, webapplicaties en mobiele applicaties die zowel intern als extern gebruikt worden. Je werkt hierbij nauw samen met andere developer, productmanagers en product specialisten om mooie producten te creëren. Bedrijfsprofiel Waar kom je te werken? Je komt te werken voor snelgroeiende softwareleverancier en allround dienstverlener. Klanten van deze

Bekijk vacature »
Jan te Pas

Jan te Pas

19/03/2018 10:41:38
Quote Anchor link
Alweer een vraag? Ja, helaas of gelukkig wel. Kan ik jullie kennis wederom aanspreken.

Ik heb een formulier, dat roept een php aan. Werkt goed. Maar nu wil ik vermijden dat een gebruiker deze laatste pagina refreshed, F5 of Ctrl F5. Ik heb gelezen dat je met unset $_POST iets kunt doen. Nou dat werkt niet.

Ik check if($_SERVER['REQUEST_METHOD']=="POST") {

Wat is jullie ervaring om dit op te lossen? Want elke refresh voegt de gegevens toe aan de database. Dus vervelend. Is dat op de lossen?
Gewijzigd op 19/03/2018 10:43:36 door Jan te Pas
 
PHP hulp

PHP hulp

19/05/2024 06:35:00
 
- Ariën  -
Beheerder

- Ariën -

19/03/2018 10:57:37
Quote Anchor link
Je zou naar een beveiliging kunnen kijken met CSRF, waarbij je steeds een nieuwe hash genereert in je sessie, en deze controleert in een hidden POST value.
 
Ben van Velzen

Ben van Velzen

19/03/2018 11:17:52
Quote Anchor link
Wat veel wordt toegepast is Post/Redirect/Get. Kortom, na het posten en valideren van gegevens redirect je naar een nieuwe pagina, desnoods met een flash message in je session ter bevestiging. Dat voorkomt dat je na refreshes meer gegevens in je database krijgt.
 
- Ariën  -
Beheerder

- Ariën -

19/03/2018 11:41:06
Quote Anchor link
Flash message?
 
Jan te Pas

Jan te Pas

19/03/2018 11:54:37
Quote Anchor link
Dank. CSRF klinkt lijkt niet eenvoudig. Ik bedacht wat anders:

Zou ik ook een $_SESSION['nieuw'] kunnen gebruiken? In de pagina waar ik de php aanroep, $_SESSION['nieuw']= true zetten vervolgens na de eerste check in de POST PHP deze $_SESSION['nieuw']=false zetten. Dan voorin checken of if ($_SESSION['nieuw']) melding en terug naar formulier of ander pagina. Kan dat?
 
- Ariën  -
Beheerder

- Ariën -

19/03/2018 12:07:47
Quote Anchor link
Die sessie wordt dan na een rehresh zo weer opnieuw aangemaakt. En CSRF is nog best kinderlijk eenvoudig te bouwen. Deze gebruik ik in mijn CMS, en heeft Dylan volgens mij eens gebouwd.

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
<?php
class Csrf {

    public static function makeToken() {
        $max_time    = 60 * 60 * 24;
        $csrf_token  = $_SESSION['csrf_token'];
        $stored_time = $_SESSION['csrf_token_time'];

        if ( $max_time + $stored_time <= time() || empty( $csrf_token ) ) {
            $_SESSION['csrf_token'] = md5( uniqid( rand(), true ) );
            $_SESSION['csrf_token_time'] = time();
        }


        return $_SESSION['csrf_token'];
    }


    public static function isTokenValid( $field ) {
        return $field === $_SESSION['csrf_token'];
    }
}

?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="hidden" name="csrf_token" value="<?= Csrf::makeToken(); ?>">


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if( Csrf::isTokenValid( $_POST['csrf_token'] ) ) {
    echo 'Valid';
}
else {
    echo 'Nope';
}

?>


Wat ik een hash noemde, heet hier een token.
Gewijzigd op 19/03/2018 12:09:35 door - Ariën -
 
Ivo P

Ivo P

19/03/2018 12:11:06
Quote Anchor link
hoezo niet eenvoudig?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<form action="/foo.php" method="post">

</form>


en in php staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
 if('POST' == $_SERVER['REQUEST_METHOD']) {
     // doe je ding. Bijvoorbeeld een insert

     // zorg dat er niets naar het scherm gestuurd wordt. (nog geen spatie, echt niets)

     header('Location: /foo.php', true, 303);
     exit();
  }

?>

  <p>zijn we weer, maar nu met 'get'</p>


Toevoeging op 19/03/2018 12:12:12:

en als je dan op F5 drukt, wordt de laatste (GET) request herhaald en kom je dus gewoon steeds op "zijn we weer" uit.
 
- Ariën  -
Beheerder

- Ariën -

19/03/2018 12:15:10
Quote Anchor link
maar als je twee keer op back drukt? Of is het POST-proces al uit de browser verwijderd?

Eigenlijk is CSRF er meer voor bedoeld dat je niet een actie kan uitvoeren via een aanval, van bijv. een externe site.
Gewijzigd op 19/03/2018 12:17:55 door - Ariën -
 
Ben van Velzen

Ben van Velzen

19/03/2018 12:39:58
Quote Anchor link
Als je op back drukt is de post niet beschikbaar, omdat je vanuit de POST een redirect hebt gedaan. De pagina bestaat voor de historie niet.
 
Jan te Pas

Jan te Pas

19/03/2018 12:57:37
Quote Anchor link
Oef... hier moet ik eens dieper induiken. Kennelijk toch niet zo gemakkelijk.
 
- Ariën  -
Beheerder

- Ariën -

19/03/2018 13:09:34
Quote Anchor link
Het ligt eraan tegen wat je je wilt beschermen. Als het enkel refreshen is is POST-Redirect-Get al voldoende.
Als je niet wilt iemand bijv. URL's op je site aanroept via scriptjes, dan is CSRF de way to go.
 
Jan te Pas

Jan te Pas

19/03/2018 15:01:59
Quote Anchor link
Dat POST-Redirect-GET ga ik proberen. Dank
 
Thomas van den Heuvel

Thomas van den Heuvel

19/03/2018 16:18:01
Quote Anchor link
Dat is inderdaad wat je zou moeten doen. Post/Redirect/Get voorkomt ook het dubbelposten-door-terug-te-navigeren omdat je meteen na de verwerking van het formulier redirect. Navigeer je in zo'n opzet terug na versturen van het formulier kom je weer uit bij het formulier.

Neemt niet weg dat extra voorzieningen nodig kunnen zijn, zoals een CSRF-token (een token om cross site request forgeries, oftewel het posten van informatie vanaf een andere website, te voorkomen). Als het formulier al afgeschermd is door een login is dit trouwens niet per se nodig, maar het kan handig zijn om je formulieren standaard uit te rusten met deze functionaliteit.

Ook kan het handig zijn om een soort van validatie-routines te schrijven die alles controleren voordat je het formulier daadwerkelijk verwerkt. En het zou helemaal mooi zijn als je dan het formulier opnieuw inlaadt met de reeds ingevulde informatie en aangeeft wat hier aan mankeert.

Zorg ook dat alle verschillende acties apart worden gecompartimenteerd, ofwel:
- het tonen van het formulier
- het verwerken van het formulier
- het tonen van enige succesboodschap (of een flash message op een overzichtspagina kan ook afdoende zijn)

Dit om te voorkomen dat je code één grote if-elseif-else-brei wordt.

Manieren om deze acties te splitsen zijn:
- stop ze alle in aparte bestanden (maar dit kan bewerkelijk zijn)
- stop ze alle in aparte methoden van een klasse
- andere? (ik zou niet teruggaan naar normale functies maar proberen om in de OOP-richting te sturen)

Doordat je de acties scheidt is het wel nodig om op een of andere manier informatie over te hevelen tussen "pagina's". Als je dus iemand terugstuurt naar de toon-het-formulier-actie met reeds eerder ingevulde informatie zul je deze data op een of andere manier moeten transporteren, bijvoorbeeld via de sessie.

NB een (session) flash message is een boodschap die eenmalig op het scherm getoond wordt en daarna meteen wordt gewist uit de sessie. Dit zou je bijvoorbeeld in je maintemplate kunnen opnemen, ik maar hier zelf in het backend ook gebruik van. Op die manier kun je met minimale middelen overbrengen dat een actie (die geen echte output heeft zoals het toevoegen, wijzigen of verwijderen van een item) is geslaagd. Zo zit deze snippet in mijn admin maintemplate:
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
<?php
if (empty($_SESSION['messages']) === false) {
    ?>
<div id="messages"><?php
        foreach ($_SESSION['messages'] as $index => $message) {
            ?>
<div class="<?php echo $this->escape($message['type']) ?>"><?php
                // It is the programmers responsibility to escape these messages on input as they may contain HTML.
                echo $message['message'];
            ?>
</div><?php
        }
        $_SESSION['messages'] = array();
        // @todo think of a way to make notifications more persistent
    ?>
</div><?php
}
?>

Ik geef ook de berichten een kleurtje die direct iets vertellen over de status van het bericht (groen voor geslaagd, rood voor fout, oranje voor mogelijk actie nodig).

NB: dit is een van de weinige plekken waar je afwijkt van de regel "filter input escape output" omdat de output in een vorige actie is gegenereerd en de volgende actie niet echt kan inschatten wat er moet gebeuren, daarom is het handiger dat de vorige actie ook gelijk de boodschap formatteert in een formaat dat veilig is voor output.
Gewijzigd op 19/03/2018 16:28:22 door Thomas van den Heuvel
 
Jan te Pas

Jan te Pas

19/03/2018 16:39:53
Quote Anchor link
@Thomas: Dank ik heb de input met check in een formulier. Pas als alles goed staat, kan gesubmit worden. Maar wel graag 1x. Dus ik ga jouw opzet gebruiken. Dank!
 



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.