私は、オープンソースプロジェクト、特にpopen()
またはsystem()
への呼び出しを含む数千行のコードを持つプロジェクトで、コードの安全性についてどのように確認できるか疑問に思っていました。 そこに有害なコードや悪質なコードがないことを知る方法はありますか? コードを安全に調べることができますか?私が使用しているオープンソースコードが悪意のあるものではないことを確認するにはどうすればよいですか?
答えて
私は短い答えは、あなたができないということですどのように私は、オープンソース・プロジェクトにコードの安全性について確認することができます
を思っていました。
はい、理論的には、コードベース全体を調べて、独自のコードではできない監査が可能ですが、それには時間がありますか?一方、大規模なプロジェクトの多くは、ボランティアの貢献者がコードを常に見ている人が多い傾向があり(ApacheやGNUなど)、それは外見上の良質な動機があるため、悪意のあるコードはおそらくかなり早く発見され、フラグが立てられます。
と言われていますが、one totally disastrous security flawはオープンソースソフトウェアに影響を及ぼし、2年間は検出されませんでした。第三者が狂った複雑な(そしてひどく書いた)オープンソース製品を修正する可能性があったので、それは正確にでした。修正を行った人は、彼らが何をしているのか分からなかった。誰がコードを読むことができると考えていたのでしょうか...
オープンソースなので、コードを調べることができます。他の人もそうであるように、(非常に)限られた数の人がコードを参照するクローズドソースより安全性が潜在的にはるかに優れています。あなたのバージョン管理システム(git)はチェックサムを計算して、変更されたコードを検出します。
ソースコードを10分探していると、ソフトウェアを信頼できないと判断することがよくあります。多くの選択肢がある場合は、それで十分です。
gitをオープンソースソフトウェアに使用することは今では強制されていますか?私はそのメモを手に入れませんでした。 – JeremyP
いいえ、必須ではありません。コードが変更されていないことを確認したい場合は、チェックサムが役立ちます。 Gitはそれらを助けることができる方法で計算します。私はどの他のvcsが –
オープンソースプロジェクトでの明らかな(理論上は、検証可能な)悪意のあるコードの不足は、その安全性を保証しません。
理由はセキュリティバグが悪質な入力によって悪用されるためです。
たとえば、あなたの好きなオープンソースの画像/ドキュメント/どのようなビューア(またはWebブラウザ)でも、これらのバグの1つ以上を持つことができます。悪意を持って作成されたファイルを開くと、そのファイルを取得できます。
オープンソースソフトウェアには商用ソフトウェアよりもセキュリティバグが多いとは言えませんが、非常に一般的なプロジェクトではない場合や、そのセキュリティ上の欠陥について誰も責任を負いませんあなたは大変なことがあります。そのようなバグがあり、それらに関心を持ち、修正している人はごくわずかです。つまり、プログラマはビルドが大好きです。それは楽しいです。セキュリティは難しく、しばしばそれには二次的です。
-1 FUDをするかをチェックしていない。彼らのお金を担当している人々は、ほとんどコードを見ません。 –
@StephanEggermont:その区別は、このステートメントを無効にしません。エンティティ/組織全体を考慮する必要があります。 –
これは基本的なセキュリティエラーです。最も弱いチェーン。ほとんどの商業組織、特に銀行や保険会社は、安全なソフトウェアを作成する代わりに非難を払うことができるように組織されています –
オープンソースであるかどうかに関係なく、プロジェクトのコードの安全性を100%保証することはできません。自分で書いたことのないコードやソフトウェアを使用する場合、必然的にサードパーティの作者に対する一定の信頼レベルを想定します。プロジェクトがオープンソースの場合は、コードを心臓のコンテンツに合わせて監査することができますが、他の回答者が既に指摘しているように、完全な行単位の検査を実行する時間/リソースはありません。
あなたはケン・トンプソンの「反省の信頼信託の」記事にこのような問題についてのさらなる反射のための興味深い読み取りを見つけるかもしれない:
- 1. NuGetパッケージが壊れていないことを確認するには、どうすればよいですか?
- 2. ユーザーがフロントページをナビゲートしていることを確認するにはどうすればよいですか?
- 3. スタアラリングが同期していることを確認するにはどうすればよいですか?
- 4. スレッドが完了していることを確認するにはどうすればよいですか?
- 5. テキストフィールドが空ではないことを確認するにはどうすればよいですか?
- 6. _JAVA_OPTSが強制されていることを確認するにはどうすればよいですか?
- 7. 入力(stdin)が壊れていることを確認するにはどうすればよいですか?
- 8. ユーザーが使用しているブラウザを確認するにはどうすればよいですか?
- 9. Javascriptでオブジェクトが「カスタム」であることを確認するにはどうすればよいですか?
- 10. 要素の上にマウスがあることを確認するにはどうすればよいですか?
- 11. 悪意のある機能がアクセスする予定のないヒープメモリにアクセスしないようにするにはどうすればよいですか?
- 12. ダウンロード属性の悪意のある使用を避けるにはどうすればよいですか?
- 13. 私のアサーションが実際にチェックしたいものをチェックしていることを確認するにはどうすればいいですか?
- 14. 私が書いているパッケージがターゲットアプリケーションのrequire-devにあることを確認するにはどうすればよいですか?
- 15. モックオブジェクトが「取得済み」であることを確認するにはどうすればよいですか?
- 16. iframeが空であることを確認するにはどうすればよいですか?
- 17. DBキャッシュが最新であることを確認するにはどうすればよいですか?
- 18. ドッカーホストがswarmモードであることを確認するにはどうすればよいですか?
- 19. ファイルが空であることを確認するにはどうすればよいですか?
- 20. ストリームが空であることを確認するにはどうすればよいですか?
- 21. アンドロイドデバイスがルーツデバイスであることを確認するにはどうすればよいですか?
- 22. ユーザーはいつでも複数のポップアップを開くことができないことを確認するにはどうすればよいですか?
- 23. bashで入力がないことを確認するにはどうすればよいですか?
- 24. Authlogicを使用している特定のモデルにユーザーが属していることを確認するにはどうすればよいですか?
- 25. ポップアップページが開いているかどうかを確認するにはどうすればよいですか?
- 26. メニューアイテムが常にトップバーにあることを確認するにはどうすればよいですか?
- 27. EditTextに常にフォーカスがあることを確認するにはどうすればよいですか?
- 28. ネットパイプサービスがリッスンしているかどうかを確認するにはどうすればよいですか
- 29. MySQLが使用可能なメモリをすべて使用していることを確認するにはどうすればよいですか?
- 30. アプリで使用しているTLSのバージョンを確認するにはどうすればよいですか?
オープンソースは、* *何を意味するのかです:あなたが調べることができるしていますコード – jalf
どのようにコードの安全性を確認できますか?これはオープンソースに限定されることはほとんどありません。一言で言えば、100%確実ではありません。少なくともオープンソースでは、コードを自分で調べることができます。 – Yuushi