在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
参考来源: