双重扩展将绕过扩展检查规则

时间:2012-01-09 05:17:36

标签: php regex secure-coding

在关于确保文件上传的许多文章中说,准备白名单而不是黑名单更好。但似乎这种方法对双扩展文件有一些问题。例如,我有一个像'pdf','doc','docx'的白名单,但这个白名单对于apple.php.doc或apple.doc.php都返回。

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

2 个答案:

答案 0 :(得分:3)

使用此代码检查扩展程序是否正常:

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

答案 1 :(得分:0)

你应该试着理解这个的原因,你的问题没有任何意义。

您不应该允许任何特定扩展的原因是某些Web服务器(如Apache)根据它们确定文件服务器的方式,当然这仅适用于他们公开服务的目录中的文件,但大多数上传的文件到那里的时间所以当您允许服务器将执行的扩展名(如.php)时会发生的情况是,它允许网络上的随机人员在您的网站上注入代码。

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

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