header location met kenmerk?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

25/07/2015 01:35:50
Quote Anchor link
Hallo allemaal,

Is het eigenlijk mogelijk om aan een header location iets mee te geven waardoor de aangeroepen pagina weet dat het een legitieme aanroep is?

Dus stel, pagina A is gemachtigd om pagina B aan te roepen via header(). Kun je nu vanuit pagina A iets meesturen waardoor pagina B weet dat pagina A hem heeft aangeroepen?

Oh ja, en dan zoek ik een "static" oplossing, dus zonder het gebruik van een database, cookies of sessions.
Gewijzigd op 25/07/2015 01:37:24 door Ozzie PHP
 
PHP hulp

PHP hulp

13/11/2024 07:37:00
 
Ben van Velzen

Ben van Velzen

25/07/2015 01:59:45
Quote Anchor link
Ligt er maar net aan. Zou een header acceptabel zijn? Dus iets als X-Token of iets dergelijks:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (isset($_SERVER['HTTP_X_TOKEN'] && $_SERVER['X_TOKEN'] == '...') {
  header etc
}
?>


Edit: Uiteraard kun je dit niet gebruiken op de target van je redirect, omdat je daar geen headers mee zult krijgen. Je zult daar gebonden zijn aan een cookie, of het IP, waar het laatste niet handig is ivm mogelijke dubbele requests e.d.

Je zou ook een token kunnen berekenen op basis van de huidige tijd, al zal dit meer neerkomen op security through obscurity, waar ik zelf geen groot fan van ben.
Gewijzigd op 25/07/2015 03:50:03 door Ben van Velzen
 
Ozzie PHP

Ozzie PHP

25/07/2015 04:19:35
Quote Anchor link
X_token ken ik niet.

Het idee is dus dat pagina B "ziet" dat hij is aangeroepen door pagina A. Zou het kunnen via een controle van de referer wellicht?
 
Ben van Velzen

Ben van Velzen

25/07/2015 05:01:27
Quote Anchor link
Dit zou je moeten testen. Bij mijn weten stuurt een redirect geen referrer mee. Heb het nooit in de praktijk gecontroleerd.
 
Eddy E

Eddy E

25/07/2015 09:01:40
Quote Anchor link
Meestal gaat dat toch via een token?
Dus Pagina A stuurt naar Pagina_B.php?token=3854734857v8irbge4r83f4bw4rv3489f
En Pagina B controleert of $_GET['token'] == '3854734857v8irbge4r83f4bw4rv3489f' ?

Op https://www.owasp.org/index.php/List_of_useful_HTTP_headers handige informatie.


X-AUTH-TOKEN doet precies dit, maar via een header().

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
header("Location: pagina_b.php");
header("X-AUTH-TOKEN: 123456");
?>


Pagina B:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if($_SERVER['X-AUTH-TOKEN'] == '123456') {}
?>


Wellicht kan je ook dat X-AUTH-TOKEN veranderen naar O-ZZ-IE-TOKEN-GEHEIM....

Toevoeging op 25/07/2015 09:04:10:


Correctie: dat laatste werkt dus: http://zunflappie.nl/phphulp/pagina_a.php

Wellicht kan je via http://php.net/manual/en/features.http-auth.php wel zoiets regelen?

Toevoeging op 25/07/2015 09:29:06:

En via http://evertpot.com/223/ kan je lezen hoe je dit doet.

PS: mocht je pagina_a.php en pagina_b.php af hebben, wil je dat dan even posten? Ik kan het ook wel gebruiken ;)
Gewijzigd op 25/07/2015 09:16:23 door Eddy E
 
Thomas van den Heuvel

Thomas van den Heuvel

25/07/2015 11:22:06
Quote Anchor link
Druist dit (de oorspronkelijke vraag) niet tegen het HTTP protocol zelf in? Bij mijn weten is HTTP stateless, d.w.z., eenmaal op B gearriveerd weet je normaliter (zonder extra voorzieningen zoals cookies, sessies etc.) niet meer dat je van A afkomstig bent. Er wordt via HTTP geen historie opgebouwd of wat dan ook, elke request staat op zichzelf en deze kunnen (en worden) onafhankelijk van elkaar uitgevoerd.

Dit dan vervolgens via HTTP zelf overbruggen klinkt... paradoxaal.

