Include und Require - Frage

Alice

Erfahrenes Mitglied
Hallo.

Ich wollte HTML-Code in eine extra Datei auslagern und ins PHP-Skript includen. Dazu habe ich folgende Fragen.

1. Kann ich alles an HTML-Code includen ohne eine Sicherheitslücke zu öffnen? Kann ich ein Formular mit allem was dazu gehört includen?
2. Kann ich auch JS-Code includen?
3. Kann ich auch PHP-Variablen Includen?

Beispiel zu Frage 3:
PHP:
$Variable='Ich bin eine Variable';
PHP:
$Variable='Ordner/Avatars/';
PHP:
$Variable=$Ordner.$Avatars;

Ich include den HTML-Code so:
PHP:
<?php require('./PHP/PHP-Include.php'); ?>
Wäre es so richtig?

Wenn ich HTML-Code Includen will, kann ich dan auch mitten im Code einfach require('./PHP/PHP-Include.php'); einfügen oder muss der Code in PHP-Start-Tag und PHP-End-tag gesetzt werden?
 
Hallo yaslaw. :)

Du hast ja mein PHP-Skript gesehen. Ich möchte den HTML-Code der vorher quasi um das PHP-Skript herum (in einer Datei) war auslagern. Kann man eigentlich irgendwie sehen das HTML-Code includet wurde?

Zu den Beispielen:
Ich habe gelesen das die Befehle Include und Require Sicherheitslücken öffnen können. Nur verstehe ich nicht wann das genau passiert.

ich definiere eine Variable in der PHP-Include.php Datei:
PHP:
$Variable='Ordner/Avatars/';

Die Variable "$Variable" möchte ich jetzt in anderen PHP-Skripts verwenden. Wie genau muss ich das einbauen damit keine Sicherheitslücke geöffnet wird?
 
Sichehrehitslücken musst du andere fragen...

Hab mal rasch einen kleinen Test gemacht, der dir Zeigt wie das zusammenabreiten kann
- HTML
- Variablen
- variable Includes

inc.php
PHP:
<b>Fetter Text</b>
<br />
<?php 
    echo $foo;
    $bar='bar'; 
?>

test.php
PHP:
<?php
$fileForInclude = 'inc.php';
$foo = 'foo';
include($fileForInclude);
echo $bar;
?>

Ausagbe
Fetter Text
foobar
 
Die Sicherheitslücken werden können geöffnet werden, falls du Werte aus der URL direkt im Befehl verarbeitest und nicht vorher prüfst oder, sogar noch besser, eine Whitelist einsetzt.

Beispiel:
PHP:
<?php
include($_GET['site']);
?>
Mal als ganz schlechtes Beispiel.
Dadurch kann sich ein Nutzer Zugriff auf eventuelle Konfigurationsdateien o. ä. zugreifen.

Noch kritischer wird das, wenn die Option allow_url_include aktiv ist, dann kann der Nutzer sogar Dateien von anderen Webserver einbinden und Fremd- bzw. Schadcode ausführen.
 
Das Skript soll aus mehreren Variablen eine URL erstellen, um an die nötigen Grafiken zu kommen.

Beispiel:

Die Grafiken sind in den Ordner:

Ordner/Noch-Ein-Ordner/Image-A/
Ordner/Noch-Ein-Ordner/Image-B/
Ordner/Noch-Ein-Ordner/Image-C/

gespeichert.

Inhalt der Inc.php
PHP:
$Pfad1='Ordner/';
$Pfad2='Noch-Ein-Ordner/';
$Pfad1='Image-'.$VAR.'/'; // Wert A, B oder C wird durch ein Formularfeld (Radio-Button) ermittelt

Inhalt der Test.php
PHP:
Grafiken = $Pfad1.$Pfad2.$Pfad3;

Wäre das so okey und sicher?

Edit:

Ich habe da noch eine Frage.

Wenn ich zwei verschiedene Dateien nacheinander Include, vermischt sich der Quelltest. Wie kann ich das problem lösen?

PHP:
require('./PHP/PHP-Include1.php');

require('./PHP/PHP-Include2.php');

Inhalt von PHP-Include1.php:
HTML:
        <table align="center" border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse" width="100%">
          <tr>
            <td width="100%" align="center"><b>HTML-Code 1</b></td>
          </tr>
        </table>

Inhalt von PHP-Include2.php:
HTML:
        <table align="center" border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse" width="100%">
          <tr>
            <td width="100%" align="center"><b>HTML-Code 2</b></td>
          </tr>
        </table>

Ausgabe (Quelltext):
HTML:
        <table align="center" border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse" width="100%">
          <tr>
            <td width="100%" align="center"><b>HTML-Code 1</b></td>
          </tr>
        </table><table align="center" border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse" width="100%">
          <tr>
            <td width="100%" align="center"><b>HTML-Code 1</b></td>
          </tr>
        </table>
 
Zuletzt bearbeitet:
Ja. Sofern du bei Grafiken noch ein $ davor setzt, damit es auch eine Variable ist.

Nachtrag:
Aber Grafiken kann man nicht mit include() oder reqiure() öffnen....
 
Nachtrag:
Aber Grafiken kann man nicht mit include() oder reqiure() öffnen....

Ich möchte ja nur den Pfad zum Grafik-Ordner definieren. Also das Skript muss ja wissen wo die Grafiken gespeichert sind. Also ist das keine Sicherheitlücke?

Ich hatte meinen Beitrag (Siehe oben) editiert. Vielleicht kannst du mir dabei auch noch helfen? :)
 
Grundsätzlich nicht, da es ja ein relativ kleiner Wirkungsraum ist, aber aus Sicherheitsgründen, man weiß nie was da so alles reinkommt, würde ich es so machen:

PHP:
$whitelist = array('A', 'B', 'C');
if(in_array($_POST['radiobutton'], $array))
{
  $var = $_POST['radiobutton'];  // Auswahl im Formular ist ok
}
else
{
  $var = 'A'; // Standardwert, es wurde versucht einen anderen Wert zu übermitteln
}
 
Zurück