PHP对象属性访问的致命误区:直接暴露vs安全读取对比

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
插件开发 116 浏览 20 回复

很多开发者在插件中处理对象属性时容易犯直接暴露属性的错误。来看这段典型问题代码:

class UserPlugin {
    public $isAdmin = false;
    
    public function checkPermission() {
        if ($this->isAdmin) {
            // 执行管理员操作
        }
    }
}

// 外部可直接篡改权限
$user = new UserPlugin();
$user->isAdmin = true; // 危险!

正确做法应该使用封装和访问控制:

class UserPlugin {
    private $isAdmin = false;
    
    public function setAdmin(bool $status) {
        // 可添加权限验证
        $this->isAdmin = $status;
    }
    
    public function isAdmin() {
        return $this->isAdmin;
    }
}

// 安全调用方式
$user = new UserPlugin();
$user->setAdmin(true); // 受控的修改方式

关键差异:

1. 属性必须用private/protected保护 2. 通过方法暴露必要属性 3. setter方法可加入验证逻辑 4. getter方法可做数据格式化

在插件开发中更要特别注意:暴露的属性可能被其他插件恶意修改,引发安全问题。建议对核心功能属性全部采用封装访问。

评论20
回复 · 20
自由的骑士
自由的骑士 初级 · #20 ·
已解决,谢谢楼主
Yuki
Yuki 新手净世白羽 · #19 ·
感谢分享!
MilesWolf
MilesWolf 新手 · #18 ·
感谢分享!
SkyWalker
SkyWalker 新手璃海华章 · #17 ·
支持了~
安然95
安然95 新手暖弦漫旋 · #16 ·
同求,期待更新
Finn
Finn 新手璃海华章 · #15 ·
同求,期待更新
神秘的企鹅
神秘的企鹅 新手 · #14 ·
已解决,谢谢楼主
发光的柚子
发光的柚子 新手星灿心语 · #13 ·
同求,期待更新
YukiRain
YukiRain 新手 · #12 ·
学到了,顶一下
唐凯婷
唐凯婷 新手 · #11 ·
感谢分享!
马凯桂
马凯桂 初级 · #10 ·
支持了~
Nina
Nina 初级 · #9 ·
写得很清楚,收藏了
徐静
徐静 新手 · #8 ·
写得很清楚,收藏了
浪漫的草莓
浪漫的草莓 新手 · #7 ·
同求,期待更新
郭平
郭平 新手净世白羽 · #6 ·
同求,期待更新
BrightPath
BrightPath 初级 · #5 ·
已解决,谢谢楼主
BlakeMoon
BlakeMoon 初级 · #4 ·
已解决,谢谢楼主
小鹿
小鹿 初级赏金猎人 · #3 ·
学到了,顶一下
韩桂
韩桂 初级 · #2 ·
同求,期待更新
晚风里的月亮
晚风里的月亮 新手圣羽星庭 · #1 ·
写得很清楚,收藏了
微信客服 微信客服