鉴于这个例子:
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)
这将输出数据库对象的私有变量,即使它们被标记为私有(因此,据我所知,外部世界无法使用).
我的问题是:
提前致谢
编辑:在这个项目中,管理部分将提供创建自定义PHP脚本以作为部分合并到站点中的功能.由于这是开发给第三方实体,我担心的是,由于某种原因,客户无意中转储$ page对象(在我们的代码中,是主要的可修改对象)以便"探索"它.
封装是一种架构机制,而不是安全措施,不能这样使用.
攻击者究竟会如何利用此安全风险?它只能从源代码内部访问,因此他也可以读取受保护类的源代码或项目中的任何其他源代码.
此外,即使在C++中,您也可以通过准备一个具有正确偏移到对象的指针来访问私有成员.
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |