initiator php script achterhalen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul van der Kroon

Paul van der Kroon

08/09/2020 20:27:27
Quote Anchor link
Is er een manier om de initiator van een php script te achterhalen?
Ik bedoel: stel, er is een index.html. In deze html zit een link naar mijnscript.php. Is het dan mogelijk om in mijnscript.php te achterhalen dat deze gestart is door index.html

Ik wil er namelijk zeker van zijn dat de script aangeroepen is door index.html en niet dat iemand in een browser de script aan kan roepen.
 
PHP hulp

PHP hulp

14/04/2021 10:46:21
 
Ozzie PHP

Ozzie PHP

08/09/2020 21:17:26
Quote Anchor link
>> Ik wil er namelijk zeker van zijn dat de script aangeroepen is door index.html en niet dat iemand in een browser de script aan kan roepen.

De beste oplossing is in dat dat geval om index.php buiten de webroot te plaatsen. Dan kan het bestand niet via de browser worden aangeroepen.

Hoe ga je trouwens vanuit index.html een .php bestand aanroepen?
 
Paul van der Kroon

Paul van der Kroon

08/09/2020 23:48:59
Quote Anchor link
Kan toch met een <a href="mijnscript.php">klik hier</a> (bijvoorbeeld?)

Wat ik heb gedaan is natuurlijk ook slechts een voorbeeld. Het gaat voor mij om het principe: is het mogelijk om de script/html te achterhalen in een php script, die het script gestart heeft. Je hebt ook __FILE__ die de scriptnaam teruggeeft. Dus zoiets, maar dan de aanroepende file. Ik ben al een hele tijd aan het zoeken op internet, maar nog niets gevonden. Ook met $_SERVER kan je veel opvragen, maar niet de aanroeper. En als het niet kan, dan is dat maar zo.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/09/2020 23:49:25
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<pre>' . print_r($_SERVER, true) . '</pre>';
?>


En bestudeer de resultaten ;-)
 
Ozzie PHP

Ozzie PHP

09/09/2020 00:00:07
Quote Anchor link
Paul van der Kroon op 08/09/2020 23:48:59:
Kan toch met een <a href="mijnscript.php">klik hier</a> (bijvoorbeeld?)

oké, maar dit is in feite ook gewoon een rechtstreekse aanroep, en als ik je goed begrijp wat dat nu net niet de bedoeling.

Wat wil je precies bereiken? Als je even uitlegt wat je wil, en waarom, dan kunnen we je een passende oplossing geven.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/09/2020 00:04:15
Quote Anchor link
>> <a href="mijnscript.php">klik hier</a>

Dit is slechts een snelkoppeling. Hiermee wordt je pagina nog niet opgevraagd.

Even terug naar het begin...

> Je typt een URL in in je browser, bijvoorbeeld http://mijndomijn.nl/mijnscript.php
> De browser doet een aanvraag (request) aan de webserver
> De webserver ontdekt dat je een URL opvraagt met een .php extensie en zal OP DE SERVER het script starten.
> Als het script beëindigd is (250 milliseconden later) wordt HET RESULTAAT (of de output) van het script teruggestuurd naar de browser.
> De browser bestudeerd dit resultaat en kijkt of het HTML is of een andere data type en als het HTML is dan zal de browser deze HTML parsen ..

PHP werkt en bestaat dus enkel op de webserver. Een client heeft dus eigenlijk geen enkele invloed op een PHP script behalve dan de publiekelijk toegankelijke scripts te kiezen door de juiste URL aan te roepen.
 
Ward van der Put
Moderator

Ward van der Put

09/09/2020 07:20:26
Quote Anchor link
HTTP is stateless (toestandsloos): een individueel HTTP-request wordt los van andere requests beantwoord met een HTTP-response. Wil je een HTTP-systeem in een toestand (state) brengen waarin requests wél afhankelijk zijn van elkaar, dan zul je dat zelf moeten bouwen.

In PHP worden daarvoor meestal sessies gebruikt, totdat je iets ingewikkelders of iets groters met een database nodig hebt.
 
Adoptive Solution

Adoptive Solution

09/09/2020 09:04:38
Quote Anchor link
Om terug te komen op de vraag.

