В настоящее время меня в основном интересует PHP на бэке и JS на фронте, поэтому в первую очередь вопрос задан в рамках этих двух языковых сред.
Сегодня ряд ЯП имеет репозитории и менеджеры пакетов. Для указанных двух это Packagist/Composer и NPM. Насколько я понимаю, аудит безопасности там носит характер пост-модерации, то есть удаление вредоносных пакетов происходит на основании репортов. В принципе, логично, кто будет за так анализировать мегатонны кода.
Вопрос в том, как в этой массе найти библиотеки, в отношении которых уверен если не в полном отсутствии дыр, то хотя бы в компетентности и благих мотивах их создателя. Я представляю себе следующую иерархию "политик безопасности в отношении заимствованного кода":
1. Писать и знать весь код самому — идеал, к которому можно стремиться;
2. Читать и знать весь код самому;
3. Следовать выбору доверенных авторитетов, использующих подход не хуже №2 (мб №3, главное рекурсию разорвать) — выбирать то же, что и эксперты, и молиться;
4. Следовать выбору большинства и выбирать популярные библиотеки — смотреть на счётчик скачиваний и молиться;
5.1. Просто использовать то, что подходит, и молиться;
5.2. Просто использовать то, что подходит, и не молиться.
Сложность №1 и №2 растёт пропорционально размерам кодовой базы, №3 требует умелого выбора экспертов и чёткого определения их доверия к конкретным библиотекам, №4 полагается больше на статистику и удачу, чем на более научные методы, №№5.х — по сути, отсутствие политики.
Соответственно, для меня №3 выглядит наиболее сбалансированным, для себя примерно накидал (→
GitHub…), как это может выглядеть. Экспертами в данном случае взяты такие глыбы, как производители популярных операционных систем, веб-браузеров, регуляторы интернетов и известные веб-компании.
Хотелось бы узнать от опытных разработчиков, как обычно выглядит правильный подход к выбору библиотек, существуют ли публичные "белые списки" безопасного софта, и чьё мнение можно считать экспертным.
Спасибо за внимание.
upd: Как справедливо заметили, может быть две шкалы доверия: в отношении нечаянных уязвимостей (мастерство) и умышленных бэкдоров (порядочность)