系统级安全配置
sudo apt update && sudo apt upgrade -y更新Debian系统及PHP、MySQL等依赖包,修复已知安全漏洞,避免因底层组件缺陷引发风险。sudo组(usermod -aG sudo username),禁用root用户的SSH远程登录(修改/etc/ssh/sshd_config中PermitRootLogin no),限制空密码登录(设置PermitEmptyPasswords no);配置防火墙(如ufw)仅开放必要端口(sudo ufw allow 22/tcp; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable),并通过SSH密钥对认证替代密码登录,提升登录安全性。public目录(而非应用根目录),避免直接暴露application、runtime等敏感目录;禁用Apache的Directory Index自动列出功能(Options -Indexes),防止目录遍历攻击。ThinkPHP框架级安全设置
composer update topthink/framework),及时应用官方发布的安全补丁(如修复远程代码执行、反序列化等漏洞)。.env文件中的APP_DEBUG设置为false,避免暴露详细的错误堆栈信息(如数据库结构、代码逻辑),防止攻击者利用敏感信息进行针对性攻击。public,并将runtime(缓存、日志)、vendor(依赖包)等目录设置为不可写入(如chmod -R 755 runtime),避免恶意文件上传或篡改。Validator类对用户输入(GET、POST、PUT等)进行全面校验(如字段必填、长度限制、邮箱格式),例如:$validate = new \think\Validate([
'username' => 'require|max:25|min:3',
'email' => 'require|email'
]);
if (!$validate->check(input())) {
return json(['error' => $validate->getError()]);
}
对用户提交的文本数据(如评论、留言)使用htmlspecialchars()或ThinkPHP的filter_var函数过滤HTML标签及特殊字符,防止XSS攻击。Db::name('user')->where('id', $id)->find())或查询构造器,避免直接拼接SQL语句;若需原生查询,务必使用预编译语句(PDO的prepare方法)绑定参数,例如:$stmt = Db::getConnection()->prepare("SELECT * FROM user WHERE id = ?");
$stmt->execute([$id]);
$user = $stmt->fetch();
防止恶意SQL代码注入。firebase/php-jwt库生成Token,要求客户端在请求头中携带Authorization: Bearer <token>);通过ThinkPHP的think-auth扩展或自定义中间件实现基于角色的访问控制(RBAC),例如限制管理员角色访问/admin/dashboard接口:Route::group('admin', function () {
Route::get('dashboard', 'Admin/Dashboard/index')->middleware(\app\middleware\Auth::class);
})->allowCrossDomain();
确保用户仅能访问其角色允许的资源。think\middleware\VerifyCsrfToken),为表单添加_token隐藏字段(通过token()函数生成),验证请求的合法性,防止跨站请求伪造;开启自动转义功能(默认开启),对输出到视图的数据使用{{ }}语法(Blade模板)或htmlentities()函数转义HTML标签,避免恶意脚本执行;限制文件上传的安全策略,包括文件类型(仅允许jpg、png、gif)、大小(不超过2MB)、上传路径(设置为不可执行脚本,如chmod -R 755 public/uploads),并对上传文件进行病毒扫描(如使用ClamAV),防止恶意代码植入。其他增强安全措施
return 301 https://$host$request_uri;),保护数据传输过程中的隐私(如用户密码、支付信息)。session_driver=redis),提高会话存储的安全性和性能;启用会话加密(session_encrypt=true),防止会话劫持;设置合理的会话过期时间(如session_expire=1800秒,即30分钟),减少会话被滥用的风险。www-data)对项目文件具有最小权限:应用代码目录(如application、controller)设置为750(所有者可读写执行,组用户可读执行,其他用户无权限);静态资源目录(如public/assets)设置为755(允许其他用户读取);配置文件(如.env、config/database.php)设置为640(避免其他用户读取敏感信息,如数据库密码)。PHPStan、RIPS)扫描项目代码,检测潜在的安全漏洞(如SQL注入、XSS);定期检查服务器日志(如/var/log/nginx/access.log、/var/log/php-fpm/error.log),分析异常请求(如大量404错误、频繁的POST请求);部署Fail2Ban限制单个IP的访问频率(如每分钟最多60次请求),防止DDoS攻击或暴力破解。