Как найти библиотеки/софт, которому можно доверять (особо: PHP, JS)?
======================================================================

 В настоящее время меня в основном интересует PHP на бэке и JS на фронте, поэтому в первую очередь вопрос задан в рамках этих двух языковых сред.  

  

Сегодня ряд ЯП имеет репозитории и менеджеры пакетов. Для указанных двух это Packagist/Composer и NPM. Насколько я понимаю, аудит безопасности там носит характер пост-модерации, то есть удаление вредоносных пакетов происходит на основании репортов. В принципе, логично, кто будет за так анализировать мегатонны кода.  

  

Вопрос в том, как в этой массе найти библиотеки, в отношении которых уверен если не в полном отсутствии дыр, то хотя бы в компетентности и благих мотивах их создателя. Я представляю себе следующую иерархию "политик безопасности в отношении заимствованного кода":  

  

1. Писать и знать весь код самому — идеал, к которому можно стремиться;  

2. Читать и знать весь код самому;  

3. Следовать выбору доверенных авторитетов, использующих подход не хуже №2 (мб №3, главное рекурсию разорвать) — выбирать то же, что и эксперты, и молиться;  

4. Следовать выбору большинства и выбирать популярные библиотеки — смотреть на счётчик скачиваний и молиться;  

5.1. Просто использовать то, что подходит, и молиться;  

5.2. Просто использовать то, что подходит, и не молиться.  

  

Сложность №1 и №2 растёт пропорционально размерам кодовой базы, №3 требует умелого выбора экспертов и чёткого определения их доверия к конкретным библиотекам, №4 полагается больше на статистику и удачу, чем на более научные методы, №№5.х — по сути, отсутствие политики.  

  

Соответственно, для меня №3 выглядит наиболее сбалансированным, для себя примерно накидал (→[GitHub…](https://github.com/KodyWiremane/trusted_sources/blob/volatile/Trusted%20Sources.md)), как это может выглядеть. Экспертами в данном случае взяты такие глыбы, как производители популярных операционных систем, веб-браузеров, регуляторы интернетов и известные веб-компании.  

  

Хотелось бы узнать от опытных разработчиков, как обычно выглядит правильный подход к выбору библиотек, существуют ли публичные "белые списки" безопасного софта, и чьё мнение можно считать экспертным.  

  

Спасибо за внимание.  

  

**upd:** Как справедливо заметили, может быть две шкалы доверия: в отношении нечаянных уязвимостей (мастерство) и умышленных бэкдоров (порядочность) 

 Много звёзд на гитхабе/npm установок - надёжный пакет. Всё :) но как ты верно заметил в любом случае надо 
> молиться

 

 С чего ты взял что твой код будет лучше и безопаснее? Обычно даже наоборот. Библиотеки - подддерживают десятки или сотни программистов, улучшают, фиксят баги и уязвимости.   

Тебе надо самому тестировать свой продукт, идеальной системы без дыр, которую невозможно взломать, просто несуществует. Дело лишь в том, как много усилий и затрат надо потратить на взлом проекта и будет ли оно того стоит, чтобы за это кто-то взялся. 

 Надежность бывает разная - кто то говорит об отсутствии ошибок в коде, а кому то нужна надежность от бекдоров.  

  

Только аудит кода, личный или наемный сторонний специалист/компания, могут дать хоть какие то гарантии, все остальное:  

> молиться

  

  

Напоминаю пример - проект криптокошелька (кажется расширения для браузера, если не ошибаюсь для EOS) был атакован одним из разработчиков используемой библиотеки, т.е. пока проект разрабатывался все было ок, как только стал использоваться - злоумышленник добавил в код воровство приватников и после того как разработчики расширения в очередной раз выпустили обновление - потырил кучу денег. 

 Про js и npm, другие области не знаю.  

Это большая серьезная проблема у которой нет простого решения.   

  

Если вам важно отсутствие бекдоров - то единственный выход - свой репозиторй в котором весь код доверенный.   

Иначе даже если вы поставите модуль с 10к звезд, у него в зависимости 20-го уровня вложенности будет какой-нибудь [left-pad](https://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/), в который возьмут и положат бекдор.   

  

Посмотрите на штуки типа <https://snyk.io/.> Я не знаю до какой степени они делают аудит модулей. 

> и чьё мнение можно считать экспертным.

ни чьё, даже если Вы сами с "нуля" написали свой код от начала и до конца.  

  

**Есть много уровней защиты от "чужих":** аудит исходного кода, профилирование важных участков кода и поиск утечек, сканер уязвимостей кода оффлайн и в момент исполнения, контроль среды исполнения, контроль сетевой активности.  

  

Только контроль прав среды исполнения поможет уберечься от негативных последствий.  

  

**Простое решение:** "проксирование" запросов между вашим и чужим кодом в обоих направлениях и контроль данных регулярками. 

 для того и тестируется счистема чтобы выявить ошибки. а выявится в процуессе эксплуатации исправится ничего страшного. вы решаете проблему которая яйца выеденного не стоит.  

Большинство ошимбокк будет в вашем коде а не коде используемых библиотек