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 ::

Webseiten professionell erstellen

Webseiten professionell erstellen 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 > 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
  #11  
Alt 15.01.2014, 03:52:48
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
Aber was du da schreibst habe ich natürlich bei meinem Uploadscript alles berücksichtigt. getimagesize ist natürlich am start.
OK.
Zitat:
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
Naja, der HTTP Upload ist ein wenig diffizil, weil er auch von der PHP Konfig abhängig ist.
Es ist diesbezüglich immer ratsam, nen eigenen session.save_path und ein eigenes upload_tmp_dir zu verwenden. Sonst kann es passieren, wenn global die PHP Müllabfuhr zuschlägt und /tmp aufräumt. Dann ist die Session weg und das mühsam rangekarrte File ggf. auch.

Achtung: session.save_path und upload_tmp_dir dürfen nicht via HTTP erreichbar sein!

Ob und wie Du die PHP Konfig ändern kannst, ist abhängig von der Version, der ServerAPI und der globalen PHP Konfig.
Zitat:
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.
Das ist aber falsch. Wenn ich als root ein file erstelle, welches exklusiv dem root gehört, dann liefert file_exists() zwar true, aber include/require schlägt fehl. Testest Du mit is_readable(), bekommst Du nur dann true, wenn das file existiert UND wenn der Apache es lesen darf.

Genauso mußt Du auch das Schreiben testen:
PHP-Code:
if (is_redable("$path/$name"))
  die(
'Mist. Das file gibts schon');
if (
is_writable(dirname($path) AND is_writable("$path/$name"))
  
schreiben("$path/$name");
else
  die(
'Darf nicht (über)schreiben'); 
(ungetestet - Tippfehler nicht ausgeschlossen)

Zitat:
Es ist doch so, kein seriöses Mitglied meiner Seite würde den File Upload über die URL aufrufen.
Dazu schreibt Murphy:
"Wenn bei einer beliebigen Vorrichtung irgend etwas falsch gemacht werden kann, so wird sich immer jemand finden, der das auch tut."

In der FAQ steht das:
Prüfe importierte Parameter. Traue niemandem
http://www.php-faq.de/q-sicherheit-parameter.html
Zitat:
Zusammenfassend: Traue niemandem. Validiere allen Input oder stirb.
Die wohlwollende Annahme, nur wohlmeinende Surfer würden Deine Seite heimsuchen, kann tödlich enden.

Bei Murphy klingt das so:
"Bei einer beliebigen Berechnung erweist sich die Größe, deren Richtigkeit für alle außer Frage stand, am Schluß als Fehlerquelle."

Im weiteren noch folgendes:
falls es nicht Dein Mietserver ist, mußt Du mindestens einmal am Tag die PHP Version und wichtige Kpnfigparameter testen. Und falls es Unterscheide gibt, Dir eine Email schicken.

Ich habe sowas schon durch:
nachts macht der Hoster ein Update und am nächsten Tag ist die Seite tot, weil das Script nicht mehr fehlerfrei funktioniert.
Mit Zitat antworten
  #12  
Alt 15.01.2014, 16:48:48
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 43
Beiträge: 119
AW: Dateien includieren über die URL

Hallo Meikel,

du pickst dir aber auch immer Sachen raus. ;)

Ich habe doch nicht geschrieben, dass ich meinen Mitgliedern vertraue, sondern dass es kein seriöser Benutzer macht.

Schau mal die Url von diesem Thread. Ich habe im Forum einen Link angeklickt,
in der Url findest du übergebene Parameter. Thread ID Page ID usw.
Natürlich könnte ich diese Seite auch direkt aufrufen, wenn ich diese URL eintippe.
Auch wenn ich ein Lesezeichen setze, lande ich auf dieser Seite.
Aber warum sollte ich die URL direkt eingeben, wenn es doch einen Link im Forum gibt der mich hierher bringt.

Umgemünzt auf meine Seite, müßte man schon angemeldet sein um überhaupt die URL direkt eintippen zu können.
Ich meine man kann tippen was man will, aber es bringt nichts.
Ist man nicht angemeldet, dann landet man nur auf der Startseite und mein autoloader reagiert erst garnicht.

Wenn man aber angemeldet ist, dann kommen die übergebenen Parameter wie auch hier im Forum zum Tragen.
Es wird ein Ordnername und ein Dateiname übergeben.
Um es nochmal zu sagen, es sind nur Bchstaben erlaubt.
Also in der URL einfach ein ./.../Ordername funktioniert nicht.

