Zabezpieczenie przed code injection...

0

Witam,

Piszę aplikację w Zend Framework. Używam też jQuery z pluginem Uploadify. Jeden z testerów aplikacji uzyskał dostęp do skryptu PHP odpowiadającego za upload i zmodyfikował go tak, że plugin pozwalał na upload plików PHP. Uprawnienia na serwerze to 755. W jaki sposób udało mu sie uzyskać dostęp do skryptu i zapisać go zmodyfikowanego?

0

jeśli wszystkie Twoje zabezpieczenia w kodzie są napisane w javascripcie, to wyobraź sobie, że nie istnieją. Zakładając, że tester nie zna Twojego hasła do ftp, ani nie dostał się w jakiś niecny sposób na serwer to masz lukę w php i ten fragment kodu który przyjmuje pliki powinieneś tutaj wkleić do sprawdzenia.

0

@babintom89 nie napisałeś nam nic o tym jak zabezpieczasz swoją aplikację więc skąd niby mamy wiedzieć? Jeśli robisz jakąś blacklistę, tzn np. sprawdzasz czy user chce wrzucić coś *.php to na pewno robisz źle. Tak samo jeśli dokonujesz weryfikacji po stornie użytkownika za pomocą JS.

0
krwq napisał(a)

jeśli wszystkie Twoje zabezpieczenia w kodzie są napisane w javascripcie, to wyobraź sobie, że nie istnieją. Zakładając, że tester nie zna Twojego hasła do ftp, ani nie dostał się w jakiś niecny sposób na serwer to masz lukę w php i ten fragment kodu który przyjmuje pliki powinieneś tutaj wkleić do sprawdzenia.

Generalnie wg. ustawień Uploadify po wybraniu pliku tablicę $_FILES obsługuje skrypt umieszony zresztą na zewnętrznym serwerze:

<?php
if(!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];
	$targetPath = $_SERVER['DOCUMENT_ROOT'] . '/content/files/';
	$fileinfo = pathinfo($_FILES['Filedata']['name']);
	$filename = md5(time()) . '.' . $fileinfo['extension'];
	$targetFile =  str_replace('//','/',$targetPath) . $filename;
	$result = move_uploaded_file($tempFile,$targetFile);
	if($result) {
		echo $filename;
		}else echo $filename;
	}
?>

Jednak tester poczynił zmiany w pliku uploadify.php (zakomentował od $fileTypes w dół):

if (!empty($_FILES)) {
	$tempFile = $_FILES['Filedata']['tmp_name'];
	$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
	$targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
	
	 $fileTypes  = str_replace('*.','',$_REQUEST['fileext']);
	 $fileTypes  = str_replace(';','|',$fileTypes);
	 $typesArray = split('\|',$fileTypes);
	 $fileParts  = pathinfo($_FILES['Filedata']['name']);
	
	 if (in_array($fileParts['extension'],$typesArray)) {
		// Uncomment the following line if you want to make the directory if it doesn't exist
		// mkdir(str_replace('//','/',$targetPath), 0755, true);
		
		move_uploaded_file($tempFile,$targetFile);
		echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
	 } else {
	 	echo 'Invalid file type.';
	 }
}
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1