Сравнения языков программирования с позиции безопасности написанного на них кода
Компания Veracode опубликовала результаты исследования зависимости числа уязвимостей в коде от используемого языка программирования. В рамках исследования был выполнен статический анализ более 200 тысяч приложений, который показал, что наибольшее число связанных с безопасностью ошибок присутствует в коде проектов на ASP, ColdFusion и PHP. Учитывая то, что на PHP написаны платформы Drupal, Joomla и WordPress, доля которых среди систем управления контентом составляет около 70% и на которых работает четверть крупнейших сайтов в Сети, язык PHP указан как приносящий наибольшие проблемы с безопасностью.
В соответствии с опубликованным отчётом, каждые четыре из пяти приложений на PHP, ASP и ColdFusion не проходят как минимум один из десяти тестов OWASP на безопасность. В частности, при тестировании Veracode в 86% всех приложений на PHP выявлена как минимум одна XSS-уязвимость (Cross-Site Scripting), в 56% — проблемы подстановки SQL-запросов, 61% — возможность подстановки кода, 50% — утечки информации, 73% — проблемы с шифрованием, 58% — проблемы с аутентификацией, 67% — выход за пределы дозволенных директорий. В более современных языках, таких как .NET и Java, данные показатели почти в два раза ниже. Что касается тестов OWASP, то все десять тестов прошли только 19% приложений на PHP (для сравнения все тесты OWASP прошли 60% программ на C/C++).
Рейтинг платформ по числу критических уязвимостей в коде выглядит следующим образом:
- Classic ASP — 1686 проблем на мегабайт кода (из них критических 1112)
- ColdFusion — 262 проблем на мегабайт кода (из них критических 227)
- PHP — 184 проблем на мегабайт кода (из них критических 47)
- Java — 51 проблем на мегабайт кода(из них критических 5.2)
- .NET — 32 проблем на мегабайт кода (из них критических 9.7)
- C++ — 26 проблем на мегабайт кода (из них критических 8.8)
- iOS — 23 проблем на мегабайт кода (из них критических 0.9)
- Android — 11 проблем на мегабайт кода (из них критических 0.4)
- JavaScript — 8 проблем на мегабайт кода (из них критических 0.09)