2012-01-09 53 views
2

在许多关于安全文件上传的文章中说,最好是准备一份白名单而不是黑名单。但似乎这种方法有双扩展文件的一些问题。例如,我有一个白名单,如'pdf','doc','docx',但是这个白名单返回为apple.php.doc或apple.doc.php。双扩展将绕过扩展检查规则

如何编写安全扩展检查功能?

+3

“apple.php.doc”有什么问题? – zerkms 2012-01-09 05:21:20

+1

像这样的“双倍延伸”会成为一个问题?我不再使用Windows了,但是在'.doc'之前我不会想象'.php'(甚至'.exe'),这对于os或任何程序都意味着什么。 (显然apple.doc.php可能会出现问题。) – 2012-01-09 05:25:32

+0

所以最后的扩展应该被验证。 – 2012-01-09 05:37:22

回答

0

你应该试着去了解其中的原因,你的问题没有任何意义。

你不应该允许任何特定扩展名的原因是一些网络服务器(如Apache)确定文件是基于它们的服务器的方式,当然这只适用于他们公开服务的目录中的文件,但大多数上传的文件到达那里的时间,所以当你允许服务器执行类似.php的扩展时会发生什么,它允许网络上的随机用户在你的网站上注入代码。

对于.php.doc不会发生这种情况,因为扩展名仍然是.doc,服务器会这样对待它。

值得一提的是,可以将网络服务器配置为不在目录内执行某些文件,但这不是默认设置,实际上很少有人这么做。

+0

检查双扩展信息在这里:www.acunetix.com/websitesecurity/ upload-forms-threat/ 将AddHandler php5-script .doc添加到httpd.conf并将file.php.doc执行 – carlos 2015-01-07 15:05:51

3

使用此代码,以检查是否扩展性好:

$valid_exts = array('doc', 'pdf'); 
if (in_array(pathinfo($filename, PATHINFO_EXTENSION), $valid_exts)) { 
    // everything is fine 
} else { 
    // not fine 
}