2015-04-22 10 views
2

В основном это то, что я делаю:Насколько безопасна сериализация объектов PHP и безопасно ли передавать страницы? (Использование phpXMLrpc)

Im using 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?

ответ

3

Вы можете безопасно сериализовать запросы. Вы даже можете безопасно вставлять данные пользователя в данные и затем сериализовывать их.

Однако never unserialize данные, которые пользователь может изменить. Например, никогда не отказывайте загрузку файла cookie или формы, или что-нибудь, что посылает вам другой сервер.

Да, это абсолютно безопасно для сериализации для хранения данных в сеансе.

+0

Значит, он все еще сохраняется, хотя объект содержит пароль? Хотя это частная переменная? – mjsey

+0

@mjsey безопасен от чего? – ircmaxell

+0

Безопасно от рук злоумышленника, чтобы изменить его? – mjsey

2

Я предполагаю, что вы обсуждаете сохранение объектов в переменной% _SESSION. Эта переменная хранится на сервере, поэтому она модифицируется только с сервера. Таким образом, сеанс настолько же безопасен, как и ваш сервер. Если пользователи могут войти на ваш сервер или заставить ваш сервер неправильно вести себя с ошибкой приложения, сеанс не очень безопасен. В противном случае, вероятно, это достаточно хорошо.

Чтобы конкретно ответить

Насколько безопасен PHP объект сериализации

Сериализация не является безопасным на всех. Это кодирование, а не шифрование данных. Любой может десериализовать, модифицировать и повторно сериализовать объекты. Таким образом, сериализация не добавляет никакой безопасности. Если сеанс недостаточно безопасен для вас, вам необходимо добавить дополнительную безопасность.