Kijken of een gebruiker via een directe link op de pagina is gekomen of vanaf een andere pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

22/01/2021 11:25:03
Quote Anchor link
Is het mogelijk om te zien met PHP of een gebruiker direct op een link is gekomen (bijvoorbeeld via een link uit whatsapp oid) of vanaf een andere pagina? Het gaat erom dat ik moet checken of er een vorige pagina is of niet.

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?
 
PHP hulp

PHP hulp

24/11/2024 11:17:15
 
- Ariën  -
Beheerder

- Ariën -

22/01/2021 11:35:34
Quote Anchor link
Misschien via $_SERVER['HTTP_REFERER'], maar het is niet betrouwbaar.
 
Snelle Jaap

Snelle Jaap

22/01/2021 11:54:11
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

22/01/2021 12:00:23
Quote Anchor link
Yep, het is te manipuleren.
Ook kunnen beveiligings-apps's deze waarde vanwege privacy leeglaten.
 
Ward van der Put
Moderator

Ward van der Put

22/01/2021 15:01:34
Quote Anchor link
Als je hiervoor UTM-parameters gebruikt, in dit geval utm_source, kun je die meteen gebruiken voor tracking in Google Analytics bijvoorbeeld.
 
Rob Doemaarwat

Rob Doemaarwat

22/01/2021 15:43:09
Quote Anchor link
@Ward: moet degene die de link in WhatsApp plakt natuurlijk wel even netjes die UTM parameters er achter plakken. Meestal gaat het toch van "eh, dis een coole site, die ga ik even sharen met m'n matties" - en dan zetten ze gewoon de URL door die op dat moment boven in beeld staat.

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
 

22/01/2021 21:18:27
Quote Anchor link
Ja dat is mogelijk, vaak zelfs noodzakelijk. Het is nodig bij het tegengaan van 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.
 
Willem vp

Willem vp

25/01/2021 01:36:26
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

25/01/2021 10:56:24
Quote Anchor link
Van de onbetrouwbaarheid in de referer-check ben ik mij al vanaf begin af aan bewust.

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 -
 



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.