php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Bewertung: Bewertung: 7 Stimmen, 5,00 durchschnittlich.
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 16-10-2011, 16:00
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard Sicheres include mit intelligenter whitelist

Hi Community,

in Sachen PHP bin ich ein totaler Neuling. Dadurch dass ich auf meiner Webseite unbedingt Strict haben wollte kam ich um PHP und include() nicht herum, da ich nicht jede Seite ändern wollte, bei z.B. neuen Links etc.

Nun habe ich mich einige Zeit herumgetrieben und alles mögliche gelesen.
Damit der include Befehl wirklich sicher ist, scheint es wohl mit einer whitelist am besten gelöst zu sein.

Auf meiner Seite habe ich eine Ordnerstruktur die in etwa so aussieht.

index.php
home.txt
...
inhalt1
-inhalt1.txt
-inhalt2.txt
inhalt2
-inhalt1.txt
...

Nun geht es um folgendes.
Mein Code momentan wäre so:
PHP-Code:
  if(isset($_GET['site']))
    {
      
$allowed = array('home''impressum''inhalt1''inhalt2''inhalt3''inhalt1/inhalt1''inhalt1/Inhalt2''inhalt3/inhalt1''inhalt2/inhalt1''inhalt2/inhalt1');
      
$site=$_GET['site'];
      if( 
in_array($_GET['site'],$allowed))
      {
        if(
file_exists("$site.txt"))
        {
          include(
"$site.txt");
        }
        else
        {
          include(
"home.txt");
        }
      }
      else
      {
        echo(
"404. Not found!!!");
      }
    }
  else
    {
      include(
"home.txt");
    } 
Die 1. Frage ist ob das schon sicher genug ist, oder ob es noch irgendwelche Lücken gibt.

Die 2. Frage ist:
Da ich ja mit der Zeit immer mehr Seiten und Ordner hinzufüge wird die whitelist in Codeansicht irgendwann sehr unübersichtlich und außerdem müsste ich das für jede neue Seite immer per Hand einfügen.

Gibt es nicht eine Möglichkeit einen Code zu schreiben und darin einfach nur die Ordner z.B. inhalt1, inhalt2 etc. anzugeben und alle Dateien darin dann in die whitelist hinzuzufügen? Alle Dateien in diesen Ordnern sind zugänglich und sollen included werden.

Ich freue mich auf eure Hilfe.

Grüße
einermeiner
Mit Zitat antworten
  #2 (permalink)  
Alt 16-10-2011, 16:22
PitPanda
 Registrierter Benutzer
Links : Onlinestatus : PitPanda ist offline
Registriert seit: Nov 2010
Beiträge: 22
PitPanda befindet sich auf einem aufstrebenden Ast
Standard

Sollte sicher sein du schließt ja alles andere aus.

Du kannst es auch so machen:

PHP-Code:
dateiarray.php
_____________


$dateien 
= array();

// fallback
$default 'index.txt';

// startseite
$dateien['index'] = 'index/index.txt';

// kontaktseite
$dateien['kontakt'] = 'kontakt/kontakt.txt'
PHP-Code:
index.php
________


include_once("dateiarray.php");

