ik ben weer even met php bezig, en zit met het volgende:
Ik wil, wanneer ik form input process, kunnen verifiëren dat de input van mijn website komt, en niet van een form met dezelfde namen vanaf een externe server.
Ik gebruik een client key in mijn forms, maar die is altijd hetzelfde en is gewoon een hidden value, dus in HTML zichtbaar.
Ik dacht dat er een soort functie was in PHp die kan zien waarvan de $_POST en $_GET data komt
Verder hoef je niet eens een input type="hidden" te gebruiken.
Het is nog vele malen veiliger om niet eens een code in de HTML bron te laten komen
Je kunt beter een sessie aanmaken bij het bezoeken van het formulier en deze vullen met een geheime code die in de database staat en soms verandert
bij het submitten van het formulier kun je dan de sessie met de code vergelijken met wat in de database staat.
Dit is het simpelste voorbeeld, zoals ik uitlegde. Dit is niet waterdicht, maar probeer dit zelf maar eens te breken (kopieer de broncode, sla die op in een .htm bestandje, verander de action naar de effectieve url in de url-balk, open het bestand in een andere soort webbrowser, ...)
Tot men hier met de betere tools afkomt (want die zijn er uiteraard), heb je iets.
Wat Jan voorstelt, is trouwens niet zo verschillend dan wat ik doe.
Wat je moet aanpassen:
- Je genereert die zelfde random string.
- Je slaat die string op in de database. Zie dat je de id van dit record te pakken krijgt (bv. met mysql_insert_id() )
- Je geeft die id mee in de hidden input
- Bij het controleren: $_POST['key'] is nu de id van het record. Met die id zoek je dus dat record op, die opgeslagen waarde vergelijk je met $_SESSION['key']
Hiermee omzeil je het wat. Je geeft niet de effectieve code mee naar de gebruiker, maar slechts een id.
[quote=]
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
[/quote]
Thnx Roel, maar zoals de site aangeeft is het wel mogelijk deze variabele in sommige gevallen te manipuleren. Dit is wel nuttig, maar dus niet waterdicht. Thnx voor het extra inzicht :).
Kris, je bedoelt dus dat ik voor elk form een nieuwe key genereer die ik in de database gooi en waarvan ik de key meegeef. I guess that would work! Maar wel net wat heavier on the resources. Lijkt me wel de beste optie tot nu toe :).