По дате Февраль 2nd, 2011

php - прячем информацию от разработчиков

Задача:  написать непрозрачный объектно-ориентированный код на php.
Есть система, которая работает с некоторыми секретными данными. Данные хранятся в xml, и закрыты ассиметричным ключом. Закрытый ключ хранится в коде внутри финализированного метода внутри класса. Класс накрыт зендом и поднимается только через дизасм. Скрепя сердце начальство признало этот способ безопасным. Доступ к классу осуществляется через https соединение. Столкнулся с проблемой, которая разорвала мне мозги: вся эта система ходит по рукам, но всё время остается закрытой для сторонних разработчиков за исключением того, что у системы есть документированное API. А значит на эту систему вешаются сторонние модули.Несмотря на то, что сам класс, который парсит xml с секретными данными финализированный и всё, что можно находится в private, добрые люди намекнули, что эта система пробиваема на Ура. Способ обхода очень странный: самый верхний объект прогоняется через var_dump, результат вывода кэшируется, а затем кэш парсится. Получается, что если мой объект расшифровал секретный xml, то он хранит распарсированные конфиги у себя в private свойствах, потом его сканирует сторонний модуль через var_dump или print_r и грабит секретную статическую информацию производителя системы, которая одинакова на всех копиях системы. На сколько мне известно, var_dump и print_r могут получить доступ к всем свойствам (в том числе private и protected). Уязвимостью это язык не поворачивается, это дыра, в которую можно пешком пройти.

final class Center {

private static $domSecret = 'DOM';public function makeProfit($a){

return self::$domSecret.$a;

}

public function __construct(){

exit("error");

}

}

echo Center::makeProfit('::Profit');

//а тут - вылетает с ошибкой

$c = new Center();

Вариации на тему^
private function __construct(){}

http://www.php.ru/forum/viewtopic.php?t=29560

Опубликовано Февраль 2, 2011 | автор: levik  |  Нет комментариев »