$_POST Unset?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET Developer te Naarden

Bedrijfsomschrijving Voor mijn klant ben ik op zoek naar een .NET Developer om het huidige team te komen versterken. Deze organisatie bevindt zich in de logistieke sector, en zij hebben een eigen ERP systeem ontwikkeld dat zij inzetten ter optimalisatie van de logistieke processen van haar eindklanten. Deze organisatie bestaat inmiddels al ruim 20 jaar, waarbij zij een duidelijke missie hebben, namelijk: het werk van de eindklant makkelijker maken door de systemen die zij leveren. Ze werken over heel de wereld, wat deze organisatie een echte internationale speler maakt. Binnen de organisatie kenmerken ze zich door een dynamische en professionele

Bekijk vacature »

Senior Developer ERP Dynamics 365

Samengevat: Deze werkgever is een softwarebedrijf. Ben jij een enthousiaste developer? Heb je ervaring met ERP of Dynamic 365 bussines central? Vaste baan: ERP Applicatie Specialist ERP MBO €3.600 - €5.200 Wij houden ons als bedrijf bezig met het leveren en implementeren van het Microsoft Dynamics pakket binnen verschillende industriële sectoren. Deze werkgever is een veelzijdige organisatie. Je werkt voor de eigen IT organisatie. Zij werken met moderne technologie en staan open voor innovatie. Binnen ons open team is er een no-nonsense cultuur. Daarnaast is er veel onderling contact door de korte communicatielijnen. Het team werkt enthousiast samen om een

Bekijk vacature »

Junior Front end developer Onderwijssoftware

Functie Als Junior front end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van

Bekijk vacature »

Front-End React Developer

Als Front-End React Developer verbeter je de user experience van onze eigen webapplicaties voor onze collega's binnen Coolblue. Wat doe je als Front-End React Developer bij Coolblue? Als Front-end React Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten met React.js. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Front-end React Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop

Bekijk vacature »

Back End Developer

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

Bekijk vacature »

PHP developer

Functie omschrijving Voor een klein bedrijf in de buurt van Nieuwegein zijn wij per direct op zoek naar een talentvolle PHP developer. Er wordt veel ruimte geboden voor eigen initiateven, waardoor je een mooie stempel kan drukken op jouw eigen werkzaamheden (zowel operationeel als strategisch). Het bedrijf heeft middels externe programmeurs een multimedia platform ontwikkeld, maar willen geleidelijk de ontwikkeling naar binnen halen. Om die reden zoeken zij een communicatieve interne PHP developer die graag meebouwt aan het succesvolle product. Je gaat de volgende werkzaamheden verrichten: Platform beheren en programmeren (PHP, MySQL, JQuery, Javascript, XML & HTML); Communicatie en aansturing

Bekijk vacature »

Technical Asset Specialist Substations

TenneT is growing fast to realize its strategic ambitions. We play a leading role in driving the energy transition. We are looking for a passionate Technical Asset Specialist for substations (onshore and offshore) at our location in Arnhem who will contribute to this and that might be you? Your contribution to TenneT We are searching for a motivated and engaged colleague as a technical asset specialist (onshore and offshore) for instrument transformers and surge arresters, with preferably a strong background in the area of insulation coordination. As a specialist for insulation coordination you are responsible for overarching topics regarding insultation

Bekijk vacature »

Front-end Developer Angular

Dit ga je doen Jouw taken als Front End Developer bestaan uit: Het ontwikkelen van maatwerkoplossingen voor klanten; Het meedenken over nieuwe tools en technieken; Het begeleiden van junioren; Het meewerken aan diverse projecten; Het meedenken in UX/UI design. Hier ga je werken Als Front-End Developer ga je in een Scrum team aan de slag met de nieuwste digitale technologieën om klanten en overheden over de hele wereld te ondersteunen met het ondersteunen van hun software, veelal op het gebied van watermanagement en infra. Door middel van real-time data in combinatie met voorspellende analyses, AI, Deep Learning en Machine Learning

