在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
參考來源: