Мой текущий проект написан на C ++ (без Boost), но в будущем я тоже заинтересован в Java.
До сих пор, я придумал следующий список:
- Знать, как код. Не делайте ошибки, проверить все, держать свой код легко понять, и т.д.
- Знать язык вы используете, и следовать своему передовому опыту, для того, чтобы избежать ошибок и сохранить ваш код читаемым.
- Не делать никаких предположений относительно входных данных. Выполните полную проверку на входе, особенно вход из ненадежных источников.
- При использовании библиотек, используйте только те, которым вы доверяете.
- Были четко определены (и безопасный) поведение для всех ошибочных ситуаций (неверный ввод, из памяти, ошибка библиотеки вызова и т.д.)
- При использовании криптографии, придерживаться существующей практики, насколько это возможно. Всякий раз, когда вы делаете вещи по-другому, сделать подробный анализ вашего дизайна. Знать свойства криптографических примитивов, которые вы используете. Использование существующих шифрования и хэширования примитивы, если вы не профессор криптография (или эквивалент).
Прямо сейчас, мои самые важные вопросы:
- Как использовать OpenSSL правильный путь для установления соединения TLS. Это будет новый протоколом, так что нет никакой необходимости для обеспечения обратной совместимости с версиями протокола старой небезопасной SSL / TLS. Это P2P, так что нет четкой иерархии клиента / сервера, но, очевидно, есть один сверстники, который предлагает соединение и другой пэр, который подключается к нему. Я мог бы использовать альтернативные ключевые механизмы аутентификации, кроме СА; Я в основном думал о namecoin для этой цели, но веб-из-траста или определенный пользователем (SSH-стиль) также варианты.
- Как сделать обработку ошибок. Кажется, прямо сейчас, что каждые три строки кода или так потенциально может создать ошибку, и я хочу удобный способ борьбы с ними. Это хорошая / безопасная идея использовать для этого исключения в C ++? Самый основная обработка ошибок будет регистрировать ошибку и выход: который позволил бы атаки DoS, но по крайней мере, это не самым худшим из возможных последствий нападения. Для ошибок в поступающих данных, я должен был бы написать безвредные обработчик исключений, для предотвращения DoS.