|
bituniverse.com Entwickler Forum
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Beepa
Anmeldedatum: 05.11.2007 Beiträge: 53 Wohnort: Düsseldorf
|
Verfasst am: Do 15 Nov, 2007 21:32 Titel: Sicherheitscheck ob File existiert / includiert werden kann |
|
|
Hier eine Klasse (PHP5) die ich geschrieben habe um zu prüfen, ob eine
Datei im gewünschten Ordner existiert und inkludiert werden kann / darf:
| Php: |
<?php
class CheckIncludeFileClass
{
/**
* Eigenschaften deklarieren
*/
// Variable in der, der aktuelle Arbeitspfad gespeichert wird
private $actual_path;
/**
* Konstruktor
*/
public function __construct()
{
// Arbeitspfad festhalten (Application-Root)
$this-> actual_path = getcwd();
} // ENDE: public function __construct()
/**
* Funktion die prüft ob das zu Includierende-File
* auch wirklich im Include-Verzeichnis liegt
*
* @param string $path: Pfad der zu prüfenden Datei - Beispiel: '../includes/'
* @param string $file: Name der zu prüfenden Datei - Beispiel: 'home.inc.php'
* @return boolean true, wenn Datei existiert; false, wenn Datei nicht existiert
*/
public function checkIncludeFile($path, $file)
{
// In das Include-Verzeichnis wechseln
// Prüfen ob die zu includierende Datei im gewünschten
// Include-Verzeichnis liegt
{
// Datei ist vorhanden
// Zurück zum Arbeitspfad wechseln
$this->returnToActualPath();
return true;
}
else
{
// Datei ist nicht vorhanden
// Zurück zum Arbeitspfad wechseln
$this->returnToActualPath();
return false;
}
} // ENDE: function checkIncludeFile($file)
/**
* Funktion die zum Arbeitspfad wechselt
*/
private function returnToActualPath()
{
// Zurück zum Arbeitspfad wechseln
chdir($this-> actual_path);
} // ENDE: function returnToActualPath()
} // ENDE: class CheckIncludeFileClass
?>
|
Hier den Beispiel-Einsatz der Klasse:
| Php: |
<?php
// Gehen wir davon aus, es gibt einen GET-Parameter $page, der an die index.php
// übergeben wird und dann soll anhand dieses Parameters eine Datei inkludiert werden
// Pfad für Include-Dateien als Konstante anlegen
define('INCLUDE_PATH', '../includes/');
// Prüfung 1 - liegt überhaupt ein Parameter vor - wenn nicht, einen Defaultwert (home) angeben
$page = empty($_GET['page']) ? 'home' : $_GET['page'];
// Prüfung 2 - sind in dem Parameter $page Zeichen enthalten, die weder Buchstaben, noch Zahlen,
// noch Unterstriche sind? Wenn ja, ein möglicher Hackversuch - daher Defaultwert angeben!
$page = preg_match('/\W/', $page) ? 'home' : $page;
// Objekt der Klasse CheckIncludeFileClass instanzieren
$check_file_obj = new CheckIncludeFileClass;
// Prüfen ob Include-Datei vorhanden ist
if($check_file_obj->checkIncludeFile(INCLUDE_PATH, $page . '.inc.php'))
{
// Datei inkludieren
require_once(INCLUDE_PATH . $file . '.inc.php');
}
else
{
// Dateiname ist zwar gültig laut preg_match(), aber die Datei existiert nicht
// daher Default-Datei inkludieren
require_once(INCLUDE_PATH . 'home.inc.php');
}
// Objekt der Klasse CheckIncludeFileClass wieder zerstören
?>
|
|
|
| Nach oben |
|
 |
