Apache 服务器配置
1、防止直接访问文件
# 在上传目录中添加 .htaccess 文件
<FilesMatch “\.(php|pl|py|jsp|asp|exe|cgi)$”>
Order Allow,Deny
Deny from all
</FilesMatch>
这段配置将阻止对上传目录中具有特定扩展名(如 PHP、Perl、Python 等)的文件的直接访问。
2、禁止目录浏览
# 在上传目录中添加 .htaccess 文件
Options -Indexes
3、限制访问权限
# 在上传目录中添加 .htaccess 文件
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
这将仅允许来自本地(如开发环境)的请求访问上传目录。根据需要修改 Allow from
的值来允许特定 IP 地址或范围。
4、应用最小权限原则
确保上传目录的文件权限设置为最低限度,只允许必要的用户访问。一般情况下,目录权限应设置为 755,文件权限应设置为 644。
5、定期审计和监控
定期审计上传目录中的文件,确保没有不必要或可疑的文件。监控文件活动以发现潜在的安全问题。
php 配置
1、限制文件大小
限制文件上传的最大大小,以防止滥用:
// 在 php.ini 中设置文件上传大小限制
upload_max_filesize = 2M
post_max_size = 2M
//也可以在 .htaccess 文件中设置:
php_value upload_max_filesize 2M
php_value post_max_size 2M
php 代码上传
1、限制上传的文件类型
<?php
$allowedTypes = [‘image/jpeg’, ‘image/png’, ‘image/gif’];
$fileType = $_FILES[‘uploadedFile’][‘type’];
if (!in_array($fileType, $allowedTypes)) {
die(“不允许上传的文件类型”);
}
// 继续处理上传文件
?>
2、使用随机数
避免使用用户提供的文件名来保存文件。使用随机生成的文件名来减少预测性攻击的风险:
<?php
$randomName = uniqid() . ‘.’ . pathinfo($_FILES[‘uploadedFile’][‘name’], PATHINFO_EXTENSION);
move_uploaded_file($_FILES[‘uploadedFile’][‘tmp_name’], ‘/path/to/uploads/’ . $randomName);
?>
使用防病毒扫描