In bestand mijnscript.html

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<p><a href="mijnscript.php">naar mijnscript.php</a></p>


In bestand mijnscript.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if ( $_SERVER['HTTP_REFERER'] == '' )
{

    echo '<p>Geen referer</p>';
}

if ( $_SERVER['HTTP_REFERER'] <> '' )
{

    echo '<p>Komt van <b>' . $_SERVER['HTTP_REFERER'] . '</b></p>';
}

?>


<p>Ga terug naar <a href="mijnscript.html">mijnscript.html</a>.</p>

<p><a href="mijnscript.php">Toon de pagina</a></p>

<p>Of klik in het adresveld van de browser en doe return.</p>
 
- Ariën -
Beheerder

- Ariën -

09/09/2020 10:15:48
Quote Anchor link
Let wel op dat HTTP_REFERER gemanipuleerd kan worden, en onbetrouwbaar kan zijn. Doe er dus geen belangrijke dingen mee.
 
Paul van der Kroon

Paul van der Kroon

09/09/2020 10:18:46
Quote Anchor link
Dank voor alle reacties. De oplossing van Adoptive Solution geeft in beide gevallen "Geen referer". HTTP_REFERER komt ook niet voor bij de server opties.

Ik kreeg altijd van mijn provider een statistiek opgestuurd, met ook vanwaar de website geopend was (dus bijv via Google of een link van een andere pagina). Daarom had ik het vermoeden dat dat ook wordt meegegeven aan het http request en dat het op te vragen is. Blijkbaar is dat niet zo.
Item kan wat mij betreft gesloten worden.
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2020 12:56:11
Quote Anchor link
Indien het niet de bedoeling is dat iemand rechtstreeks een PHP-bestand aanroept, omdat deze ingevoegd wordt (een zogenaamde include) in een ander bestand, dan zul je voorzieningen moeten treffen om dit te voorkomen. Dit kun je bijvoorbeeld bewerkstelligen door dit soort bestanden buiten de webdirectory te plaatsen.

Uit het bovenstaande verhaal wordt niet echt duidelijk wat er aan de hand is. Je zou altijd de access- en wellicht ook je errorlogs kunnen raadplegen om te kijken welke pagina's / bestanden worden opgevraagd en welke statussen worden teruggegeven (zie hieronder).

Een bezoeker of bot kan altijd een niet-bestaande pagina opvragen. Hoe jouw website hier op reageert hangt af van hoe deze geprogrammeerd is. Als je bijvoorbeeld niet expliciet een 404 (pagina niet gevonden) HTTP status code teruggeeft dan zou dit zoekmachines kunnen verwarren omdat jouw site net doet alsof deze pagina "bestaat".

NB alle HTTP-directives worden volgens mij gevuld door je browser. Zoals aangegeven zijn deze niet echt betrouwbaar, noch is het gegarandeerd dat deze altijd ingevuld zijn. Je zou dus altijd eerst moeten controleren of een index bestaat met isset().
Gewijzigd op 09/09/2020 13:03:54 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

09/09/2020 13:58:42
Quote Anchor link
Maar nogmaals mijn vraag ... wat wil je nu precies bereiken? Wil je iets beveiligen?
 
Paul van der Kroon

Paul van der Kroon

09/09/2020 15:10:20
Quote Anchor link
Bedankt Ozzie PHP.
Ik wil inderdaad tegenhouden (beveiligen) dat iemand direct via een url de actie kan uitvoeren die eigenlijk vanuit een andere pagina geïnitieerd moet worden. Dus in eerste instantie wordt er een pagina opgebouwd, die een knop heeft om een andere pagina te starten. Dat wordt gedaan met een <a href=""> gedaan. Het is niet de bedoeling dat iemand die url in een browser gaat intypen en uitvoeren. Als ik dat op de een of andere manier kan tegenhouden...
 
- Ariën -
Beheerder

- Ariën -

09/09/2020 15:15:04
Quote Anchor link
Dan zou ik aan een sessie denken.
 
Ward van der Put
Moderator

Ward van der Put

09/09/2020 15:17:21
Quote Anchor link
Dat kan, zoals gezegd, met een PHP-sessie.

1. In de eerste pagina plant je een vlaggetje in de sessie.

