sudo apt update && sudo apt upgrade -y,确保Debian系统内核、软件包(如Apache/Nginx、PHP)及ThinkPHP依赖的扩展处于最新状态,修复已知安全漏洞。usermod -aG sudo <用户名>加入sudo组;/etc/ssh/sshd_config,设置PermitRootLogin no;/etc/ssh/sshd_config中设置PermitEmptyPasswords no;~/.ssh/authorized_keys),替代密码登录。ufw(Uncomplicated Firewall)限制入站流量,仅允许必要端口(如HTTP 80、HTTPS 443、SSH 22):sudo ufw enable
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
```。
composer update topthink/framework升级,修复框架自身漏洞(如远程代码执行、反序列化等)。config/app.php或.env文件,设置:'app_debug' => false,
'app_trace' => false
避免敏感信息(如数据库密码、服务器路径)通过错误页面泄露。.env文件中设置强随机密钥(至少32位,包含大小写字母、数字和符号):APP_KEY=YourStrongRandomKeyHere!!!123
密钥用于数据加密(如Cookie、Session),泄露会导致会话劫持等风险。extra目录下不需要的插件);'show_error_msg' => false。Validate类定义严格验证规则,覆盖所有用户输入(如表单、URL参数):use think\facade\Validate;
$data = input('post.');
$rule = [
'username' => 'require|max:20|min:3|alphaNum',
'email' => 'require|email',
'age' => 'number|between:18,100'
];
$validate = Validate::make($rule);
if (!$validate->check($data)) {
return json(['error' => $validate->getError()]);
}
结合filter_var或strip_tags进行二次过滤(如去除HTML标签)。Db::table('user')->where('id', $id)->find()),自动使用PDO预处理;Db::query("SELECT * FROM user WHERE id = $id")),若必须使用,通过?占位符绑定参数:Db::query("SELECT * FROM user WHERE id = ?", [$id]);
```。
htmlentities转义,输出时使用{:变量}语法;think\facade\Filter过滤(如Filter::stripTags($content, '<p><a>'))。config/app.php中启用CSRF令牌:'csrf_on' => true,
表单中添加{token()}字段,控制器中通过$this->request->checkToken()验证令牌有效性。jpg|png|gif)、大小(如2MB):$file = request()->file('image');
$info = $file->validate(['size' => 1024*1024*2, 'ext' => 'jpg,png,gif'])->move('uploads');
runtime/uploads),或通过Nginx/Apache配置禁止直接访问;clamav)。public)权限设为755,文件权限设为644:sudo chmod -R 755 /var/www/thinkphp/public
sudo find /var/www/thinkphp/public -type f -exec chmod 644 {} \;
.env、config目录)权限设为600,所有者为用户而非www-data:sudo chown -R <用户名>:www-data /var/www/thinkphp
sudo chmod 600 /var/www/thinkphp/.env
```。
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 其他配置...
}
```。
iptables或fail2ban限制单个IP的频繁请求(如每分钟超过100次则封禁):sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/min -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
```。
Logwatch或Fail2ban自动分析系统日志(如/var/log/auth.log、/var/log/apache2/error.log),识别异常登录或攻击行为;rsync或tar备份网站文件(如/var/www/thinkphp)和数据库(如mysqldump),存储至异地(如云存储):tar -czvf /backup/thinkphp_$(date +%F).tar.gz /var/www/thinkphp
mysqldump -u root -p your_database > /backup/db_$(date +%F).sql
```。
通过以上措施,可全面覆盖Debian系统与ThinkPHP框架的安全需求,有效降低代码被攻击的风险。需注意,安全是持续过程,需定期复查配置、更新补丁并响应安全事件。