So wie ich das sehe ist meine Ordnerstruktur die Whitelist.
Hätte ich die file_upload Datei und die upload_check Datei im selben Ordner, dann könnte ich auch die upload_check Datei direkt über die URL aufrufen, was ich natürlich nicht möchte. Deshalb befinden sich verarbeitende Dateien in einem Extra Ordner, der nicht über die URL aufgerufen werden kann.

Wenn ein Mitglied angemeldet ist, dann kann es zum Beispiel ein Bild hochladen.
Dafür befindet sich in seinem Mitgliedsbereich ein link um das Uploadformular anzeigen zu lassen. Dieser Link ist wie der Link in diesem Forum, der diesen Beitrag öffnet.

seite.de/content/private.php?folder=photos&file=upload

Unangemeldet funktioniert diese Url nicht!
Sicher kann ich jetzt die Parameter auch von Hand ändern, aber alles was ich über diese URL als angemeldetes Mitglied aufrufen könnte, sind Seiten, die ich eh aufrufen darf, weil es dafür ja auch entsprechende Links auf der Seite gibt.

HTML-Code:
<a href="/private.php?folder=photos&file=upload">
  Bilddatei hochladen
</a>
Gruß
Auf der Mauer
Mit Zitat antworten
  #13  
Alt 16.01.2014, 23:28:59
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
du pickst dir aber auch immer Sachen raus. ;)
Du kennst das doch:
Programmierer sind faule, paranoide Kümmelspalter.
faul: bevor ein Programmierer ne Arbeit zweimal macht, programmiert er was, was ihm die Arbeit anbimmt.
paranoid == Sicherheit: man muß immer davon ausgehen, daß die Besucher eben nicht ausschließlich nett Leute sind, die nur Gutes im Sinn haben. Ein Bösewicht reicht doch schon aus, das System zu kompromittieren.
Kümmelspalter == Genauigkeit: mal abgesehen von den ungewollten Hintertüren muß jedes Script 100%ig genau arbeiten.
PHP-Code:
echo ($m/$n); 
Sowas scheitert, wenn $n == 0 ist.
Zitat:
Ich habe doch nicht geschrieben, dass ich meinen Mitgliedern vertraue, sondern dass es kein seriöser Benutzer macht.
Egal. Du mußt immer davon ausgehen, daß der Client lügt und Böses vorhat. Und im Backend solltest Du damit rechnen, daß der Admin auch einen Fehler machen kann
Zitat:
Natürlich könnte ich diese Seite auch direkt aufrufen, wenn ich diese URL eintippe. Auch wenn ich ein Lesezeichen setze, lande ich auf dieser Seite.
Du landest nicht solchen Seiten, für die ne Authentifizierung erforderlich ist, sondern Du bekommst dann ne Fehlermeldung oder nen 403 Status.
Mit Zitat antworten
  #14  
Alt 24.07.2015, 23:13:46
Auf der Mauer Auf der Mauer ist offline
Anfänger
 
Registriert seit: Jun 2009
Alter: 43
Beiträge: 119
AW: Dateien includieren über die URL

Hallo,

ich habe da mal eine Frage an die PHP Experten hier.

PHP-Code:
    public function __construct ()
    {
        if (isset(
$_GET['go'])) {
            
$page is_string($_GET['go']) ? mb_substr($_GET['go'],0,20,'utf-8') : 0;
            if (empty(
$page) === false) {
                
$this->check($this->sanitize($page));
            }
        }
    } 

Der obige Code prüft ob ein url parameter (go) vorhanden ist und ob es sich dabei um einen String handelt. (Also kein ?go[]=val1&go[]=val2)
Wenn es der Fall ist, dann soll die Funktion mb_substr darauf angewendet werden, ansonsten wird 0 übergeben. Mb_substr soll den Eingang auf 20 Zeichen kürzen, weil längere Zeichenketten vom Programm nicht erwartet werden.

Die mb_substr soll zum Einsatz kommen, bevor die Methode sanitize aufgerufen wird.
In dieser sollen mithilfe der Funktion preg_replace alle unerlaubten Zeichen aus dem url Parameter entfernt werden. Da über die Adresse ja min. 2000 Zeichen als Parameterlänge übergeben werden können, würde es das Programm langsam machen. Wenn dann auch noch so eine Anfrage absichtlich von vielen Rechnern gleichzeitig geschickt wird.

Schauen Funktionen wie isset und is_string nach dem übertragenen Inhalt?
Dann käme mb_substr zu spät. Da diese Funktion aber nur mit strings funktioniert, muss vorher is_string aufgerufen werden.

Ich glaube, dass es einen Unterschied macht, ob die Funktion preg_replace mit max. 20 Zeichen arbeitet oder mit 2000+.

Gruß
Auf der Mauer
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 14:33:24 Uhr.


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


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