Bekijk vacature »

Robot Programmeur

Een verantwoordelijke baan met leuke uitdagingen. Heb jij ervaring met het programmeren van robots? Kan jij goed samenwerken met collega's die verschillende specialisaties hebben? Ben je oplossingsgericht, analytisch en flexibel? Ga dan aan de slag als Robot Programmeur bij Gibas in Nijkerk! Als Robot Programmeur kom je te werken bij Gibas. Dat betekent dat je gegarandeerd meewerkt aan unieke oplossingen in productieprocessen. Bij elk project moet er opnieuw geëngineerd en geprogrammeerd worden. Dat maakt jouw werk uitdagend! Voordat je robots gaat programmeren komt er het volgende bij kijken: De opdracht gaat van de afdeling Sales naar de afdeling Operations door

Bekijk vacature »

.NET developer WO niveau voor predictive software

Bedrijfsomschrijving Dit bedrijf uit Den Bosch is om precies te zijn 15 medewerkers groot en ze ontwikkelen (predicitve) planning software. Dit doen zij voor allerlei mooie en bekende organisaties (bierbrouwerijen, gemeentes, oliemaatschappijen en diverse multinationals). Wegens meer en grotere vraag vanuit de klanten komen er nu posities vrij voor onder andere een .NET developer. Het bedrijf is goed met openbaar vervoer te bereiken. Functieomschrijving Je komt hier te werken in een team van 3 .NET developers en bent betrokken bij het gehele ontwikkelproces. Dus van idee naar ontwerp en van ontwikkeling tot testen en implementatie. Bij voorkeur ben je niet

Bekijk vacature »

PHP back-end developer gezocht!

Functie Werk je liever zonder druk en keiharde deadlines maar met de focus op kwaliteit? Dan kom je hier op de juiste plek terecht! In Het team bestaat momenteel uit 12 developers, hiernaast werken er collega’s van front-end, UX maar ook marketing/sales en support. In iedere sprint ontwikkel je samen functionaliteiten met als uitdaging om de klanten de beste gebruikerservaring te bieden. Ze bieden een werkplek waar je jezelf kunt blijven ontwikkelen, en mee te werken aan zowel bestaande als nieuwe mogelijkheden. Eisen • HBO werk- en denkniveau (ze kijken niet naar een papiertje) • Je denkt graag mee over

Bekijk vacature »

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

Full Stack PHP Developer

Functieomschrijving Ervaren PHP Developer gezocht! Wij zijn op zoek naar een ervaren PHP Developer die het IT team van een organisatie in de regio Ermelo gaat versterken. Voor deze functie zijn we op zoek naar een enthousiaste en breed georiënteerde IT-er die deze innovatieve organisatie nog een stap verder gaat brengen. Wij zijn op zoek naar iemand die communicatief goed is en die zelfstandig problemen op kan lossen. Je bent verantwoordelijk voor het samenwerken met een externe partij het is hierbij jouw taak om deze partij uit te dagen op het geleverde werk. Het schrijven van concepten aan de AI

Bekijk vacature »

Lead C++ Developer

De rol van Lead C++ Developer Als Lead C++ developer bij KUBUS word je verantwoordelijk voor het implementatie design van requirements en de software architectuur van de desktop applicaties van BIMcollab, ons platform voor 3D model-validatie en issue-management bedoeld om de kwaliteit van 3D design-modellen voor gebouwen te verbeteren. Betere 3D modellen leiden tot betere gebouwen, dus zo draag je bij aan verduurzaming van de gebouwde omgeving met slimmer gebruik van materialen, minder verspilling en energie-efficiënte gebouwen. Een goede gebruikerservaring staat bij ons hoog in het vaandel; we gaan in onze ontwikkeling voor innovatie en kwaliteit. In je rol als

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 »
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/03/2024 03:28:14
 
- 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.