Datei-Upload beschränken

JK_net

Erfahrenes Mitglied
Hallo!

Ich möchte meinen Usern gerne die Möglichkeit geben, PDF-Dateien bis 1 MB Größe auf meinen Server laden zu können.

Allerdings möchte ich mich dabei nur auf PDF-Dateien beschränken, und nichts anderes.
Kann mir jemand sagen, wie das erreiche?

MfG
Jens
 
Mhh ich glaub so geht das besser:

Code:
if(substr($_FILES["data"]["name"], -4) == '.pdf') 
{ 
$check = true; 
}
 
Hallo!

Die Informationen in $_FILES['userfile']['type'] und in $_FILES['userfile']['name'] können leicht gefälscht werden...

Mamphil
 
Meines Wissens beginnen alle PDF-Dokumente mit der Sequenz %PDF-<Versionsnummer>. Demnach könntest du die hochgeladenen Dateien auf diese Sequenz überprüfen.
 
Wo ist jetzt eigentlich noch das Problem? Es gibt ne ganze Reihe Möglichkeiten, jede hat so seine Schwachstellen. Daher gleich mehrere verwenden bzw. ne Funktion bauen.

Anfangen würd ich mit substr() um meinetwegen .pdf rauszubekommen. Dann würde ich den Mime Type checken. Also so irgendwie:

PHP:
// Array mit zugelassenen Mime Typen davor

$check = false;
foreach($datei_mime as $check1)
	{ 
  		if($check1 == $_FILES["data"]["type"])  
  			{ 
				$check = true; 
			}
	}

Oder halt (und) sowas

PHP:
function check($var, $array) 
{
$check = false;
$allowed = substr($var, -4);
		foreach($array as $check1) 
			{ 
				if($check1 == $allowed) 
					{ 
						$check = true; 
					} 
			}
								return $check;
}
 
Die Dateiendung und den Media-Typen allein zu prüfen, ist – wie Mamphil bereits erwähnte – keine sehr zuverlässige Methode. Denn sobald die Dateiendung auf pdf angepasst wird, sendet zumindest Windows gleich den passenden Media-Type (application/pdf), womit diese Überprüfung auch ausgetrickst wäre.

Eine hundertprozentige Sicherheit gibt es nicht, es sei denn, jemand verifiziert jede einzelne Datei. Dennoch könnte die Überprüfung des von mir er beschriebenen signifikanten Merkmals eines PDF-Dokumentes die Wahrscheinlichkeit wenn auch nur geringfügig erhöhen.

Alles in allem wäre es Folgendes:
PHP:
<?php

	if( isset($_FILES['foobar']) ) {
		$isPDF = false;
		$handle = fopen($_FILES['foobar']['tmp_name'], 'r');
		if( $_FILES['foobar']['error'] === UPLOAD_ERR_OK && $_FILES['foobar']['type'] == 'application/pdf' && (bool)preg_match('/^%PDF-[0-9.]+/', fgets($handle)) ) {
			$isPDF = true;
		}
		fclose($handle);
	}

?>
 
Zurück