2. In de tweede pagina controleer je of dat vlaggetje bestaat. Bestaat het vlaggetje, dan is de eerste pagina inderdaad al bezocht. Bestaat het niet, dan is de eerste pagina nog niet bezocht tijdens de huidige sessie.
 
Ozzie PHP

Ozzie PHP

09/09/2020 16:05:00
Quote Anchor link
>> Ik wil inderdaad tegenhouden (beveiligen) dat iemand direct via een url de actie kan uitvoeren die eigenlijk vanuit een andere pagina geïnitieerd moet worden.

Kijk, ik had al zo'n vermoeden. Nu komen we ergens.

In de eerste (PHP) pagina:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

# Set request as valid.
define('REQUEST_VALID', true);

?>

In de tweede (PHP) pagina:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

# Abort request if invalid.
if (!defined('REQUEST_VALID')) exit;

?>

Op deze manier hoef je niet met sessies te werken.

Een andere oplossing die ik je zou aanraden is om al je PHP-bestanden buiten de webroot te plaatsen, dan kunnen ze nooit via de browser worden aangeroepen. Maar als dat om een of andere reden niet kan, dan is bovenstaande code de oplossing.

Toevoeging op 09/09/2020 16:08:29:

Ik lees nu je antwoord nogmaals. Als je van pagina "wisselt" via <a href=""> dan zul je wel een cookie of sesie moeten gebruiken. Ik ging er vanuit dat je van de ene naar de andere PHP-pagina gaat. In dat geval werkt mijn oplossing. Maar als je de gebruiker laat klikken op een link, zul je het anders moeten oplossen.
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2020 16:45:19
Quote Anchor link
Het helpt ook om concreet te beschrijven wat je probeert te bereiken, anders moeten we naar oplossingen blijven gissen.
 
Paul van der Kroon

Paul van der Kroon

09/09/2020 21:01:55
Quote Anchor link
Sorry Thomas. Dit was niet mijn bedoeling. Ik heb vanaf het indienen van de vraag, het zo duidelijk mogelijk proberen neer te zetten. Ik probeerde al steeds met voorbeelden mijn vraag te verduidelijken. Blijkbaar ben ik daar niet in geslaagd. Ik zal er de volgende keren beter op letten.
 
Ozzie PHP

Ozzie PHP

09/09/2020 21:25:12
Quote Anchor link
Ik denk dat Thomas vraagt of je het nog een keer wat duidelijker wil uitleggen, zodat hij je beter kan helpen :-)
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2020 22:34:13
Quote Anchor link
Inderdaad. Op dit moment is het blijkbaar een probleem dat een bepaalde pagina / PHP-bestand op een zeker moment rechtstreeks / te vroeg wordt aangeroepen. De vraag is of het echt opgelost kan worden door op een vorige pagina een soort van controle in te bouwen die je mee kunt nemen / over kunt hevelen naar de pagina in kwestie of dat je misschien toch beter aan een andere aanpak kunt denken.

In andere woorden: het is zeer lastig om een soort van concreet voorstel te doen voor een redelijk abstracte probleemstelling.

Ook is het niet helemaal duidelijk waarom het uberhaupt een probleem is dat deze pagina ("mijnscript.php") rechtstreeks aangeroepen kan worden. Indien dit PHP-bestand in de webdirectory staat dan zou dit gewoon moeten kunnen, en is dit normaal gesproken gewoon mogelijk - het bestand is zonder extra toeters en bellen direct opvraagbaar. Anders, als dit toch niet de bedoeling is, is het misschien een kwestie van het bestand verplaatsen naar een niet-rechtstreeks-aanroepbare locatie. Maar voordat iemand zo'n voorstel doet hebben we meer informatie nodig over de aard van het probleem.

Ik mis op dit moment een (analyse van een) concrete situatieschets die leidt tot een probleem, die vervolgens kan leiden tot een oplossing.

Vergelijk het met een doktersbezoek. Indien een patiënt op gesprek komt met vage niet uitgesproken klachten dan kan een arts geen symptomen aanstippen die een mogelijke oorzaak aanwijzen, en kan dan dus ook met geen fatsoen een remedie voorschrijven.
Gewijzigd op 09/09/2020 22:37:43 door Thomas van den Heuvel
 



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.