Вы спрашиваете, можно ли использовать ваш код. Да. Весь код пригоден для использования. Вы можете не думать, что это потому, что вы думаете, что рассмотрели ситуации, о которых можете думать, но другая сторона обычно находит ситуацию, о которой вы не думали. Но я всегда говорю, что все оружие тоже заряжено.
Безопасность - это больше, чем просто код. Вы должны учитывать среду, в которой он запускается, что еще пользователю было разрешено делать, прежде чем он запустил ваш код и т. Д. И т. Д.
Если вы действительно беспокоитесь о том, что может случиться с этим кодом, создайте матрицу рисков. Начните с той части, которая вас беспокоит, и перечислите все ее предположения. Например, в вашем случае вы можете начать с:
- / home / username - это каталог, который я думаю (т.е. не точка монтирования, символическая ссылка, поддельный пользователь и т. Д.)
- указанный путь является тем, который я ожидаю, и ему разрешено существовать
- путь - обычный файл (например, не специальное устройство)
- путь имеет определенного владельца, группу или режим
- Я запускаю
perl
Я думаю, что я (нет пути атаки в поиске исполняемого файла)
PERL5LIB
, PERL5OPT
или -I
не загружали пути загрузки модулей (загрузка пути при поиске модулей не выполнялась)
И так далее, и так далее. Как только вы разработаете все свои предположения, вы убедитесь, что они верны, зафиксировав эти случаи. Вы также найдете все их предположения, заблокируете их и так далее. Perl проверка порчи поможет с некоторыми из них (и я расскажу об этом более подробно в Mastering Perl ).
Успешные атаки часто являются косвенными. Например, я был частью работы по обеспечению безопасности некоторых данных в очень богатом и параноидальном банке. Мы сделали все, что могли, с помощью компьютера, и один из моих коллег в бездействующем разговоре спросил, как они справились с задачей, прежде чем мы установили сервер. Они сказали: «О, эти данные находятся на том же столе». Несмотря на всю нашу работу, их оплату, а также время и усилия каждого, каждый, кто хотел получить данные, мог буквально уйти с ним, независимо от того, что мы сделали с сервером.
Теперь, когда у вас есть матрица риска, вы начинаете развивать свою толерантность к риску. Ничто не может быть идеальным, и вы могли бы работать до тепловой смерти вселенной, запирающей все вокруг. Вместо того, чтобы быть идеальным, вы соглашаетесь с тем, какой риск вы готовы взять на себя для каждой части кода. Вы выясняете, что может случиться, если одна часть будет скомпрометирована, и сколько это будет стоить вам (в долларах, репутации и т. Д.) И выясните, сколько работы стоит вам (или вашим работодателям). Вы выполняете достаточно работы, чтобы быть ниже допустимого уровня риска.
Проблема в том, что даже лучшие люди что-то упустят. Небольшие трещины в безопасности могут показаться не столь важными, но если вы соберете достаточно, вы можете в конечном итоге оказаться в пригодной для использования ситуации. Безопасность целостна.