Dubbele post voorkomen, history backbutton

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ferdi R

Ferdi R

14/04/2015 13:56:15
Quote Anchor link
Ik zoek naar een oplossing hoe ik kan voorkomen dat iemand een formulier invult en daarna terug gaat via de history button van de browser en dan de waardes weer opnieuw kan invoeren.

F5 refresh is al voorkomen dat ik een redirect gebruik maar gebruikers kunnen weer terug naar het ingevulde formulier.

Wie weet hoe ik dat zal kunnen aanpakken?
 
PHP hulp

PHP hulp

03/03/2025 07:59:57
 
Thomas van den Heuvel

Thomas van den Heuvel

14/04/2015 14:06:10
Quote Anchor link
Het probleem is een beetje: hoe kun je een gebruiker echt uniek identificeren?

Je zou kunnen gaan voor een volgende opzet: om een formulier in te kunnen vullen moet iemand een token hebben. Dit token kun je aanvragen middels een e-mailadres. En je maakt het zo dat je slechts 1 token aan kunt vragen per e-mailadres.

Heb je nog steeds het probleem bij mensen met meerdere e-mailadressen, maar dan ligt iig de lat een stuk hoger denk ik.

Of eenvoudigere oplossingen, maar die werken wellicht minder vaak of zijn onhandig:
- controle op IP-adres; het kan zijn dat een groep mensen naar buiten toe hetzelfde IP hebben, deze wil je niet op voorhand benadelen
- controle op cookie; maar deze kan iemand eenvoudig verwijderen omdat dit client side is.

Hoe beter je oplossing, hoe complexer waarschijnlijk.
 
- Ariën  -
Beheerder

- Ariën -

14/04/2015 14:35:13
Quote Anchor link
De md5() waarde van het bericht in een sessie opslaan? En deze na een minuut verwijderen.
Gewijzigd op 14/04/2015 14:35:40 door - Ariën -
 
- wes  -

- wes -

14/04/2015 15:18:52
Quote Anchor link
Met een csrf-token kan je 2 vliegen in 1 klap slaan. En je bent veiliger en je vangt dit probleem ook (deels) af
 
Thomas van den Heuvel

Thomas van den Heuvel

14/04/2015 16:23:09
Quote Anchor link
Quote:
De md5() waarde van het bericht in een sessie opslaan? En deze na een minuut verwijderen.

1 karakter aanpassen en je bent hier al omheen?
EDIT: of je sessiecookie weggooien

Quote:
Met een csrf-token kan je 2 vliegen in 1 klap slaan. En je bent veiliger en je vangt dit probleem ook (deels) af

Dit lost een ander probleem op denk ik.

Als ik de topicstarter goed begrijp zoekt hij een manier om ervoor te zorgen dat iemand maar 1x een formulier in kan dienen. Iets soortgelijks doe je toch ook als je (op verzoek) eenmalig een enquete invult? Daarbij krijgt men ook een token toegestuurd waarbij men toegang krijgt tot de enquete.
Gewijzigd op 14/04/2015 16:23:44 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

14/04/2015 16:25:44
Quote Anchor link
Thomas van den Heuvel op 14/04/2015 16:23:09:
Quote:
De md5() waarde van het bericht in een sessie opslaan? En deze na een minuut verwijderen.

1 karakter aanpassen en je bent hier al omheen?
EDIT: of je sessiecookie weggooien

Dat weet ik, maar ik heb een groot vermoeden dat de TS een oplossing zoekt om door userfoutjes berichten niet dubbel door te sturen.
 
Ferdi R

Ferdi R

14/04/2015 16:53:10
Quote Anchor link
Ik heb nu een token gebruikt die ik met de gegevens opsla in de DB, bij Chrome en IE werkt het goed want als je terug gaat/navigeert naar het formulier dan staat het zelfde token in de hidden input (broncode) die is gebruikt bij het invullen van de form dus ik hoef bij een dubbele post alleen maar te machten en diegene een foutmelding geven of door te sturen naar een blanke formulier of naar de index.

Alleen bij FireFox werkt het niet, want als je terug gaat dan maakt FireFox een nieuwe token aan en wordt de token die mee werd gestuurd niet gebruikt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

14/04/2015 17:09:28
Quote Anchor link
Ferdi R op 14/04/2015 16:53:10:
Alleen bij FireFox werkt het niet, want als je terug gaat dan maakt FireFox een nieuwe token aan en wordt de token die mee werd gestuurd niet gebruikt.


Dat zou betekenen dat Firefox zijn cache niet gebruikt maar de pagina opnieuw download. De ingevulde gegevens zouden dan leeg moeten zijn (of een standaard waarde hebben), zeg maar dezelfde situatie als dat de pagina de eerste keer door een gebruiker opgevraagd wordt. De gebruiker moet dan alles al opnieuw invullen wil deze nog een keer gepost worden.. zal niet zo vaak gebeuren lijkt me?
 
Thomas van den Heuvel

Thomas van den Heuvel

14/04/2015 17:21:02
Quote Anchor link
Je moet natuurlijk ook onthouden dat een formulier al een keer is ingevuld met het unieke token wat maar 1x (op verzoek) verstrekt is aan een specifieke gebruiker (bijvoorbeeld via e-mail).

Dat is een redelijke sure-safe manier om te garanderen dat iemand maar 1x (per e-mailadres) een formulier indient.
 
Ferdi R

Ferdi R

14/04/2015 18:22:54
Quote Anchor link
Nu werkt het in Chrome ook niet meer, net nog wel.

Ik denk dat ik het anders ga doen, Ik zet de token in een cookie als de gebruiker op de knop "naar formulier" klikt.
De cookie/token voer ik dan mee met de gegevens in de DB zodat ik daarmee kan matchen, De gebruiker kan alleen weer nieuwe gegevens invoeren via de knop "naar formulier" en krijgt dan een nieuwe cookie voor een nieuwe invoer.

Toevoeging op 14/04/2015 19:02:21:

Ahah, nu merk ik dat als je een cookie voor de gebruiker aanmaakt op een pagina en hem doorstuurt en de gebruiker wil terug navigeren dat de browser dan een lege pagina laat zien omdat daar een cookie is aangemaakt.

Op zo'n manier wordt het formulier niet meer getoond en dan kan de gebruiker niets anders dan een pagina verder terug en opnieuw beginnen.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/04/2015 19:29:08
Quote Anchor link
Als het mogelijk moet zijn om het formulier meerdere keren in te vullen (maar niet elke keer met "dezelfde" waarden):

Er zijn zelfs addons voor om formulieren automatisch in te vullen...

Wat je wilt is een beetje tegenstrijdig.

Je wilt dat mensen formulieren kunnen invullen, maar ook weer niet?

Stop het formulier achter een login als je hier meer controle over wilt hebben.
Gewijzigd op 14/04/2015 19:30:00 door Thomas van den Heuvel
 



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.