Beepa
Anmeldedatum: 05.11.2007 Beiträge: 53 Wohnort: Düsseldorf
|
Verfasst am: Do 15 Nov, 2007 21:53 Titel: Trinitäts-Operator |
|
|
mir fällt gerade ein, dass bestimmt der eine oder andere Anfänger nicht unbedingt mit der Schreibweise des Trinitäts-Oprator vertraut ist:
| Beepa hat Folgendes geschrieben: |
| Php: |
<?php
$page = empty($_GET['page']) ? 'home' : $_GET['page'];
?>
|
|
Das ist ein Vergleichsoperator mit "wenn-dann-sonst"-Effekt
Um das mal ins "normaldeutsch" zu übersetzen:
Der Wert von $page ist, wenn $_GET['page'] leer ist, "home" und sonst das was als $_GET['page'] übergeben wurde
siehe auch das Beispiel aus dem PHP-Manual:
| Php: |
<?php
// Beispielanwendung für den Trinitäts-Operator
$action = (empty($_POST['action'])) ? 'standard' : $_POST['action'];
// Obiges ist mit dieser if/else-Anweisung identisch
if (empty($_POST['action']))
{
$action = 'standard';
}
else
{
$action = $_POST['action'];
}
?>
|
| PHP.net hat Folgendes geschrieben: |
Der Ausdruck (ausdr1) ? (ausdr2) : (ausdr3) gibt ausdr2 zurück,
wenn ausdr1 TRUE zurückgibt und ausdr3, wenn ausdr1 FALSE zurückgibt.
|
|
|
| Nach oben |
|
 |
Jens Administrator
Anmeldedatum: 05.11.2007 Beiträge: 193
|
Verfasst am: Fr 07 Dez, 2007 11:41 Titel: Anmerkung |
|
|
Ich würde zum einen das chdir() weg lassen, da Du die Funktion damit zwischen Instanzierung und check quasi tot legst. Außerdem würde ich im glob() den Include-Pfad und die Extension gleich mit angeben, und vor allem auch prüfen, ob PHP die Datei überhaupt lesen darf.
Gruß jens
|
|
| Nach oben |
|
 |
phpfan
Anmeldedatum: 05.11.2007 Beiträge: 25
|
Verfasst am: Fr 07 Dez, 2007 12:52 Titel: |
|
|
Eine Klasse, die die Existenz einer Datei prüft? Ist das nicht mit Kanonen auf Spatzen schießen? Mit einem einfachen file_exists geht's doch auch.
Gruß
phpfan
|
|
| Nach oben |
|
 |
Jens Administrator
Anmeldedatum: 05.11.2007 Beiträge: 193
|
Verfasst am: Fr 07 Dez, 2007 13:55 Titel: |
|
|
Naja, als (evtl. statische) Klassenmethode kann man so eine Prüfung schon mal implementieren. So als alleinstehende Klasse ist das IMHO wirklich Overkill.
Gruß Jens
|
|
| Nach oben |
|
 |
Beepa
Anmeldedatum: 05.11.2007 Beiträge: 53 Wohnort: Düsseldorf
|
Verfasst am: Do 13 Dez, 2007 00:54 Titel: Re: Anmerkung |
|
|
Sorry für die späte Rückmeldung zu den Anmerkungen
| Jens hat Folgendes geschrieben: |
Ich würde zum einen das chdir() weg lassen, da Du die Funktion damit zwischen Instanzierung und check quasi tot legst.
Außerdem würde ich im glob() den Include-Pfad und die Extension gleich mit angeben, und vor allem auch prüfen, ob PHP die Datei überhaupt lesen darf.
Gruß jens |
Ich wollte das mit dem include_path ja variabel halten, daher mein Ansatz mit dem Übergabeparameter.
Und die Klasse sollte ja wirklich nur vor dem include der Datei instanziert werden und dann wieder wech damit...
| Jens hat Folgendes geschrieben: |
Naja, als (evtl. statische) Klassenmethode kann man so eine Prüfung schon mal implementieren. So als alleinstehende Klasse ist das IMHO wirklich Overkill.
Gruß Jens |
Das mit dem statisch ist echt 'ne Klasse Idee, das werde ich machen Hätte ich ja eigentlich auch selbst drauf kommen können...
Und da ist in der "echten" Klasse noch eine Funktion für statistische Zwecke - die schreibt in eine Datei,
welches File wann von welcher IP aus angefordert wurde - keine Ahnung warum ich das unbedingt mal haben wollte daher habe ich die rausgelassen...
Gruß
Beepa
|
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB2.de
|