在CentOS下对ThinkPHP进行安全防护,可从系统环境、框架配置、代码开发及运维管理等方面入手,具体措施如下:
系统与软件更新
定期更新CentOS系统及ThinkPHP框架、依赖包,修复已知漏洞:
sudo yum update -y  # 更新系统  
composer update     # 更新框架依赖包  
关闭敏感信息显示
生产环境中关闭调试模式,避免错误信息泄露:
在config/app.php中设置:
'app_debug' => false,  
输入验证与过滤
use think\facade\Request;  
$data = Request::post();  
$validate = new \think\Validate([  
    'username' => 'require|max:20|min:3',  
    'email' => 'require|email',  
]);  
if (!$validate->check($data)) {  
    return $validate->getError();  
}  
htmlspecialchars过滤。防范SQL注入
// ORM方式  
$user = Db::name('user')->where('id', $id)->find();  
// 参数绑定(原生SQL需手动绑定)  
$result = Db::query('SELECT * FROM user WHERE id = :id', ['id' => $id]);  
XSS攻击防护
config/template.php中设置:'tpl_replace_string' => [  
    '__JS__' => '/static/js',  
    '__CSS__' => '/static/css',  
],  
'auto_escape' => true,  // 开启自动转义  
{:raw()}标签并严格限制场景。CSRF防护
config/csrf.php中配置:return [  
    'enable' => true,  
    'token_name' => '__token__',  
    'cookie_name' => 'csrf_token',  
];  
<input type="hidden" name="__token__" value="{:csrf_token()}">文件上传安全
$file = Request::file('image');  
$info = $file->validate(['size' => 2*1024*1024, 'ext' => 'jpg,png'])->move('/path/uploads');  
if (!$info) {  
    return $file->getError();  
}  
会话与权限管理
// config/session.php  
'type' => 'redis',  
'encrypt' => true,  
服务器安全加固
firewalld)限制非必要端口访问:sudo firewall-cmd --add-port=80/tcp --permanent  
sudo firewall-cmd --reload  
参考来源: