readfile via alternatieve poort
Via onderstaand script probeer ik een bestand op een webserver in mijn eigen netwerk te benaderen.
Aangezien ik niet wil dat de bezoeker van de website mijn ipadres te zien krijgt, doe ik dat op onderstaande manier. Echter moet ik een alternatieve poort opgeven (180), maar dat werkt niet met readfile.
Weet iemand hoe ik dat op kan lossen?
Alvast bedankt!
De code:
Probeer het eens met file_get_contents().
Zelf zou ik waarschijnlijk voor een reverse proxy kiezen. In je apache-config zou je dan iets kunnen opnemen als
of
Dit werkt overigens niet in je .htaccess; de regels moeten dus echt in je httpd.conf staan.
Gewijzigd op 11/09/2014 19:09:55 door Willem vp
Ik heb helaas geen toegang tot httpd.conf, aangezien de "zichtbare" website draait op gehuurde hostingruimte.
Wel kan ik daar een DNS-record toevoegen en deze laten doorverwijzen naar de webserver in mijn eigen netwerk.
Kan ik daarmee dit probleem omzeilen? Zo ja, welk DNS-type moet ik gebruiken om ook een poort op te kunnen geven?
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$aContext = array('http' => array('proxy' => 'http://myip:180','request_fulluri' => True,),);
$cxContext = stream_context_create($aContext);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=downloadfilename.zip");
file_get_contents("http://myip/subfolder/serverfilename.zip", False, $cxContext);
?>
$aContext = array('http' => array('proxy' => 'http://myip:180','request_fulluri' => True,),);
$cxContext = stream_context_create($aContext);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=downloadfilename.zip");
file_get_contents("http://myip/subfolder/serverfilename.zip", False, $cxContext);
?>
bijvoorbeeld dit simpele scriptje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// gebruik @ voor file_get_contents anders kan hij een foutmelding geven met de url er in.
$content = @file_get_contents('http://66.29.212.110/ajax/ajax_info.txt');
if($content === FALSE)
$content = 'Helaas zijn de door u opgevraagde gegevens op dit moment niet beschikbaar.';
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
// gebruik @ voor file_get_contents anders kan hij een foutmelding geven met de url er in.
$content = @file_get_contents('http://66.29.212.110/ajax/ajax_info.txt');
if($content === FALSE)
$content = 'Helaas zijn de door u opgevraagde gegevens op dit moment niet beschikbaar.';
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
stuurt enkel de volgende HTML naar de gebruiker:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<p>AJAX is not a new programming language.</p>
<p>AJAX is a technique for creating fast and dynamic web pages.</p></body>
</html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<p>AJAX is not a new programming language.</p>
<p>AJAX is a technique for creating fast and dynamic web pages.</p></body>
</html>
Conclusie: Het is niet nodig om dit via een alternatieve poort te doen.
Gewijzigd op 19/09/2014 14:51:16 door Frank Nietbelangrijk
> webserver in mijn eigen netwerk.
> Kan ik daarmee dit probleem omzeilen? Zo ja, welk DNS-type moet ik gebruiken
> om ook een poort op te kunnen geven?
Kort antwoord: nee. DNS verzorgt alleen de vertaling van een naam naar een IP-adres (en andersom). Poorten zijn daar geen onderdeel van.
> Ik gebruik nu onderstaande code, maar dit levert nog steeds geen werkbaar
> resultaat op. Weet iemand wat er fout gaat?
Wat versta je precies onder "geen werkbaar resultaat"? Dat is namelijk een vage kreet, waardoor het lastig wordt om mee te denken aan een oplossing. Wordt er niets gelezen? Is de data verminkt? Wordt de data wel gelezen, maar komt die niet bij de gebruiker?
Dat laatste zou ik me voor kunnen stellen, want je leest wel de data in, maar die gooi je vervolgens meteen weg, omdat je niets met de return value van file_get_contents() doet. Snelle oplossing: zet er "print" voor. Dus: "print file_get_contents(...)"
Firewall zou nog voor probLemen kunnen zorgen bij een rare poort.
Verder: readfile stuurt de inhoud direct door, waar filegetcontents deze eerst in xijn geheel inleest. Kan dus een geheugen probleem opleveren