SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 08.01.2014, 14:31:11
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
Dateien includieren über die URL

Hallo Experten,

ich möchte gerne innerhalb eines privaten Bereichs, welcher nur aufrufbar ist,
wenn man angemeldet ist, verschiedene php Dateien einbinden.
Die Parameter wie Ordner- und Dateiname sollen über die URL kommen.

Um Mißbrauch zu vermeiden, prüfe ich die Übergabeparamter gründlich.

1. Ist User angemeldet?
2. Wurden überhaupt Parameter übergeben?
3. Enthalten Parameter einen sinnvollen Wert?
4. Bestehen die Werte nur aus Buchstaben und einem Unterstrich?
5. Ist eine Datei dieses Namens in dem angegeben Verzeichnis vorhanden?

Nur wenn alles in Ordnung ist, wird die Datei eingebunden.

Nachfolgend das verwendete Skript, mich würde interessieren was haltet ihr davon.
Getestet habe ich es, funktioniert sehr gut. Da Slashes und Punkte nicht erlaubt sind,
kann man sich auch nicht über die URL durch die Ordnerstruktur navigieren.

Gruß
Auf der Mauer

PHP-Code:
<?php

   
// include session & settings file
   
require_once("../../core/session.php");


   
// only continue when user is logged in

   
if (!defined('ACCESS') || ACCESS !== true) {
       
header("location: ./home.php");
       exit;
   } else {
   
       
// module for dynamic loading of private pages

       
function get_content_page($x NULL$y NULL) {
         
           
$contentPath "includes/" $x "/" $y ".php";

           if (empty(
$x) || empty($y)) {
               return 
false;
           } else if (
preg_match("/[^a-z_]/"$x)) {
               return 
false;
           } else if (
preg_match("/[^a-z_]/"$y)) {
               return 
false;
           } else if (
file_exists($contentPath) === false) {
               return 
false;
           } else {
               
// include requested file
               
require_once($contentPath);
           }

       }
       
       
// any errors -> back to mainpage

       
if (!isset($_GET["folder"], $_GET["file"]) || 
       
get_content_page($_GET["folder"], $_GET["file"]) === false) {
   
           
header("location: ./home.php");
           exit;

       }
   
   }

?>
Mit Zitat antworten
  #2  
Alt 09.01.2014, 17:56:00
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Dateien includieren über die URL

Hallo,

habe ich irgendwelche wichtigen Angaben vergessen?
Wenn etwas unklar ist, bitte bescheid sagen.

Das Script ist selbst geschrieben und funktioniert prima.
Wahrscheinlich werde ich die Funktion noch in eine Klasse packen,
dann kann später über eine Methode auf die Dokumente zugegriffen werden,
eine andere liefert dann z.B. Bilder aus. Mal schauen.

Ich würde mich nur sehr über ein kurzes Feedback freuen,
ob ihr das so auch machen würdet, oder ob etwas dagegen spricht,
was ich nicht bedacht habe.

Gruß
Auf der Mauer
Mit Zitat antworten
  #3  
Alt 11.01.2014, 17:21:29
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Dateien includieren über die URL

Zitat:
Zitat von Auf der Mauer Beitrag anzeigen
Habe ich irgendwelche wichtigen Angaben vergessen?
Nein. Janz schnell überflogen - könnte so klappen, wenn die Authentifizierung sicher ist. Zumindest daran solltest Du denken:
Zitat:
session.save_path=/path/zum/privaten/temp/in/deinem/verzeichnis # vor Browserbesuch via .htaccess deny from all schützen
session.use_cookies=On
session.use_only_cookies=On
session.use_trans_sid=0
Grundsätzlich gefällt es mir allerdings überhaupt nicht, weil Dein Verfahren dann ein fürchterliches Sicherheitsrisiko ist, wenn ein Fremder eine gültige Session übernehmen kann.
Mit Zitat antworten
  #4  
Alt 11.01.2014, 18:31:30
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Dateien includieren über die URL

