Beschreibung
bool
is_uploaded_file
( string filename)
Gibt
TRUE
zurück
,
wenn
die
Datei
filename
mittels
HTTP
POST
upgeloaded
wurde
.
Das
ist
hilfreich
sicherzustellen
,
dass
kein
böswilliger
User
versucht
hat
das
Script
zu
überlisten
,
indem
er
es
Dateien
bearbeiten
lässt
,
die
es
gar
nicht
bearbeiten
sollte
.
Zum
Beispiel
/
etc
/
passwd
.
Diese
Prüfung
ist
speziell
dort
interessant
,
wo
irgendeine
Aktion
mit
upgeloadeten
Dateien
deren
Inhalt
dem
User
zugänglich
machen
könnte
(
oder
auch
anderen
Usern
auf
dem
selben
System
)
.
is_uploaded_file(
)
ist
in
PHP
3
nur
nach
Version
3.0.16
,
und
in
PHP
4
nur
nach
Version
4.0.2
verfügbar
.
Sollten
Sie
eine
frühere
Version
benutzen
,
können
Sie
sich
mit
der
folgenden
Funktion
weiterhelfen
:
Anmerkung
:
Das
folgende
Beispiel
funktioniert
nicht
in
Versionen
nach
PHP
4.0.2
.
Das
liegt
an
der
internen
Funktionalität
von
PHP
,
welche
sich
nach
dieser
Version
geändert
hat
.
?php
/
*
Userland
Test
für
hochgeladene
Datei
.
*
/
function
is_uploaded_file(
$filename
)
{
if
(!$tmp_file
=
get_cfg_var('upload_tmp_dir')
)
{
$tmp_file
=
dirname(tempnam(''
,
''))
;
}
$tmp_file
.=
'
/
'
.
basename($filename)
;
/
*
Der
Benutzer
könnte
einen
führenden
Slash
in
php.ini
haben..
.
*
/
return
(ereg_replace('
/
+'
,
'
/
'
,
$tmp_file
)
==
$filename)
;
}
/
*
So
verwenden
Sie
sie
,
nachdem
Sie
in
diesen
älteren
*
Versionen
auch
keine
move_uploaded_file(
)
haben
:
*
/
if
(is_uploaded_file($HTTP_POST_FILES['userfile'])
)
{
copy($HTTP_POST_FILES['userfile']
,
"
/
place
/
to
/
put
/
uploaded
/
file")
;
}
else
{
echo
"Mögliche
Dateiupload-Attacke
:
Dateiname
'
$HTTP_POST_FILES[userfile]'
."
;
}
?
|
Siehe
auch
move_uploaded_file(
)
,
und
das
Kapitel
Steuerung
von
Dateiuploads
für
ein
einfaches
Anwendungsbeispiel
.