web-dev-qa-db-ja.com

高水準プログラミング言語には、低水準言語よりも脆弱性やセキュリティリスクがありますか?

高水準プログラミング言語低水準プログラミング言語 よりも脆弱性やセキュリティリスクが高く、そうであればなぜですか?

high-level vs low-level 画像ソース: http://a.files.bbci.co.uk/bam/live/content/znmb87h/large

2
Bob Ortiz

事前の重要な警告:

どの言語でも、いつでも安全でなくなる可能性があり、開発者の注意力/意識だけがこれを修正できます。 SQLインジェクションは まだある です。高級言語には一般にevalがあり、ユーザー入力を評価するのに十分な能力がない場合は、得られる結果が得られます。

とはいえ、その逆です。ガベージコレクションを使用すると、バッファオーバーフローなどのメモリ管理に関連するセキュリティリスクのクラス全体を回避できます。高レベルの言語はより簡潔になる傾向があり、コードが少ないほど、バグを隠す場所が少なくなります。退屈なもの(および低レベル言語でのコーディング)は間違いなくエラーが発生しやすくなります。

下位レベルの言語には同じ表現力がないため、最初だけでなくコードベース全体に大量のボイラープレートコードを記述する必要があります。つまり、コードが何をすべきか(ビジネスロジックの観点から)を一目で見分けるのは必ずしも容易ではないため、自己文書化が少なくなり、コメントまたは外部ドキュメントの形式でより多くの文書化が必要になります。 。これにより、別のエラーの原因が発生します。ドキュメントが参照するコードが変更されたときにドキュメントが更新されない場合、関連コードのドキュメントにある古い仮定のために安全でない他のコードを書くことができます。

下位レベルの言語には強い型付けが欠けているため、コンパイラーがキャッチできるエラーはほとんどありません。これに対処するために NimRust のようないくつかの興味深い試みがありましたが、どちらもまだ非常に人気があります。

最後に、確かに重要なことですが、高水準言語と低水準言語のrealの違いは、高水準言語が負担をプログラマーからインタープリター/コンパイラーに移すことです。これらのインタープリター/コンパイラーは、業界で最も優れた照明のいくつかによって作成および保守され、脆弱性などについて定期的に監査されます。一方、アプリケーションコードは人間によって作成されます。したがって、平均的なプログラマーによって書かれた多くのアプリケーションコードから、例外的なプログラマーによって書かれた比較的少ないコードに負担を移すと、より優れた人々によって書かれた監査するコードが少なくなるため、セキュリティが向上します。では、JVMとJoe BlowのCでの手動のバッファ管理のどちらを信頼しますか?

これらすべてはむしろ、人々が使いにくく、安全性が低いのに、なぜ低レベル言語を使うのかという疑問を投げかけています。理由はいくつかあります。

1) ゴールデンハンマー 。 「私たちはたくさんのCプログラマーを抱えており、奇妙なことにすべてのコードはCで書かれています」.

2)パフォーマンス。これは通常、やりがいのあることであり、安全性と開発の速度のトレードオフに値することはほとんどありませんが、ハードウェアからあらゆるパフォーマンスを引き出す必要があるゲームのような場合には、理にかなっています。

3)あいまいなプラットフォーム。上記の行に沿って、Cコンパイラは、RustコンパイラやJVMよりもはるかに簡単に作成できます。最初にコンパイラを実装する必要がある場合、Cから始める方がはるかに魅力的です。

7
Jared Smith

私によると 広範囲 グーグルで検索すると、最初の結果はこれを私に与えました answer

要するに、まあ。

研究はVeracodeによるものであり、彼らはそのほとんどが洗浄であると観察しています。彼らはそれをコード密度による脆弱性に基づいています。それはそれを測定する良い方法かもしれません、私は知りません。私が知っているのは、C/C++が特定のアプリケーションを作成するために他のいくつかの言語よりも10倍多くのコード行を必要とするため、あなたは巨大なスキューに終わることです。

enter image description here

また、私たちが目にするのは、おそらく脆弱性の真の尺度ではなく、特定のアプリケーションの人気または可用性のために脆弱性を見つける可能性の尺度です。脆弱性の数が最も少ないとされる脆弱性はC/C++で見つかり、次にiOS(おそらくObjective-C?)が続きましたが、その後にJavaScriptが続きました。しかし、密度の側面を考慮すると、歪んだ数値を調べている可能性があります。

ここに問題があります。脆弱性は単なるバグです。言語はバグを作成しませんが、開発者が作成するため、バグのないコードを作成するのは開発者の責任です。そのため、開発者がバグのないコードを作成するのが難しいほど、some sortの脆弱性が存在する可能性が高くなります。つまり、低レベルの言語は、実際に存在するかどうかに関係なく、脆弱性が存在する可能性が高いことを意味します。

4
Steve