Основная дыра в безопасности, которую я видел бы где угодно, включая C / C ++, заключалась в том, чтобы не использовать стандартную открытую библиотеку CGI, не читать ее документацию и все равно думать, что вы в безопасности.
- не изобретай колесо. Используйте библиотеку CGI. В некоторых языках это встроено (вероятно, в PHP), в других оно включено (на ум приходит Perl), другим нужно, чтобы вы взяли его из других источников (C / C ++). Убедитесь, что вы знаете, что это такое, и что вы им пользуетесь. не попробуйте реализовать это самостоятельно. Если вам нужно спросить о безопасности, вы, как и я, не имеете права писать это.
- Прочитайте документацию. Если вы используете хорошо зарекомендовавшую себя библиотеку, там будет документация по вопросам безопасности и тому, что вы можете сделать, чтобы их избежать.
- Никогда не думай, что ты в безопасности. Я совершенно уверен, что не в безопасности, хотя я следовал всем правилам библиотеки CGI для Perl, правилам библиотеки интерфейса базы данных и т. Д. Но я все же предполагаю, что я не защищен, и сохраняю это в центре моего внимания, когда я что-то там делаю. Если я когда-нибудь стану экспертом по безопасности, возможно, я изменю свое предположение. Пока не уверен.
Безопасность всегда многогранна и всегда неполна. В любом виде программного обеспечения постоянно обнаруживаются дыры - программное обеспечение, которое раньше считалось безопасным. И теперь у нас гораздо больше передовых практик в области безопасности, чем, скажем, 15 лет назад. И у нас есть SELinux для большей безопасности.
Конечно, вопрос в том, достаточно ли у вас безопасности для вашего приложения? Достигнут ли разумные усилия разумный уровень безопасности? Конечно, именно поэтому я не использую C / C ++, но вместо этого я использую Perl. Требуется гораздо меньше усилий, чтобы гарантировать, что я не перезаписываю память в Perl, чем в C ++. Это уровень безопасности, без какой-либо реальной работы.