EDIT: de wens om vanuit A op B te kunnen "landen" klinkt als een vorm van applicatie-logica, er zal dus iets aan "geprogrammeerd" moeten worden, ik weet niet of je met HTTP alleen een soort van "valide klikpad" kunt definieren, hoe langer ik er over nadenk, hoe onwaarschijnlijker dit klinkt. Maar ik kan mij vergissen.

En dan de vraag: wil en moet je dit wel via HTTP zelf oplossen, of zijn er andere/makkelijkere manieren. Ik zou dan eerder voor de laatste variant gaan denk ik.

EDIT: en zelfs al krijg je dit voor elkaar, dan zal er ook een soort van afhandeling moeten zijn toch? Dan moet je toch al gebruik maken van een soortement van serverside scriptingtaal? :) Waarom dan niet direct? :)
Gewijzigd op 25/07/2015 11:28:57 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

25/07/2015 16:02:54
Quote Anchor link
@Eddy:

>> Wellicht kan je via http://php.net/manual/en/features.http-auth.php wel zoiets regelen?

Volgens mij gaat dit over het invoeren van een wachtwoord?

@Thomas:

Ik zal even uitleggen wat ik bedoel. Ik zat te denken om straks de klanten naar hun adminpanel te laten gaan (met header) door het typen van een subdomein, bijv. "adminpanel.mijndomein.nl". Ik wil dan dat ze via een header naar de "echte" (maar lastiger te onthouden) URL worden gestuurd, bijv. www.mijndomein.nl/admin/login.php. Ik wil echter dat ze deze URL niet rechtstreeks aanroepen of bookmarken. Het voordeel heirvan kan dan zijn dat als iemand het domein wil bruteforcen, dat deze URL simpelweg niet reageert, omdat ie niet is aangeroepen via "adminpanel.mijndomein.nl". Een ander voordeel is dat ik "www.mijndomein.nl/admin/login" kan wijzigen naar een andere URL als dat ooit nodig mocht zijn, zonder dat een klant daar last van heeft. Die blijft gewoon "adminpanel.mijndomein.nl" gebruiken.

Er hoeft vanaf het subdomein geen ingewikkelde code mee te worden gestuurd. Stel de domeinnaam is foo.nl dan zou adminpanel.foo.nl slechts iets simpels mee te hoeven sturen gebaseerd op de domeinnaam (bijv. "admin-foo.nl") waardoor "www.foo.nl/admin/login" weet dat hij is aangeroepen door het adminpanel subdomein.
 
Thomas van den Heuvel

Thomas van den Heuvel

25/07/2015 19:33:15
Quote Anchor link
Waarom dan niet meteen ozzies-toko.nl/klanten om je klanten in te loggen waar ze via een paneeltje door kunnen klikken naar (en onderwater inloggen in) hun eigen foo.nl? Dan heb je één voordeur voor al je klanten?
 
Ozzie PHP

Ozzie PHP

25/07/2015 20:33:02
Quote Anchor link
Kan, maar dan moeten ze altijd via mijn site inloggen. Ik heb liever dat een domein gewoon "stand-alone" functioneert. Mijn oplossing is daar wel geschikt voor, maar de vraag is dus eigenlijk of ik een "herkenningsvariabele" (altijd dezelfde) kan meegeven van pagina A naar pagina B, zodat pagina B weet dat ie door A is aangeroepen. Kan je zoiets meesturen via header location?
 
Eddy E

Eddy E

25/07/2015 20:36:39
Quote Anchor link
Nee, dat kan dus niet.