// site wurde als parameter übergeben?
if(isset($_GET['site']))
{

    
$site $_GET['site'];

    
// $site ist ein array key von $dateien?
    
if(array_key_exists($site$dateien))
    {

        
// ist eine datei?
        
if(is_file($dateien[$site]))
        {
            
// ... include / weitere anweisungen
            
include_once($dateien[$site]);
        }
        else
        {
            
// ist keine datei also index einbinden
            
include($default);
        }

    }
    else
    {
        
// key existiert nicht also index einbinden
        
include($default);
    }
}
else
{
    
// kein get['site'] parameter übergeben index einbinden
    
include($default);

So könntest du deinen Array übersichtlich halten und an einer Stelle zentral abändern.

Geändert von PitPanda (16-10-2011 um 17:03 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 16-10-2011, 17:02
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

@PitPanda
Dass es sicher ist, ist schonmal gut.

Deine Schreibweise ist auch ok, bringt mir aber wenig. Auch wenns Übersichtlicher ist, es bedeutet trotzdem, dass ich jede Seite manuell hinzufügen muss.
Die Zentralität ist ja eh da. (Alles ist in der index.php enthalten)


Was mir jetzt eben wichtig wäre ist, dass die Dateien der Ordner automatisch zum Array allowed hinzugefügt werden.

Folgenden Code hätte ich z.B. schon gefunden:

PHP-Code:
$handle=opendir($ordner);
while (
$file readdir ($handle)) // while, weil nicht klar ist wieviele Dateien im Ordner sind, also werden hier die Dateien ausgelesen 

    if (
$file != "." && $file != ".." && $file != "thumb" && $file!="Thumbs.db"
         { 
         
$array[] = $file// Die Dateien aus dem Ordner werden in ein array gepackt 
    


closedir($handle); // Schließt den Ordner wieder 
Damit füge ich alle Datein des ordners $ordner in $array.
In meinem Fall müsste man das aber irgendwie umbauen. Im Array stehen ja dann die Datein so. (inhalt1.txt, inhalt2.txt, ...). Ich muss die im Array ja aber so stehen haben (inhalt1/inhalt1, inhalt1/inhalt2, ...), dass dann natürlich auch für mehrere Ordner, auch inhalt2 etc. und dazu noch die Dateien die im Hauptverzeichnis ohne Ordner sind (home, impressum,...).

Leider fällt mir als Neuling da keine Lösung ein.

Geändert von einermeiner (16-10-2011 um 17:05 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 16-10-2011, 17:16
PitPanda
 Registrierter Benutzer
Links : Onlinestatus : PitPanda ist offline
Registriert seit: Nov 2010
Beiträge: 22
PitPanda befindet sich auf einem aufstrebenden Ast
Standard

Schau dir mal folgende Funktionen an:
basename(),
__FILE__,
__DIR__,
realpath(),
dirname()
und das ultimative pathinfo()

Damit solltest du das so bearbeiten können, dass es nach deinen Wünschen in das Array geschrieben wird.

Du solltest aber auf jedenfall bestimmte Teile sperren, also alles was unterhalb deiner Struktur ist wo die index.php liegt, da kannst du dann mit strstr() mal gucken.

Geändert von PitPanda (16-10-2011 um 17:21 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 16-10-2011, 18:06
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Ich glaub ich habs.
Bin mir aber nicht sicher ob das so klappt wie ich das will.
Der folgende Code erstellt das Whitelist array $allowed. Der Rest bleibt wie in meinem Beitrag davor.

PHP-Code:
$ordner = array('inhalt1''inhalt2''inhalt3')
i=0;
while (
!= 3) {
$handle=opendir($ordner[i]);
$allowed[] = "$ordner[i]"//Jeder Ordner hat auch eine entsprechende .txt Datei die eingebunden werden soll
i++;
while (
$file readdir ($handle)) // while, weil nicht klar ist wieviele Dateien im Ordner sind, also werden hier die Dateien ausgelesen 

    if (
$file != "." && $file != ".." && $file != "thumb" && file!="Thumbs.db"
         {
     
$info pathinfo($file);
     
$file $info['dirname']; //Umgeformt zu (inhalt1/inhalt1)
     
$allowed[] = $file// Die Dateien aus dem Ordner werden in ein array gepackt
    


closedir($handle); // Schließt den Ordner wieder  
}
$allowed[] = "home"
Wenn das jetzt so passt, frage ich mich was ich denn sperren soll?
Mit Zitat antworten
  #6 (permalink)  
Alt 18-10-2011, 15:12
einermeiner
 Registrierter Benutzer
Links : Onlinestatus : einermeiner ist offline
Registriert seit: Jun 2009
Beiträge: 132
einermeiner befindet sich auf einem aufstrebenden Ast
Standard

Für alle die es wissen wollen.
Habe die folgende Lösung gefunden.

PHP-Code:
$i=0;
      
$ordner = array('inhalt1''inhalt2''inhalt3');
      while (
$i != 3) {
      
$handle=opendir($ordner[$i]);
      
$allowed[] = "$ordner[$i]"//Jeder Ordner hat auch eine entsprechende .txt Datei die eingebunden werden soll
      
      
while ($file readdir ($handle)) // while, weil nicht klar ist wieviele Dateien im Ordner sind, also werden hier die Dateien ausgelesen 
      

          if (
$file != "." && $file != ".." && $file != "thumb" && file!="Thumbs.db"
              {
              
$info pathinfo($file);
              
$file basename($file'.'.$info['extension']);
              
$file "$ordner[$i]/$file";
              
$allowed[] = $file// Die Dateien aus dem Ordner werden in ein array gepackt
          

      }
      
$i++; 
      
closedir($handle); // Schließt den Ordner wieder  
      
}
      
$allowed[] = "home"$allowed[] = "impressum"
Diese Lösung funktioniert erstmal mit der momentanen Ordnerstruktur.
Leider schienen die ganzen Befehle wie realpath(), dirname() etc. nicht zu funktionieren. Sie gaben nur ... zurück.
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/102290-sicheres-include-mit-intelligenter-whitelist.html
Erstellt von For Type Datum
per linkaufruf seite erzeugen - php.de This thread Refback 12-02-2015 11:27

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sicheres Programmieren Kropff Off-Topic Diskussionen 5 28-11-2008 23:22
Sicheres Umfrageskript Schieni Apps und PHP Script Gesuche 3 24-10-2006 16:26
user daten per join abfragen und gleichzeitig black/whitelist abfragen? westberlin SQL / Datenbanken 10 07-12-2005 16:32
simples(!), sicheres Forum mit HTTP_AUTH Unterstützung? westberlin PHP Developer Forum 0 10-06-2004 14:22
Sicheres Verzeichnis? Skadem PHP Developer Forum 1 29-07-2001 10:11

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:02 Uhr.