Includen von Externen Seiten verbieten!

PHP-Fan

Erfahrenes Mitglied
Hallo,

ein Kollege hat mich auf eine sehr große Sicherheitslücke auf meiner Seite hingewiesen. Und zwar kann man per Include externe Seiten auf meiner Anzeigen und dadurch ist das hacken möglich.

Meine Frage: Ist es möglich das Includen von externen Seiten (zuverlässig) zu sperren? Oder sollte ich lieber eine sicherere Alternative wählen? (Welche?).

Meine Includ INDEX sieht so aus:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Greatest Deejays</title>

<link rel="stylesheet" type="text/css" href="style.css" />
</head>

<body>
<div id="container">
<table width="820" border="0" cellpadding="0" cellspacing="0">
<tr><td width="695">
<table width="695" border="0" cellpadding="0" cellspacing="0">
<tr><td width="695">
<img src="Bilder/index1d_01.gif" width="695" height="26" border="0" alt=""></td>
</tr>
<tr>
<td width="695">
<table width="695" border="0" cellpadding="0" cellspacing="0"  background="Bilder/bg.gif">
<td width="175" valign="top"><p><img src="Bilder/index1d_03.gif" width="175" height="156" border="0" alt="">
</p>
    <p>&nbsp;</p>
    <table width="175" border="0" cellpadding="0" cellspacing="0"><tr><td width="12"></td><td width="163">

<div id="navi">
 <div class="menuhead">.: Allgemein </div><br>
	<div class="menuItem"><a href="index.php">&nbsp;&nbsp; » Startseite </a></div>
      <div class="menuItem"><a href="index.php?site=dls.php">&nbsp;&nbsp; » Downloads </a></div>
	<div class="menuItem"><a href="index.php?site=release_infos.php">&nbsp;&nbsp; » Release Infos </a></div>
	<div class="menuItem"><a href="index.php?site=main.php&open=search">&nbsp;&nbsp; » Suche</a></div>
      <div class="menuItem"><a href="index.php?site=gb.php">&nbsp;&nbsp; » <b>Gästebuch</b> </a></div>
      <div class="menuItem"><a href="index.php?site=links.php">&nbsp;&nbsp; » Links </a></div>
      <div class="menuItem">&nbsp;</div>

<div align="center">
<div class="menuItem"><iframe src="check_users.php" frameborder=0 width="165" height="12" name="users"></iframe></div>
<div class="menuItem">&nbsp;</iframe></div>

</td></tr></table></div>
</td><td width="520" valign="top"><img src="Bilder/content.gif" width="520" height="16" border="0" alt=""><table width="520" border="0" cellpadding="0" cellspacing="0"><tr><td width="25"></td><td width="480"></center><?
$site = (isset ($_REQUEST['site'])) ? $_REQUEST['site'] : '';
$host=$_SERVER['HTTP_HOST'];

if($site=="") {
// News System Include

include("http://$host/main.php?open=news");

}
  else {
			include($site);
}
?>

</td><td width="15"></td></tr></table> </td></tr></table>
</td></tr>
<tr><td valign="top"><img src="Bilder/footer.gif" width="695" height="72" border="0" alt=""> </td></tr></table></td><td width="125" valign="top"><TABLE WIDTH="125" BORDER="0" CELLPADDING="0" CELLSPACING="0" background="Bilder/naviright_02.gif" bgcolor="#FFFFFF">
	<TR>
		<TD>
			<IMG SRC="Bilder/naviright_01.gif" WIDTH=125 HEIGHT=32 ALT=""></TD>
	</TR>
<tr><td><TABLE WIDTH="125" BORDER="0" CELLPADDING="0" CELLSPACING="0"><tr><td width="15"></td><td width="95"><?
require("http://$host/main.php?open=newest5"); ?>
</td><td width="15"></td></tr></table></td></tr>
	<TR>
		<TD>
			<IMG SRC="Bilder/naviright_03.gif" WIDTH=125 HEIGHT=28 ALT=""></TD>
	</TR>
</TABLE></td></tr></table>    </div>

</BODY>
</HEAD
></HTML>
 
Zuletzt bearbeitet:
Du solltest, bspw. per switch, selbst festlegen, welche Dateien includet werden können
Beispiel:
PHP:
switch($site)
  {
    case 'bla':
      include("http://$host/main.php?open=bla");
        break;
    case 'blubb':
      include("http://$host/main.php?open=blubb");
        break;
    default:
      include("http://$host/main.php?open=news");

}
Es ist übrigens sehr unpassend, Dateien über HTTP anzufordern.... dadurch explodiert dein Traffic, weil deine eigenen Dateien wie fremde behandelt werden.
Ist schon klar, dass es sein muss, wenn du Parameter per URL übergeben willst, aber verzichte lieber drauf und definiere stattdessen eine Variable $open im Skript, darauf kann die main.php dann zugreifen sobald sie includet wurde.
 
Sven Mintel hat gesagt.:
Du solltest, bspw. per switch, selbst festlegen, welche Dateien includet werden können
Beispiel:
PHP:
switch($site)
  {
    case 'bla':
      include("http://$host/main.php?open=bla");
        break;
    case 'blubb':
      include("http://$host/main.php?open=blubb");
        break;
    default:
      include("http://$host/main.php?open=news");

}
Es ist übrigens sehr unpassend, Dateien über HTTP anzufordern.... dadurch explodiert dein Traffic, weil deine eigenen Dateien wie fremde behandelt werden.
Ist schon klar, dass es sein muss, wenn du Parameter per URL übergeben willst, aber verzichte lieber drauf und definiere stattdessen eine Variable $open im Skript, darauf kann die main.php dann zugreifen sobald sie includet wurde.

Vielen Dank erst eimmal. Obereres habe ich hoffentlich verstanden und werde ich gleich mal ausprobieren.

Letzteres habe ich auch verstanden weiß aber nicht ganz wie ich das umsetzen sollte. Vielen Dank schonmal für deie Tipps!

Schöne grüße aus Düsseldorf
 
PHP-Fan hat gesagt.:
Letzteres habe ich auch verstanden weiß aber nicht ganz wie ich das umsetzen sollte. Vielen Dank schonmal für deie Tipps!

Mal vorrausgesetzt, du willst immer die main.php includen...würde es so aussehen:
PHP:
switch($site)
  {
    case 'bla':
      $open='bla';
        break;
    case 'blubb':
      $open='blubb';
        break;
    default:
      $open='news';
  }  
include('main.php');
in der main.php hättest du dann die Variable $open verfügbar...anhand der du dann fortfahren kannst.
 
Zurück