Разработка безопасной программы - 2
Одна из проблем, с которыми приходится сталкиваться программистам Java, состоит в том, что в разных платформах используются далеко не одинаковые концепции предоставления прав доступа и способы их реализации. Потребности Java в кроссплатформенной совместимости и решение предоставлять интерфейс API, основанный на минимальном числе однотипных возможностей, поддерживаемых используемыми платформами, означает, что Java-программы не могут следовать принципу наименьшего числа привилегий, когда он имеет отношение к базовой платформе.
Та же самая проблема одолевает Java и в том случае, когда дело доходит до взаимодействия с другими службами безопасности базовой платформы. Так например, Java-программы не имеют понятия о полномочиях доступа к файлам или списках контроля доступа (Access Control List—ACL). Java-программа, которая собирается воспользоваться средствами безопасности и службами базовой ОС, должна прибегнуть к использованию непереносимого кода, такого как код NMI (Native Method Invocation) языка Java.
Возможно, было бы более разумным выделить средства безопасности и службы общие для некоторого подмножества поддерживаемых платформ (такие как списки контроля доступа для множества пользователей и файлов), предоставить для них API и выдавать соответствующую ошибку при работе под управлением платформ, которые не поддерживают выделенные средства и службы. По правде говоря, некоторые аспекты архитектур безопасности, реализованных различными платформами, могут заметно отличаться друг от друга, и вместе с тем они имеют достаточное число средств, удовлетворяющих описанному выше процессу выделения их в отдельное подмножество.