2016-01-12 80 views
1

如何從$allowed數組中準備僞造preg_match擴展主題字符串?目標是使用擴展名不在允許的數組中的文件名。我嘗試了一些技巧,如UTF8編碼和新線路注入,但無法實現任務目標。謝謝你,對不起我的英語如何提取文件擴展名並根據允許的擴展名數組進行檢查?

$allowed = array('tst', 'dll'); 
$filename = basename($test); 
if (preg_match('#\.(.+)$#', $filename, $matches) && isset($matches[1]) && !in_array($matches[1], $allowed)) 
    die("Extension not allowed!"); 

echo $ext; 
+1

如果你有權訪問這些文件,你可以使用'FileInfo'來檢查他們的MIME類型(http://php.net/manual/en/ref.fileinfo.php)。如果不是或者那不是你的目標 - 你可以簡單地使用:'$ ext = last(explode(「。」,$ filename))'。 –

+1

在大多數情況下,您需要檢查文件類型,而不是文件擴展名。 –

回答

0

pathinfo是你在找什麼

PHP.net

$file_parts = pathinfo($filename); 

switch($file_parts['extension']) 
{ 
    case "jpg": 
    break; 

    case "exe": 
    break; 

    case "": // Handle file extension for files ending in '.' 
    case NULL: // Handle no file extension 
    break; 
} 

這應該是一個很好的例子與走得更遠。

+0

謝謝你很好的回答 – sebastianpszczolka

+0

不客氣。一定要標記這個答案作爲你的文章的答案,以便人們知道它已經解決了:)。 –