タグ

ブックマーク / www.jpcert.or.jp (4)

  • DCL05-C. typedef による型定義ではポインタ型を避ける

    DCL05-C. typedef による型定義ではポインタ型を避ける 型定義(typedef)を活用することで、コードを読みやすくすることができる。しかし、型定義によりポインタ型を導入する場合、const-correct なコードを書くためには注意が必要だ。なぜなら、const 修飾子がポインタ型に対して適用されるということを正しく理解することが難しいからだ。 違反コード 次のコード例では、型定義を行うことによりコードの可読性が向上しているが、const-correct なコードではなくなってしまっている。const 修飾子は typedef された型自体に適用されるものであり、元のオブジェクト型に適用されるものではない。したがって関数 func の引数は、const struct obj へのポインタではなく、struct obj への const ポインタである。 struct obj

    DCL05-C. typedef による型定義ではポインタ型を避ける
    none53
    none53 2018/08/22
  • ENV00-C. getenv() が返す文字列へのポインタを保存しない

    ENV00-C. getenv() が返す文字列へのポインタを保存しない C99 は getenv() の動作を次のように規定している。[ISO/IEC 9899:1999] getenv 関数は、一致する並びの要素に結び付けられた文字列へのポインタを返す。このポインタが指す文字列をプログラムで変更してはならないが、引き続く getenv 関数の呼出しで書き換わることがある。 ゆえに、getenv()が返すポインタは保存すべきでない。このポインタは、2 回目以降に getenv() 関数を呼び出したときに上書きされたり、putenv() や setenv() の呼び出しによって環境変数の並びが変更された結果として無効になる可能性がある。 getenv()が返すポインタを後で使用するために保存しておくと、ダングリングポインタとなったり、正しくないデータを指すようになるおそれがある。geten

  • STR31-C. 文字データと null 終端文字を格納するために十分な領域を確保する

    STR31-C. 文字データと null 終端文字を格納するために十分な領域を確保する データをバッファにコピーする際、データを保持する十分な大きさがバッファにないと、バッファオーバーフローが発生する。バッファオーバーフローは、文字列の処理を行う際にしばしば発生する[Seacord 2013b]。このようなエラーを防ぐには、コピーする文字列を切り詰めるか、あるいは可能であればコピーする文字データと null 終端文字を保持できる十分なサイズをコピー先に確保すること(「STR03-C. null 終端バイト文字列を不注意に切り捨てない」を参照)。 違反コード (オフバイワンエラー) 以下に、一般に オフバイワンエラー と呼ばれるコード例を示す[Dowd 2006]。ループ処理では、src から dest へデータをコピーしている。しかし、このループ処理では null 終端文字を考慮していない

    STR31-C. 文字データと null 終端文字を格納するために十分な領域を確保する
  • C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター

    これまでにC/C++ セキュアコーディングセミナーで使用した講義資料を公開しています。2010年度にセミナを実施した、文字列、整数、動的メモリ管理、書式指定文字列、CERT C セキュアコーディングスタンダード、ROSE については、それぞれ最新版の資料を掲載しています。 文字列 ユーザとソフトウエア間に発生するデータのやりとりの大部分は文字列によって行われます。 また、プログラム間でのデータ交換も文字列形式で行われるようになり、その結果、文字列表現や文字列管理、文字列操作における弱点がソフトウエア脆弱性を生み出しています。 文字列では、C/C++ 言語における文字列操作、一般的なセキュリティ上の欠陥と、その結果発生する脆弱性と対処方法について解説します。 C/C++ における文字列の特性 犯しやすい文字列操作の間違い 文字列の脆弱性 プロセスのメモリ構成 スタック破壊の仕組み コードイン

    C/C++ セキュアコーディングセミナー資料 | JPCERT コーディネーションセンター
    none53
    none53 2010/02/01
  • 1