Of je moet via dat WWW-AUTHEFICATION een wachtwoord moeten meegeven, en dat op pagina B moeten binnenkrijgen. Zo niet, dan kan je (met header() gewoon ergens anders heen sturen. Dat doet PHP trouwens.
Dus kan je net zo goed een ?token=838947347 meegeven.
 
Ozzie PHP

Ozzie PHP

25/07/2015 21:12:17
Quote Anchor link
Eddy, ik zie in die pagina A van jou wel een referer staan. Ik kan het zelf momenteel niet testen, maar als jij "headert" van pagina A naar pagina B, krijg jij dan op pagina B als referer pagina A binnen?
 
Thomas van den Heuvel

Thomas van den Heuvel

25/07/2015 21:12:39
Quote Anchor link
Daarnaast zou ik ook inzetten op het investeren van het beveiligen van de site(s) zelf, en niet (enkel) de weg er naartoe.
 
Ozzie PHP

Ozzie PHP

25/07/2015 21:40:58
Quote Anchor link
@Thomas, dat spreekt voor zich.
 
Eddy E

Eddy E

25/07/2015 22:25:17
Quote Anchor link
Ozzie PHP op 25/07/2015 21:12:17:
Eddy, ik zie in die pagina A van jou wel een referer staan. Ik kan het zelf momenteel niet testen, maar als jij "headert" van pagina A naar pagina B, krijg jij dan op pagina B als referer pagina A binnen?


Nee.
Pagina_a.php =
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
header("Location: pagina_b.php");
header("X-AUTH-TOKEN: 123456");
?>


Je belandt dus vanzelf op pagina_b.php en daar zie ik geen "pagina_a" staan.
Ook dat "123456" staat er niet bij.
 
Ozzie PHP

Ozzie PHP

25/07/2015 23:30:36
Quote Anchor link
Eddy, voor de duidelijkheid en om misverstanden te voorkomen ... die "pagina_a" zou niet bij de headers zichtbaar moeten zijn, maar in de $_SERVER array. Daar zie j 'm ook niet staan?
 
Eddy E

Eddy E

26/07/2015 14:02:10
Quote Anchor link
Nee, maar wellicht ligt dat aan mijn browser-instellingen: Ghostery, AdblockPro en DO-NOT-TRACK-ME staan allen aan ;)

Edit:

Met alles uit zit er geen verschil in.
Er is geen REFERER-ding aanwezig.
Gewijzigd op 26/07/2015 14:05:03 door Eddy E
 
Ozzie PHP

Ozzie PHP

26/07/2015 14:23:31
Quote Anchor link
Oké ... zonde :-/
Tja, dan weet ik ook zo gauw niet hoe ik dat moet oplossen :(
 
Ward van der Put
Moderator

Ward van der Put

26/07/2015 15:37:19
Quote Anchor link
Ozzie PHP op 25/07/2015 01:35:50:
Oh ja, en dan zoek ik een "static" oplossing, dus zonder het gebruik van een database, cookies of sessions.
Zou je die vereiste durven laten vervallen?
Mét een sessie wordt het namelijk allemaal een stuk makkelijker.

(Meer in het algemeen kun je je daarnaast nog afvragen waarom je geen sessies of databases zou mogen gebruiken als je hele serveromgeving toch al is ingericht op PHP en MySQL. Je hebt zeilen en een buitenboordmotor aan boord, maar je gaat toch liever roeien...?)
 
Ozzie PHP

Ozzie PHP

26/07/2015 16:43:23
Quote Anchor link
>> Mét een sessie wordt het namelijk allemaal een stuk makkelijker.

Dat begrijp ik. Punt is dat ik van een subdomein kom, dus dan wordt het ineens een wat lastiger verhaal. Daarom bij voorkeur niet via een sessie.

De gedachte is heel simpel. Pagina B moet "zien" dat hij is aangeroepen door pagina A (wat en subdomein is). Dus heel simpel:

sub.domein.nl roept www.domein.nl/foo aan en deze laatste "ziet" dat hij is aangeroepen door sub.domein.nl
 
Ward van der Put
Moderator

Ward van der Put

26/07/2015 17:08:11
Quote Anchor link
Als op tijdstip x een user agent y vanaf IP-adres z locatie A bezoekt en dezelfde y en z binnen x + 1 seconde opduikt op locatie B, is er een meer dan redelijke kans dat dit dezelfde client is die een redirect van A naar B volgt.

Daarbij zou je dan ook nog als extra de sessie van A naar B kunnen meeverhuizen door een ?sid=... of een uniek token door te geven in de redirect-URL.
 
Ozzie PHP

Ozzie PHP

26/07/2015 17:15:10
Quote Anchor link
>> Als op tijdstip x een user agent y vanaf IP-adres z locatie A bezoekt en dezelfde y en z binnen x + 1 seconde opduikt op locatie B, is er een meer dan redelijke kans dat dit dezelfde client is die een redirect van A naar B volgt.

Klinkt goed, maar de moeilijkheid is dat de eerste aanroep vanaf een subdomein wordt gedaan. Het bestand wat daar wordt aangeroepen is dan niet gekoppeld aan een specifiek domein. Daarom wordt dat dynamisch verhaal te lastig. Wat jij voorstelt zou een mooie controle kunnen zijn, maar de vraag is dan hoe pagina A het IP-adres en de user-agent doorgeeft aan pagina B. Daar zit 'm de bottleneck.
 

Pagina: 1 2 volgende »



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.