Thorsten Steffen: Variable nicht belegt?

Beitrag lesen

Hio,

if($file!='none')
          {

$dname = strtr($file_name," ","_");
           copy ($file, "../upload_referenz/".$dname);
          }
das if ($file!='none') hatte ich früher durch if(!$file) geschrieben, was imho auch richtig ist, aber auf meinem WAMP nicht klappt.

das geht zwar nicht direkt auf deine Frage ein, denoch ein gut gemeinter Tipp.
Ich nehme mal an $file kommt von deinem upload-Feld (<input type="file" name="file">), dann stellt PHP dieses als Variable zur Verfügung, jedoch _nur_ solange register_globals[1] auf on steht. Dies stellt jedoch die ein oder andere Sicherheitslücke dar. Z.b. könnte ich in diesem Skript ein Upload "simulieren" und so evtl an wichtige Dateiinhalte kommen. Mit z.b.

<input type="hidden" name="file" value="c:/autoexec.bat">
<input type="hidden" name="file_name" value="c:\scary.txt">
<input type="hidden" name="file_type" value="text/plain">
<input type="hidden" name="file_size" value="2000">.

Besser ist über $_FILE (ab PHP 4.1 verfügbar) oder $HTTP_POST_VARS zu gehen. also isset($_FILES["file"]). Eine weitere Sicherheitslücke kann das blosse kopieren einer Datei darstellen, deswegen sollte man entweder immer mit is_uploaded_file prüfen oder gleich move_uploaded_file()[3] anstatt copy benutzen.

gl & hf

Thorsten

[1] http://www.php.net/manual/de/configuration.php#ini.register-globals
[2] http://www.php.net/manual/de/reserved.variables.php#reserved.variables.files
[3] http://www.php.net/manual/de/function.move-uploaded-file.php