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

PHP对象序列化的安全性如何?跨页面传递是否安全?(使用phpXMLrpc),php,security,odoo,object-serialization,Php,Security,Odoo,Object Serialization,基本上我就是这么做的: Im使用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 lo

基本上我就是这么做的:

Im使用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请求?

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

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


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

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

具体回答

PHP对象序列化有多安全


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

那么即使对象包含密码,它仍然可以保存吗?尽管是一个私有变量?@mjsey什么安全?从恶意用户手中安全?即修改它?@mjsey什么恶意用户?一个在互联网上(远程攻击者)?那么是的,它是安全的。服务器上有一个(本地攻击者)?取决于权限和你的服务器。是的,是远程的,抱歉。只要将带有连接参数的序列化对象从一个页面传递到另一个页面被认为是安全的做法,就应该知道这一点。