$_POST Unset?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel binnen als

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 »

SQL Database developer

Functie omschrijving Wil jij meewerken aan het creëren van slimme software om magazijnen als een geoliede machine te laten lopen? Wij zoeken een zorgvuldig persoon, iemand die niet snel de hand omdraait voor complexe algoritmes. Denk jij dat jij de SQL ontwikkelaar bent die wij zoeken? Lees snel verder en wie weet zitten we binnenkort samen aan tafel! Jouw werkzaamheden zullen er als volgt uitzien: Je houdt je bezig met het ontwerpen en ontwikkelen van MS SQL server databases, dit doe je met T-SQL als programmeer laag. Je gaat aan high-end software oplossingen werken, dit doe je voor de optimalisatie

Bekijk vacature »

Software programmeur

Functieomschrijving Voor een erkende werkgever in de regio van Goes zijn wij op zoek naar een enthousiaste software programmeur met PHP/Symfony ervaring. Een gedreven persoon die het development team komt versterken met het aanpakken van complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor zowel professionele als persoonlijke groei? Lees dan snel verder! Dit ga je doen: Beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Testen en door ontwikkelen van software; Ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Mendix Developer

Functie Wat ga je doen als Mendix Developer? We leven in een wereld die snel ontwikkelt en veranderd, ook nemen bedrijfsbelangen toe en blijken risico’s moeilijker in te schatten, daarom wij op zoek naar Junior, Medior en Senior Developers die bedrijven kunnen helpen met hun screeningproces en zorgen dat deze efficiënt en 100 procent AVG compliant is. Het concept achter Mendix is duidelijk. De klant heeft een vraag/probleem. Dit kunnen we door middel van slimme software oplossen. In plaats van te werken met de nieuwste technieken en tools, wordt er gekozen voor het implementeren en maken van software dat op

Bekijk vacature »

Full Stack .NET Developer

Dit ga je doen Als developer nieuwe gave features ontwikkelen; Werken met technieken als C#, Angular 12 en Javascript,; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een team van 7 professionals ben je als Full Stack .NET Developer verantwoordelijk voor het ontwikkelen van applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Wil je van meerwaarde

Bekijk vacature »

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

Bekijk vacature »

Belastingdienst - Freelance Applicatieontwikkelaar

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. Hybride. Kantoordagen in Utrecht, incidenteel in Apeldoorn Functieomschrijving: De afdeling IV – Generieke Voorzieningen – Interactie Online is onderdeel van de keten Interactie. De missie van de keten is: “het faciliteren van de interactie met alle burgers, bedrijven en hun vertegenwoordigers om hen in staat te stellen aan hun fiscale verplichtingen te voldoen en aanspraak te maken op hun rechten.” De afdeling Interactie Online heeft een belangrijke bijdrage binnen deze keten. Dit door het ontwikkelen

Bekijk vacature »

Frontend Developer

Dit ga je doen Door ontwikkelen van het online platform Deel uitmaken van verschillende ontwikkelteams Meedenken over UI/UX vraagstukken Uitdragen van Front-end binnen de organisatie Hier ga je werken Deze organisatie, gevestigd in de omgeving van Amsterdam, is een grote onderwijs instelling met meerdere vestigingen en een groot aantal studenten. Zo telt deze organisatie +/- 35.000 gebruikers. Bij deze organisatie staat jouw ontwikkeling centraal en is er veel ruimte voor eigen initiatieven. In samenwerking met jouw team ga jij de online omgeving verder ontwikkelen. In de rol van Front end Developer zal jij 50% van jouw tijd werken in het

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

PHP Developer

Dit ga je doen Je werkt nauw samen met het websitebureau aan de ontwikkeling en optimalisering van het internationale platform; Je ziet nieuwe webshops op en voert optimalisaties door; Je bouwt aan technische, functioneel en commercial resultaat; Je vindt het leuk om zelfstandig binnen een internationale organisatie te werken, maar krijgt ook energie om samen met collega's te werken. Hier ga je werken Voor een bedrijf in de regio Rotterdam zijn wij opzoek naar een PHP Developer. Je wordt onderdeel van het communicatieteam en gaat je bezighouden met het optimaliseren van de website van dit internationale bedrijf. Je schakelt veel

Bekijk vacature »

Belastingdienst - Freelance Senior Cobol Applicati

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 7 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Functieomschrijving: In de applicatie ETM zijn nu de inningsvoorzieningen voor ongeveer 25 aangifte- en aanslagmiddelen opgenomen. ETM is een extern aangeschafte service en het huidige contract met leverancier Oracle loopt af op 31-12-2022. Het programma uitfaseren ETM heeft als doel om vervanging te realiseren waarmee alle nu in gebruik zijnde ETM ondersteuning wordt overgenomen in nieuwe Inningsvoorzieningen om de continuïteit van de inningsprocessen te waarborgen. Eén van de inningsvoorzieningen die voor het einde van 31-12-2022

Bekijk vacature »

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 »

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 »
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

25/04/2024 17:38:05
 
- 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.