Kijken of een gebruiker via een directe link op de pagina is gekomen of vanaf een andere pagina
Voorbeeld:
Iemand klikt op site.nl op een link naar site.nl/nieuw, je kunt dan naar de vorige pagina gaan waarmee je op site.nl terecht komt.
Wanneer iemand site.nl/nieuw opent vanuit whatsapp is er geen vorige pagina beschikbaar want het was een directe link.
Is zoiets te checken?
Misschien via $_SERVER['HTTP_REFERER'], maar het is niet betrouwbaar.
Hoe bedoel je niet betrouwbaar? Dat het te manipuleren is? Dat maakt niet echt uit. Het gaat erom een terug knop te laten zien alleen wanneer er een 'terug' bestaat.
Ook kunnen beveiligings-apps's deze waarde vanwege privacy leeglaten.
UTM-parameters gebruikt, in dit geval utm_source, kun je die meteen gebruiken voor tracking in Google Analytics bijvoorbeeld.
Als je hiervoor Je zou ook een "vinkje" in je $_SESSION kunnen maken. Vinkje niet gezet: gebruiker = "vers" (en daarna het vinkje zetten om op de volgende pagina te zien dat ie al een andere pagina bezocht heeft). Geeft alleen een false negative als iemand je site bezoekt, dan weer terug naar (bijvoorbeeld) WhatsApp gaat, en daar op weer een andere link naar jouw site klikt. Dan is z'n sessie nog geldig, en wordt dit dus als een "volgende pagina" gezien, ipv een nieuw "bezoek via externe link".
Maar wat Ariën zegt werkt ook. Als in de referer niks, of in ieder geval niet je eigen site staat, dan kun je er vanuit gaan dat ie "ergens anders" vandaan komt.
Gewijzigd op 22/01/2021 15:44:28 door Rob Doemaarwat
CSRF-aanvallen. De techniek is als die van $_SERVER['REFERER'], je laat de browser iets meesturen met elk verzoek van jouw pagina zodat je weet dat het niet een link is van een andere pagina.
Dat iets kan zijn een eigen HTTP-header in $_SERVER['HTTP_<eigen_header>'], een cookie in $_COOKIE, een URL-parameter in $_GET of $_REQUEST, of een veld in een HTML-formulier in $_POST of $_REQUEST.
Als je het waterdicht wilt maken kan je gebruik maken van tijdelijk informatie, al dan niet gebonden aan een sessie. Die info kan je dan opslaan in een bestand of in de database die je meestal toch al gebruikt.
Zie de Cheat Sheet Series voor een volledige beschrijving van verschillende technieken tegen CSRF.
Ja dat is mogelijk, vaak zelfs noodzakelijk. Het is nodig bij het tegengaan van Dat iets kan zijn een eigen HTTP-header in $_SERVER['HTTP_<eigen_header>'], een cookie in $_COOKIE, een URL-parameter in $_GET of $_REQUEST, of een veld in een HTML-formulier in $_POST of $_REQUEST.
Als je het waterdicht wilt maken kan je gebruik maken van tijdelijk informatie, al dan niet gebonden aan een sessie. Die info kan je dan opslaan in een bestand of in de database die je meestal toch al gebruikt.
Zie de Cheat Sheet Series voor een volledige beschrijving van verschillende technieken tegen CSRF.
Snelle Jaap op 22/01/2021 11:54:11:
Hoe bedoel je niet betrouwbaar? Dat het te manipuleren is? Dat maakt niet echt uit. Het gaat erom een terug knop te laten zien alleen wanneer er een 'terug' bestaat.
Niet alle browsers sturen een referrer-header mee met de request, zoals WebKit-gebaseerde browsers op Apple-devices.
Als voorbeeld: In de error-pagina van mijn site check ik inderdaad of die leeg is of niet. En als die een waarde heeft, dan plaats ik een 'ga terug' linkje naar de referee. En anders wordt het een JavaScript history(-1) linkje.
Je moet er nooit verplichtingen mee aangaan. Dus vertrouw die waarde NOOIT.
Gewijzigd op 25/01/2021 10:58:24 door - Ariën -