一、系统与框架基础安全
sudo yum update -y更新CentOS系统和所有软件包,修复已知安全漏洞,降低被攻击风险。.env或config/app.php)中设置app_debug = false,避免生产环境中显示详细错误信息(如数据库结构、代码逻辑),防止敏感信息泄露。composer update命令更新ThinkPHP框架至最新稳定版本,及时修复框架自身安全漏洞(如SQL注入、XSS等)。二、Web服务器配置优化
public目录(而非项目根目录),避免直接暴露application(应用逻辑)、runtime(临时文件)等敏感目录。例如,Nginx配置中设置root /path/to/your/thinkphp/project/public;。listen 443 ssl;),强制用户通过https://访问网站,加密数据传输(如登录信息、支付数据),防止中间人攻击。limit_req_zone模块或第三方工具(如Fail2Ban),限制单个IP地址的请求频率(如每秒最多10次请求),防止DDoS攻击、暴力破解等恶意行为。三、ThinkPHP应用层安全配置
Validate类定义严格的输入规则,对用户提交的username、email、password等数据进行格式校验(如require必填、max:25最大长度、email邮箱格式)。同时,开启全局输入过滤(在config/app.php中设置default_filter = 'trim,strip_tags,htmlspecialchars'),自动去除首尾空格、HTML标签和特殊字符,防止SQL注入、XSS攻击。Db::name('users')->where('username', $username)->find())或PDO参数绑定(如Db::execute("SELECT * FROM users WHERE id = ?", [$id])),避免直接拼接SQL语句(如"SELECT * FROM users WHERE id = $id"),防止恶意SQL代码注入。ext => 'jpg,png,gif')和大小(如size => 2*1024*1024,限制2MB),并通过validate方法校验(如$file->validate([...]))。上传后,将文件移动至public/uploads等非应用根目录,避免直接通过URL访问上传的脚本文件(如upload.php)。config/session.php中设置:
type:使用redis(推荐,支持分布式部署)或file(默认)作为会话存储驱动;encrypt:开启encrypt => true,加密会话数据(如用户登录状态),防止会话劫持;expire:设置合理的会话过期时间(如1800秒,30分钟),避免会话长期有效。config/csrf.php中开启CSRF验证(enable => true),指定验证的请求类型(如methods => ['POST', 'PUT', 'DELETE']),并在表单中添加CSRF令牌({{ csrf_field() }})。ThinkPHP会自动校验令牌的有效性,防止跨站请求伪造攻击。四、权限与安全加固
www,Apache为apache):sudo chown -R www:www /path/to/your/thinkphp/project;755(sudo chmod -R 755 /path/to/your/thinkphp/project),文件权限为644(避免777权限,防止其他用户修改文件);runtime、uploads)单独设置权限为775(sudo chmod -R 775 /path/to/your/thinkphp/project/runtime)。setenforce 0;/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled;chcon -R -t httpd_sys_rw_content_t /path/to/your/thinkphp/project/uploads(允许Web服务器读写uploads目录)。.env文件中(而非config/database.php等源代码文件),并通过dotenv扩展加载;.env文件权限为600(sudo chmod 600 /path/to/your/thinkphp/project/.env),仅允许所有者读取,防止敏感信息泄露。