Разработка безопасной программы
До появления языка Java, разработка безопасной программы, как правило, сводилась к написанию привилегированной программы, устойчивой к злонамеренным попыткам использовать ее права доступа. Привилегированная программа—это программа, которая взаимодействует с другими программами, не имеющими те же самые права доступа. К таким программам относятся, прежде всего, сетевые службы, программы SUID/SGID и сетевые клиенты. Атаки на эти программы обычно являются результатом дефектов программного обеспечения, хотя ошибки конфигурирования ПО или неквалифицированное программирование также могут стать их причиной. К числу распространенных атак такого рода можно отнести атаки посредством переполнения буфера, атаки, обусловленные конфликтами между файлами и атаки, связанные с проверкой достоверности входных данных.
Если исходить из конечной вероятности того, что программист может внести в программное обеспечение ошибки, которые злоумышленники впоследствии используют в своих целях, то язык программирования может в большей или меньшей степени влиять на уязвимость приложений к атакам. Например, отсутствие в языке Си такого типа данных первого класса, как строковые переменные, а также автоматического контроля границ массивов, способствует появлению ошибок программирования, связанных с контролем границ массивов, а это, в свою очередь, делает программы, написанные на Си, уязвимыми к атакам посредством переполнения буфера.
Чтобы свести к минимуму риск, обусловленный ошибками программного обеспечения, программисты могут использовать “принцип наименьшего числа привилегий”. Согласно этому принципу любая часть программного кода должна выполняться с минимальными правами доступа, требуемыми для возложенных на нее задач. Это ограничивает число прав доступа, которое будет захвачено в случае взлома программы. Более того, программа, требующая для работы определенных привилегий доступа, должна активизировать их, только когда они требуются, и отключать—когда они больше не нужны. Это позволяет уменьшить объем кода, работающего с привилегиями.