假设我们的网络托管是 linux 并且安装了 php: 1- 当可以上传 php 代码而不是图像时,可能会发生最糟糕的情况。
2- 入侵者能以某种方式找回我的数据库密码吗?假设存储图像的目录有 777 个文件权限。
3-如果图像目录有644权限怎么办?
我的问题的答案可以与给这两个问题的答案结合起来:安全性:如何验证图像文件上传?和接受图片上传的安全问题
假设我们的网络托管是 linux 并且安装了 php: 1- 当可以上传 php 代码而不是图像时,可能会发生最糟糕的情况。
2- 入侵者能以某种方式找回我的数据库密码吗?假设存储图像的目录有 777 个文件权限。
3-如果图像目录有644权限怎么办?
我的问题的答案可以与给这两个问题的答案结合起来:安全性:如何验证图像文件上传?和接受图片上传的安全问题
当可以上传 php 代码而不是图像时,可能会发生最糟糕的情况。
最坏的情况:入侵者可以执行任意 PHP 代码,甚至可能是服务器上的任意代码。如果攻击者足够聪明而系统管理员不聪明,他甚至可能拥有整个服务器/子网/网络/...
入侵者能以某种方式找回我的数据库密码吗?假设存储图像的目录有 777 个文件权限。
如果攻击者可以执行 PHP 代码(这当然取决于你的安全措施),他肯定可以读取当前用户的文件,所以答案很可能是肯定的。
如果镜像目录有644权限怎么办?
除非您在 CGI 模式下使用 PHP,否则执行位对于网络服务器执行脚本不是必需的,因此仅此一项没有帮助。
当然,这些不是你应该问的问题。您应该问的问题是如何防止攻击者首先上传可执行的 PHP 文件。我对此的回答是,您应该根据白名单检查文件扩展名并删除其他所有内容,例如:
$pattern = "/\.(jpe?g|gif|png)$/iD";
if (!preg_match($pattern, $filename))
die("Please don't.");
您应该确保不允许解析图像目录中的 php 文件,因为我假设它将向公众开放。
您可以在 /images/.htaccess 文件中使用
RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
这样,如果他们尝试访问 domain.com/images/hackdatabase.php,它只会返回他们的代码而不是文件。
但是您应该首先检查以确保它是图像。