PHP对象序列化的安全性如何,是否可以安全地传递页面? (使用phpXMLrpc)

时间:2015-04-22 12:59:11

标签: php security odoo object-serialization

基本上这就是我在做的事情:

我正在使用PHPXMLRPC与Odoo进行通信。

从本质上讲,我需要发送的每个请求都需要遵循以下结构进行通信:

//The database I wish to connect too
$msg->addParam(new xmlrpcval($this->dbname, "string"));

//The logged in user id
$msg->addParam(new xmlrpcval($this->userID, "int"));

//The logged in users password
$msg->addParam(new xmlrpcval($this->password, "string"));

//The model
$msg->addParam(new xmlrpcval("project.project", "string"));

//The method Im requesting to call
$msg->addParam(new xmlrpcval("read", "string")); 

//Query parameters
$msg->addParam(new xmlrpcval($id_list, "array")); 
$msg->addParam(new xmlrpcval($field_list, "array")); 

现在我编写了一个类,它在构造函数中将实例变量设置为传递给构造函数的值,即

class PHPClient{
   private $userName;
   private $password;
   private $dbname;
   private $server_url;
   private $userID;



public function __construct($server_url, $database, $user, $password)
{
    $this->server_url = $server_url;
    $this->dbname = $database;
    $this->userName = $user;
    $this->password = $password;
    $this->userID = False;


}

在某些情况下,我希望在其他地方再次使用同一个对象,也许在另一个页面中。而不是要求用户再次有效地“登录”并再次输入他们的所有细节,然后必须创建另一个对象,这将足够安全地序列化PHPClient对象并存储在会话中然后在我需要使用的任何其他页面中对象,以验证用户是否已登录并具有足够的权限,然后反序列化该对象以执行任何进一步的RPC请求?

2 个答案:

答案 0 :(得分:5)

您可以安全地序列化请求。您甚至可以安全地将用户输入放入数据中,然后将其序列化。

但是,从不反序列化用户可能修改的数据。例如,永远不要反序列化cookie或表单有效负载,或其他服务器发送给您的任何内容。

所以是的,序列化以在会话中存储数据是完全安全的。

答案 1 :(得分:2)

我假设您正在讨论在%_SESSION变量中存储对象。此变量存储在服务器上,因此只能从服务器进行修改。因此会话与您的服务器一样安全。如果用户可以通过应用程序错误登录到您的服务器或导致服务器行为不正确,则会话不是很安全。否则,它可能已经足够了。

具体回答

  

PHP对象序列化的安全性

序列化根本不安全。它是数据的编码,而不是加密。任何人都可以反序列化,修改和重新序列化对象。因此序列化不会增加安全性。如果会话对您来说不够安全,那么您需要添加额外的安全性。