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