Hallo Meikel,

vielen Dank für deine Antwort.
Die Werte hatte ich bereits via ini_set alle so gesetzt.

Die Benutzerauthentifizierung findet in der session.php statt.
Wenn man nicht angemeldet ist, dann tritt folgendes in Kraft.

PHP-Code:
if (!defined('ACCESS') || ACCESS !== true) {
       
header("location: ./home.php");
       exit;

Dadurch hat man keinen Zugriff auf die Seite.
Wenn man aber angemeldet ist, dann können über die URL Parameter
nur bestimmte php Dateien aus einem bestimmten Ordner eingebunden
werden. Die Dateien können aber auch alle mittels Link aufgerufen werden.

Also URL

PHP-Code:
./private.php?folder=documents&amp;file=listA 
ist dasselbe wie

PHP-Code:
<a href="./private.php?folder=documents&amp;file=listA">
  
Liste A
</a
Nur wichtige verarbeitende Dateien, befinden sich außerhalb dieser Ordnerstruktur.
Ein Direktaufruf dieser Dateien wird mittels htaccess und deny from all verhindert.
Includieren lassen sie sich aber gut.

Damit keiner nach belieben durch die Ordnerstruktur navigieren kann, prüfe ich die Übergabeparameter gründlich.
Entsprechen sie nicht dem erwarteten Schema, dann wird der Benutzer weitergeleitet auf die Startseite.

PHP-Code:
           if (empty($x) || empty($y)) {
               return 
false;
           } else if (
preg_match("/[^a-z_]/"$x)) {
               return 
false;
           } else if (
preg_match("/[^a-z_]/"$y)) {
               return 
false;
           } else if (
file_exists($contentPath) === false) {
               return 
false;
           } 
Zitat:
Grundsätzlich gefällt es mir allerdings überhaupt nicht, weil Dein Verfahren dann ein fürchterliches Sicherheitsrisiko ist,
wenn ein Fremder eine gültige Session übernehmen kann.
Das verstehe ich jetzt nicht so sehr. Sicher eine geklaute Sitzung ist eine geklaute Sitzung, aber derjenige könnte über
die URL bei meinem obigen Skript doch auch nichts einschleusen.

Gruß
Auf der Mauer
Mit Zitat antworten
  #5  
Alt 12.01.2014, 21:04:50
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Dateien includieren über die URL

Hi,

Zitat:
Das verstehe ich jetzt nicht so sehr. Sicher eine geklaute Sitzung ist eine geklaute Sitzung, aber derjenige könnte über
die URL bei meinem obigen Skript doch auch nichts einschleusen.
Das weist nur du, denn du kennst deine Scripte. Wenn du z.B. ein Bildupload-script-form-wasauchimmer da als Private "Page" machst und er mit einer geklauten Session dir
kein Bild sondern ein Script hochschiebt und das darüber "legal" aufruft, hast du keine Handhabe.

Versteh mich nicht falsch, ich find dein Ansatz gut, mit meiner Erfahrung seh ich das als
weiteren Schritt zum Ziel für dich.

MfG

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #6  
Alt 13.01.2014, 06:21:46
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Dateien includieren über die URL

Zitat:
Zitat von Auf der Mauer Beitrag anzeigen
Die Werte hatte ich bereits via ini_set alle so gesetzt.
OK.

Zitat:
PHP-Code:
       header("location: ./home.php");

Ich erinnere gern mal ans Handbuch:
http://de2.php.net/manual/en/function.header.php
Zitat:
HTTP/1.1 requires an absolute URI as argument to » Location: including the scheme, hostname and absolute path, but some clients accept relative URIs.
Daß der eine oder andere Browser da Gnade vor Recht ergehen läßt, alle Augen zudrückt und fehlenden Hostnamen und Scheme durch den des vorhergehenden ersetzt, ist keine Garantie dafür, daß sich jeder Browser in jeder Version dieses fehlerhafte Protokoll gefallen läßt.

geklaute Session
Zitat:
Das verstehe ich jetzt nicht so sehr. Sicher eine geklaute Sitzung ist eine geklaute Sitzung, aber derjenige könnte über
die URL bei meinem obigen Skript doch auch nichts einschleusen.
Du kennst Deine Scripte sicher besser als ich, in wie weit ein Einbrecher Schaden anrichten oder spionieren kann. Irgend einen Grund wirst Du schon haben, daß Du dafür ne Authentifizierung vorsiehst.

Session- oder Cookiediebstahl ist eine Sicherheitslücke.
Mit Zitat antworten
  #7  
Alt 14.01.2014, 12:26:15
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Dateien includieren über die URL

Hallo,

ich danke euch für die Anmerkungen und Denkanstösse.
Bei meinem Uploadscript sind übrigens nur jpg Dateien erlaubt.
Überprüft wird die Dateierweiterung + der Mimetyp.

Mir ging es bei dem Skript zum automatischen Laden von Seiten
auch um eine Vereinfachung für mich. Ich wollte keine Whitelist
führen, die immer gepflegt werde muss. Die Sicherheit sollte durch
die Verzeichnisstruktur kommen.

Also in etwa so:

Ordner = includes
Ein Direktzugriff wird mittels htaccess Datei verhindert.
Darin übersichtlich alle Unterordner und Dateien die über die URL
eingebunden werden dürfen, wenn das Mitglied angemeldet ist.

Die Url um das Bilduploadformular anzeigen zu lassen wäre:
private.php?folder=images&file=file_upload

Hier überprüfe ich, dass in den übergebenen $_GET Parametern
nur Buchstaben sowie der Unterstrich enthalten sind.
(Durch die Ordnerstruktur mittels "." und "/" zu navigieren funktioniert also nicht).

Mit file_exist wird natürlich überprüft, ob die Datei existiert.
Denn als Parameter könnte man ja auch Entenhausen und Dagobert übergeben,
welche zwar inhaltlich in Ordnung wären, aber natürlich nicht existieren.

Für die verarbeitenden Scripte befindet sich in jedem Ordner noch
ein zweiter Ordner. Dieser kann ja nicht über die Url eingebunden werden.
Hierin liegt zum Beispiel die upload_check.php.

Also:

PHP-Code:
includes

    
images
       
inc
         
upload_check.php
    
file_upload.php 
    
    
#########################
    
    
documents
       
inc
         
new_entry_check.php
         
delete_entry_check.php
         
edit_entry_check.php
    
new_entry.php
    
delete_entry.php
    
edit_entry.php

+ .htaccess 
Auf diese Weise, sofern ich keinen Denkfehler habe, kann ich nach Herzenslust
Projektordner und Dateien anlegen ohne eine Whitelist führen zu müssen.
Das Einzige, worauf ich wirklich unbedingt achten muss, ist dass ich verarbeitende
Dateien in einen separaten Ordner ablege, der über die URL nicht aufgerufen
werden kann.

Von der Benutzung und Pflege her ist das eigentlich denkbar einfach und auch
wunderbar übersichtlich.

Gruß
Auf der Mauer
Mit Zitat antworten
  #8  
Alt 14.01.2014, 20:54:33
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Dateien includieren über die URL

Zitat:
Zitat von Auf der Mauer Beitrag anzeigen
Bei meinem Uploadscript sind übrigens nur jpg Dateien erlaubt. Überprüft wird die Dateierweiterung + der Mimetyp.
Die Dateiextension ist zweitrangig. Ich kenne ein JPG, welches komplett aus Javascript besteht und (wenn der Virenscanner das Geld nicht wert ist) nen kleinen Trojaner bei dem User installiert. Dem Indianer isses Wurscht, weil der nur auf die Extensions achtet.

Du solltest Dich dringen entweder damit
http://de3.php.net/finfo_file
u/o damit
http://de3.php.net/getimagesize
Zitat:
Die Url um das Bilduploadformular anzeigen zu lassen wäre:
private.php?folder=images&file=file_upload

Hier überprüfe ich, dass in den übergebenen $_GET Parametern
nur Buchstaben sowie der Unterstrich enthalten sind.
Der Upload via GET ist gewöhnungsbedürftig.
Zitat:
<form action="/submit.php" method="post" enctype="multipart/form-data">
Außerdem reagiert man beim HTTP Upload auf $_FILES.

Wie funktioniert ein Datei-Upload über HTML-Formulare?
http://www.php-faq.de/q-formular-upload-php4.html

Achtung! Darauf
$_FILES['probe']['type']
darfst Du Dich nie verlassen. Diese Infos stammen vom Client und jeder Client ist ein potentieller Lügner.

Zitat:
Mit file_exist wird natürlich überprüft, ob die Datei existiert.
Das ist auch Blödsinn. Entscheidend ist nicht die Existenz einer Datei sondern die Erlaubnis, sie zu lesen. Das ist ein kleiner aber kriegsentscheidender Unterschiied.
Mit Zitat antworten
  #9  
Alt 14.01.2014, 22:29:47
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 42
Beiträge: 119
AW: Dateien includieren über die URL

Hallo Meikel,

ich befürchte, du hast da etwas falsch verstanden, vielleicht habe ich mich auch nicht richtig ausgedrückt.
Aber was du da schreibst habe ich natürlich bei meinem Uploadscript alles berücksichtigt. getimagesize ist natürlich am start.

Das was du da zitierst, ist lediglich der Aufruf, die URL zum Upload Formular.
Kein Upload via GET! Das aber auch nur wenn man angemeldet ist.

/private.php?folder=photos&file=upload

Das verarbeitende Script, kann aber eben nicht über die URL aufgerufen werden.
Es war das worauf ich oben hinaus wollte.

Aber es ging ja hier garnicht um das Uploadscript.

Ehrlich gesagt finde ich es nicht so blödsinnig mit file_exist zu prüfen,
ob eine Datei überhaupt existiert, bevor diese eingebunden werden soll.

Es ist doch so, kein seriöses Mitglied meiner Seite würde den File Upload über die URL aufrufen.
Dafür biete ich ja einen Link an. Über diesen Link füttere ich aber auch gleichzeitig meinen
Autoloader mit den Parametern Ordnername und Dateiname.
Findet file_exist die Datei im angegeben Ordner wird sie eingebunden.
Innerhalb des includes Ordners befinden sich nur Dateien und Ordner die auch über die URL aufgerufen werden dürfen.

Gruß
Auf der Mauer
Mit Zitat antworten
  #10  
Alt 15.01.2014, 03:14:42
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Dateien includieren über die URL

Hi,

wir sind hier keine Hacker/Scriptkiddys o.ä. aber wir haben
schon so einiges erlebt, ich zuletzt erst was ein fehlendes PHP Update und TMP/CGI/POST
so anrichten kann.

Glaub mir, heute ist htaccess/file_exists etc kein absolutes Sicherheitskonstrukt,
falsche PHP V. und er kommt ... naja das führt zu weit.

Wie gesagt, ich finde deinen Ansatz gut, aber er ist halt nur eine Stufe auf deinem
weiteren Weg.

MfG

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
Antwort


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

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dateien aus Ortner lesen und schreiben jasonpetra PHP Grundlagen 7 12.01.2008 11:26:08
Alle Dateien stupide ausliefern z0iD Apache HTTP-Server 18 11.02.2007 13:08:05
Ordner und Dateien erstellen harry PHP Grundlagen 3 09.03.2006 09:38:18
Automatisches Includieren von Dateien WebWatcher PHP für Fortgeschrittene und Experten 16 24.02.2005 18:36:53
Multiple Dateien einlesen und ausgeben MTJMohr PHP für Fortgeschrittene und Experten 2 04.04.2002 15:15:23


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:12:04 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt