一、基础环境与框架配置
public目录(而非应用根目录),避免直接暴露application、runtime等敏感目录;禁止通过URL直接访问runtime(缓存目录)、uploads(上传目录)中的PHP文件。config/app.php中的app_debug设置为false,隐藏详细的错误信息(如SQL语句、文件路径),防止敏感信息泄露。二、输入验证与过滤
think\Validate类定义严格的验证规则(如require(必填)、email(邮箱格式)、max:25(最大长度)),验证失败时返回友好提示,避免非法数据进入数据库。config/app.php中配置app_filter参数(如'app_filter' => ['strip_tags', 'htmlentities']),对所有输入数据进行全局过滤(去除HTML标签、转义特殊字符),防止XSS攻击。Db::table('user')->where('id', $id)->find())或ORM(如User::get($id)),避免直接拼接SQL语句;原生SQL需使用参数绑定(如Db::execute("SELECT * FROM user WHERE id = ?", [$id])),防止SQL注入。三、关键功能安全防护
config/app.php中设置csrf_on为true),为表单添加{{ csrf_token() }}令牌,验证表单提交的合法性,防止跨站请求伪造。think\File类的validate方法限制上传文件的类型(如jpg,png,gif)、大小(如2MB),并将上传目录(如public/uploads)设置为不可执行PHP脚本(通过Linux文件权限或Web服务器配置);对上传的文件进行二次扫描(如使用ClamAV查杀病毒)。config/session.php中的type为redis(提升会话存储安全性),开启encrypt(加密会话数据),设置合理的expire(如1800秒),并在每次会话启动时调用session_regenerate_id()方法,防止会话劫持。四、系统与服务器加固
chmod -R 755 /path/to/thinkphp),确保Web服务器用户(如www-data)仅对runtime、uploads目录有写入权限;配置/etc/sudoers文件,限制root登录,禁止直接通过SSH登录root账户。firewalld或iptables)限制入站流量,仅开放必要的端口(如80、443、22),阻止恶意IP访问;通过fail2ban工具监控日志,自动封禁频繁尝试登录的IP地址。五、额外安全措施
护卫神·防入侵系统等工具开启ThinkPHP防篡改功能,对runtime、uploads等目录进行7×24小时监控,拦截黑客上传webshell或篡改网站文件的尝试;或通过Linux ACL策略限制这些目录的执行权限。护卫神·防入侵系统的“网站后台保护”模块,设置后台访问授权密码,限制仅特定地区(如中国大陆)或IP段的用户可访问后台,降低后台被暴力破解的风险。