1.6 KiB
1.6 KiB
| paths | |||||||
|---|---|---|---|---|---|---|---|
|
C++ セキュリティ
このファイルは common/security.md を C++ 固有のコンテンツで拡張します。
メモリ安全性
- 生の
new/deleteは絶対に使用しない — スマートポインタを使用する - C スタイルの配列は絶対に使用しない —
std::arrayまたはstd::vectorを使用する malloc/freeは絶対に使用しない — C++ のアロケーションを使用する- 絶対に必要な場合を除き
reinterpret_castを避ける
バッファオーバーフロー
char*の代わりにstd::stringを使用する- 安全性が重要な場合の境界チェック付きアクセスには
.at()を使用する strcpy、strcat、sprintfは絶対に使用しない —std::stringまたはfmt::formatを使用する
未定義動作
- 変数を必ず初期化する
- 符号付き整数のオーバーフローを避ける
- NULL または dangling ポインタのデリファレンスを絶対に行わない
- CI でサニタイザーを使用する:
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" ..
静的解析
- 自動チェックには clang-tidy を使用する:
clang-tidy --checks='*' src/*.cpp - 追加の解析には cppcheck を使用する:
cppcheck --enable=all src/
参考
詳細なセキュリティガイドラインについてはスキル: cpp-coding-standards を参照。