Cプログラミングのトップ10の危険なミス?


2

Cプログラミングで最も危険なミスは何ですか?

たとえば、strcpyを誤って使用すると、スタックオーバーフローとコードインジェクションが発生します。

私はあなたがCWE/SANS Top 25 Most Dangerous Software Errorsを見ることができますC.

  0

あなたがしていることが分からないNo.1です。悪い主観的なものとして閉じるように警告する。 09 8月. 132013-08-09 09:00:20

+2

私はCの危険な過ちのトップ10を探していますか?もっと知りたいことは何ですか?私はCの開発者であり、私はそれらを避けたいです。 09 8月. 132013-08-09 09:20:55

  0

マイリストhttp://www.andromeda.com/people/ddyer/topten.html 11 8月. 132013-08-11 03:13:39

1

私は、この質問に対する答えを学ぶ最も良い方法は、本をたくさん読んで、最良の実践をすることです。私はあなたにこの本Secure Coding in C and C++を安全なコーディングについてのすべてのトピックにアドバイスします。


1

で少なくとも10悪いプログラミングのパターンを探しています。これは、一般的なソフトウェア開発用(プログラミング言語に依存しない)ですが、C/C++でのエラーも含まれます。


4

Cプログラミングで最も危険な間違いはです(Cを使用)。これは不評のアサーションですが、何十年もの経験が私を後押ししています。

Cは効率的にマシンコードに翻訳される「抽象マシン」(C標準の考え方)で操作を表現できる優れたプログラミング言語です(変換ツールは高速で実行されます)および結果は速い)。しかし、この翻訳は高い価格で行われます。つまり、それらは間違いのための保護手段ではなく、陰に潜む多くの「未定義の振る舞い」があります。例えば、Pointer aliasing rulesは、正確にはほとんど理解できません。新しいコンパイラが使用されたり、最適化スイッチが起動されたときに、うまくいくような(おそらく悪用可能な脆弱性を引き起こすような)コードが生成されます。

"間違いのリスト"を探すのは間違った考え方です。あなたはブラックリストが必要です:「他のすべて」が安全であるという前提の下で避けるべきことです。 ホワイトリストのリストを許可する必要があります他のすべてを除いて開発する方法。成功したCプログラマは、自身の規律をに維持することができないプログラマです。は、エンドツーエンドでマスタリングしない構成を使用します。 「マスタリング」とは、Cコンパイラがどのようにアセンブリのオペコードに変換するかを記述する機能で、Cコンパイラが可能なすべての最適化を含むことを意味します。

「Cを使う」ための良い方法は、実際にいくつかの最適化Cでの速度を必要とする1つのまたは2つのルーチン、および高速化が可能になり、より安全な言語のコードの残りの部分、簡単かつ安全にを書くことです開発(例えば、Python、C#、Node.js、Perl ...選択肢が大きい)。