Tot een maand geleden kon ik via een paar regels in het script dat gegevens uit een formulier naar ons toe mailt voorkomen dat dit gebeurde van buiten de website.
//zorgen dat script niet van buiten de website wordt aangeroepen
$vorige_url = getenv("HTTP_REFERER");
IF ($vorige_url != "https://www.granietshop.nl/werkbladen/graniet/prijzen.htm"){
echo "Niet toegestaan, stuur ons een e-mail";
exit;}
Door een upgrade van de PHP versie werkte dit niet meer dus heb ik het bovenstaande deel uit het script gehaald, gevolg, het lijkt erop dat het script van elders aangeroepen wordt, ik krijg mails met oningevulde formulieren.
Hoe kan ik ervoor zorgen dat het script weer alleen vanuit de eigen website aangeroepen kan worden?
Een CSRF-aanval dus. Je zou ook met sessies kunnen controleren of het formulier vanaf dezelfde site wordt uitgevoerd.
$_SERVER['HTTP_REFERER'] is overigens eenvoudig te faken.
Of als all-in-one oplossing kiezen voor ReCaptcha 3 Invisible. Deze heeft geen rare puzzels of checkboxen, werkt op zichtbaar logo na vrijwel onzichtbaar, waarna die op de achtergrond een waarde meegeeft. Ook zit hier CSRF-beveiliging in.
Als ik het script deel erin zet komt er altijd de foutmelding "niet toegestaan......
Toen dat deel nog werkte had ik geen last van lege formulieren die gemaild werden, het lijkt erop dat het gewoon grapjassen zijn, niet geautomatiseerd (dan zou ik ook meer "spam" verwachten)
De gegevens worden op een html pagina ingevuld, de spam komt echter van het mail-to script (alleen de veld namen, onderwerp e.d.)
Ik begreep al dat "http_referer" niet meer de juiste manier was om te werken maar de site is al vanaf 2018 in de basis niet meer gewijzigd. De site moet eigenlijk helemaal op de schop maar gezien de afhankelijkheid van de site durven we dat niet aan.
Ik ga kijken of ik met de session variabele wat kan doen.
Je kan tijdens het onderzoek kijken naar de herkomst van IP-adressen. Contact-formulieren zijn al jaren een bron van spam-berichten. Ikzelf heb als maatregel maar ReCaptcha V2 ingebouwd die het een jaar volhield, totdat ze spammers de checkbox-knop konden indrukken. Daarna heb ik ReCaptcha 3 geïnstalleerd die tot op heden alles tegenhoudt, terwijl mijn script momenteel nog vaak wordt aangevallen. Het blijft een kat-en-muis spel, maar tot nu toe sla ik de muizen af voor mijn koelkast.
Misschien moet ik alle spammers maar even in mijn firewall van mijn server gooien :P
Maar als je een contactformulier hebt. Zorg dat je ook geen header-injection toestaat. Contactformulieren zijn ook de bron van spamruns...