ECC/docs/ja-JP/rules/cpp/security.md

52 lines
1.6 KiB
Markdown

---
paths:
- "**/*.cpp"
- "**/*.hpp"
- "**/*.cc"
- "**/*.hh"
- "**/*.cxx"
- "**/*.h"
- "**/CMakeLists.txt"
---
# C++ セキュリティ
> このファイルは [common/security.md](../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 でサニタイザーを使用する:
```bash
cmake -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined" ..
```
## 静的解析
- 自動チェックには **clang-tidy** を使用する:
```bash
clang-tidy --checks='*' src/*.cpp
```
- 追加の解析には **cppcheck** を使用する:
```bash
cppcheck --enable=all src/
```
## 参考
詳細なセキュリティガイドラインについてはスキル: `cpp-coding-standards` を参照。