2016-01-12 77 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

不客气。一定要标记这个答案作为你的文章的答案,以便人们知道它已经解决了:)。 –