Все эти идеи, которые люди перечисляют (изоляция, наименьшие привилегии, белый список), являются инструментами.
Но сначала вы должны знать, что означает «безопасность» для вашего приложения. Часто это означает что-то вроде
- Доступность : Программа не сможет обслуживать одного клиента, поскольку другой клиент отправил неверные данные.
- Конфиденциальность : Программа не будет передавать данные одного пользователя другому пользователю
- Изоляция : Программа не будет взаимодействовать с данными, которые пользователь не намеревался.
- Возможность просмотра : Программа, очевидно, работает правильно - желательное свойство счетчика голосов.
- Доверенный путь : пользователь знает, с каким объектом они взаимодействуют.
Как только вы узнаете, что означает безопасность для вашего приложения, вы можете приступить к проектированию вокруг этого.
Одна практика проектирования, которая не упоминается так часто, как следовало бы, это Возможности объекта .
Многие защищенные системы должны принимать решения об авторизации - если этот фрагмент кода сможет получить доступ к этому файлу или открыть сокет для этого компьютера.
Списки контроля доступа - один из способов сделать это - указать файлы, к которым можно получить доступ. Такие системы, тем не менее, требуют больших затрат на обслуживание. Они работают в агентствах безопасности, где люди имеют разрешение, и они работают в базах данных, где компания, развертывающая базу данных, нанимает администратора БД. Но они плохо работают для защищенного программного обеспечения конечного пользователя, поскольку у пользователя часто нет ни навыков, ни желания обновлять списки.
Возможности объектов решают эту проблему, поддерживая решения о доступе к ссылкам на объекты - используя всю работу, которую программисты уже выполняют в хорошо спроектированных объектно-ориентированных системах, чтобы минимизировать количество полномочий, которыми обладает каждый отдельный фрагмент кода. См. CapDesk для примера того, как это работает на практике.
DARPA провела эксперимент по проектированию безопасных систем, названный проектом Browser DARPA, в ходе которого выяснилось, что система, спроектированная таким образом, - хотя в ней было столько же ошибок, что и в других объектно-ориентированных системах, - имела гораздо более низкую уязвимость. Поскольку разработчики следовали за POLA, используя объектные возможности, злоумышленникам было намного сложнее найти способ использовать ошибку для взлома системы.