PDO实例安全性


PDO instance security

已知的主要方法是拥有一个带有可更改的预构建查询的class;但假设大约有80个表,每个表包含数千行数据,那么编写每个表的查询将需要很长时间。。。

我只是想了解为什么在主作用域中拥有开放连接实际上是一个安全问题——他们如何"拦截"它?

举个例子:

// Main index page
$db = new PDO('mysql:host=x;dbname=x;','user','pass');

这会是一种威胁吗?如果是,如何威胁?(因为它从未恢复为空)

或者这是一种更安全的方法,因为实例永远不会保存?

final class DataCenter
{
    public static function GetInstance()
    {
        return new PDO('mysql:host=x;dbname=x;','x','x');
    }
}
$smpt = DataCenter::GetInstance()
        ->Prepare("SELECT * FROM x");
$smpt->Execute();
$smpt->FetchAll();
print_r($smpt);

如果这让人感到困惑,我很抱歉-我只想知道:如果实例化一个从未终止或恢复为null的PDO连接是一个安全问题,怎么会呢?因为用户看不到代码

提前谢谢。

在"全局"范围内建立连接可以被"拦截"

不,那完全是胡说八道。变量作用域只是一种可以帮助您以可维护和理智的方式组织代码的东西无论如何,这都不是一种安全措施如果有人,任何人,可以"拦截"服务器上的全局变量,那么他们可以拦截服务器上所有类型的变量和内存内容。因为这意味着它们在您的服务器上窥探您的内存。如果攻击者已经在那里了,那么你已经死在水里了。

全局变量并不比任何其他类型的变量更不安全,"来自"服务器外部(希望是普通攻击者所在的地方)。

请注意,仍然有许多其他反对全局变量的论点,但安全性不是其中之一。