定期将ThinkPHP框架升级至最新稳定版本,及时修复已知安全漏洞(如远程代码执行、反序列化漏洞等);同时升级Ubuntu系统内核、PHP版本(建议使用PHP 8.1及以上),确保系统组件无安全短板。
将Web服务器(如Apache/Nginx)的根目录指向ThinkPHP项目的public文件夹(而非项目根目录),避免暴露app、vendor等敏感目录;确认入口文件(index.php)位置未被篡改,防止路径遍历攻击。
生产环境中,修改.env文件将APP_DEBUG设置为false,关闭调试模式;同时关闭PHP错误报告(在php.ini中设置display_errors = Off、log_errors = On),将错误日志记录到指定文件(如/var/log/php_errors.log),避免敏感信息(如数据库配置、代码逻辑)泄露。
使用ThinkPHP的Validate类定义严格验证规则(如字段类型、长度、格式),对用户提交的GET/POST/PUT数据进行检查(例如:用户名需为字母+数字组合、邮箱需符合正则表达式);结合Request类的param()方法自动过滤特殊字符(如<、>、'),防止SQL注入、XSS攻击。
Db::table()->where('id', '=', $id)->find())或查询构造器,避免直接拼接SQL语句;若需原生查询,使用PDO预编译语句(prepare()+execute())。{{ $data }}语法(而非{$data|raw}),将特殊字符转为HTML实体(如<转为<)。{!! csrf_field() !!}令牌(或通过@csrf Blade指令),启用全局CSRF验证(在app/middleware.php中注册VerifyCsrfToken中间件),验证请求的合法性。Request类的file()方法验证上传文件的MIME类型(如image/jpeg、application/pdf),仅允许合法类型上传。php.ini中设置upload_max_filesize(如2M)、post_max_size(如8M),防止上传超大文件耗尽服务器资源。runtime/uploads等非Web可执行目录(权限设为0755),使用uniqid()+时间戳重命名文件(避免文件名包含恶意代码),禁止上传可执行文件(如.php、.sh)。think-jwt扩展),确保只有授权用户可访问敏感接口(如用户信息、支付功能)。think-acl扩展定义角色(如管理员、普通用户)及权限(如增删改查),限制用户对资源的访问范围(例如:普通用户无法删除他人数据)。ufw(Uncomplicated Firewall)限制入站流量,仅开放必要端口(如HTTP 80、HTTPS 443、SSH 22),阻止非法IP访问(如ufw allow from 192.168.1.0/24 to any port 22)。rewrite规则),加密数据传输防止中间人攻击。think-throttle扩展或Nginx的limit_req_zone模块,限制单个IP的请求频率(如每分钟60次),防止DDoS攻击或暴力破解。config目录(含数据库配置database.php)、.env文件权限设为0600(仅所有者可读写);runtime目录(缓存、日志)权限设为0755(所有者可读写执行,组用户可读执行)。public目录权限设为0755,其中index.php等入口文件权限设为0644(避免上传恶意脚本执行);上传目录(如runtime/uploads)权限设为0755,且禁止执行PHP(在Nginx中添加location ~ ^/runtime/uploads/.*\.php$ { deny all; })。.env中设置APP_LOG_LEVEL = info),记录请求、错误、SQL等信息;同时配置Ubuntu系统日志(/var/log/syslog)和Web服务器日志(如Apache的access.log、error.log),集中存储日志(如使用ELK栈)。ufw deny)或修复漏洞;制定应急预案(如数据泄露时立即备份数据、恢复镜像)。