Hallo,

Ik heb een contact formulier met een eenvoudige som-captcha (5+6=) waarbij de cijfers random zijn, op basis van mt_rand(). De uitkomst vd som zit ook als verborgen (hidden) veld in hetzelfde formulier, zodat mijn script kan vergelijken of bezoeker de juiste uitkomst heeft ingevuld. Uiteraard heb ik deze waarde gecodeerd erin staan, middels base64_encode(). Werkt prima.

Echter werd ik erop gewezen dat kwaadwillenden dit eenvoudig kunnen omzeilen, door de HTTP request te onderscheppen nadat op verzenden is gedrukt. Deze request bevat (oa) de ingetypte uitkomst én de gecodeerde uitkomst, en als die overeenkomen kan deze kwaadwillende eindeloos formulier inzendingen doen.

Hoe is dit op te lossen? Ik zou ipv een verborgen veld een sessie kunnen starten, maar is er ook een andere (eenvoudige) oplossing?

Groeten, Guido
Thanks, wist niet dat het zo eenvoudig was. In mijn geval geen secure want er zijn mogelijk gebruikers zonder HTTPS. Dus dan wordt het:

$httponly = true
session_set_cookie_params($httponly);
session_start();
Waarom zou je geen HTTPS gebruiken?
Betreft een WordPress plugin en ik weet niet of gebruiker een veilige of niet veilige verbinding heeft.
Ja, of ik moet een extra check doen op type verbinding?

Guido
Dwing https af in .htaccess, of gebruik hsts in . htaccess.
Kwam er vandaag achter dat WordPress het gebruik van sessies afwijst, dus ik ga het op een andere manier oplossen. WordPress gebruikt zogenaamde transients voor tijdelijke opslag van data.
Toch bedankt iedereen!

Guido
Guido - op 16/09/2023 15:36:18
In mijn geval geen secure want er zijn mogelijk gebruikers zonder HTTPS.

Serieus? Het is 2023, HTTPS is de standaard anders word je site zo ongeveer geweigerd door moderne browsers. TLS-certificaten zijn zelfs gratis te krijgen via Let's Encrypt en te automatiseren via ACME.
Gebruikers anno nu zonder HTTPS zijn echte losers. Daar wil je je niet eens mee associëren.
Daar gaat het niet om, de plugin kan door iemand zonder HTTPS geïnstalleerd worden en dat wil je ondersteunen. Daarom niets forceren.

Guido
Juist HTTPS forceren dus.
Guido - op 17/09/2023 16:16:54

Daar gaat het niet om, de plugin kan door iemand zonder HTTPS geïnstalleerd worden en dat wil je ondersteunen. Daarom niets forceren.

HTTP op intranet zou nog kunnen, maar dat is meestal niet waar je Wordpress voor gebruikt.
Met HTTP kan iedereen alles onderscheppen, je hoeft maar mee te kijken naar het netwerkverkeer via Wireshark of een andere tool.

TLS is gewoon een absolute randvoorwaarde, zonder versleuteling begin je niets tegen onderscheppen door derden.

Reageren