为什么对象中的私有变量"可见"来自外部世界?

Tiv*_*vie 4 php class object

鉴于这个例子:

class Database
{
    private $host,
            $database, 
            $username, 
            $password,
            $type;

    public $active_connection;

    //Some methods
}


class Page
{
    private $db;


    public function __construct($id)
    {
        // Some code

        $this->db = new Database($id);
    }

    //Some Methods
}


$page = new Page(0);

var_dump($page);
Run Code Online (Sandbox Code Playgroud)

这将输出数据库对象的私有变量,即使它们被标记为私有(因此,据我所知,外部世界无法使用).

我的问题是:

  1. 这是安全隐患吗?
  2. 有没有办法有效地隐藏那些标记为私有的变量?

提前致谢

编辑:在这个项目中,管理部分将提供创建自定义PHP脚本以作为部分合并到站点中的功能.由于这是开发给第三方实体,我担心的是,由于某种原因,客户无意中转储$ page对象(在我们的代码中,是主要的可修改对象)以便"探索"它.

Leo*_*sov 6

封装是一种架构机制,而不是安全措施,不能这样使用.

攻击者究竟会如何利用此安全风险?它只能从源代码内部访问,因此他也可以读取受保护类的源代码或项目中的任何其他源代码.

此外,即使在C++中,您也可以通过准备一个具有正确偏移到对象的指针来访问私有成员.