2012-03-29 4 views
-4

具体的な理由から、私はCでミニWebサーバーを開発する必要があります(Debianを実行中)。セキュアなCネットワークソフトウェアを書くには?

私のアプリケーションがインターネットから完全に使用される可能性があるため、このタイプのアプリケーションを保護するためのヒントをいただきたいと思います。

は、より一般的に、私はC.

多くのおかげで安全なソフトウェアを開発する方法に関連するすべてのものに興味を持っています。

+3

これは非常に重要なトピックです。 SOは、特定の焦点に絞られた小さな質問を意味します。 –

+3

既存のすべてのWebサーバーで何が問題になっていますか? – Joni

+2

質問は簡単ですが、それは良いですが、あまり集中していないのでStackoverflowの形式で答えるのは難しいです。何年も前に私は教授と同様の質問をしました。 – thb

答えて

3

大きな困難を伴う:

だから短い答えは、このプロセスがどのように機能するかを理解するために本を読んでスタートです。

Cの2つの最大の問題は、バッファオーバーランとダブルフリーズであり、どちらも攻撃者がシステムで信頼できないコードを実行する可能性があります。だから、一番大切なのは、防御的なコード!配列の境界を常にチェックし、決してgetsを使用しないで、mallocですべての解放を視覚的に一致させることを確認してください。事実、可能であれば、boehmのような保守的なGCを使って、自由にする必要はありません。 Valgrindのようなツールを使ってあなたのプログラムを分析し、忘れてしまったものを見つけてください。

あなたはウェブサーバを書いているので、setuid(あなたがポート< 1024でリッスンしたい場合)を実行している可能性があります。これはあなたのプログラムルートに侵入した人には非常に危険です。したがって、できるだけ多くのシステムを信頼できないユーザーとしてフォークされたプロセスで実行します。これは、あなたのプログラムに悪用があっても、あなたを守る次のセキュリティ層です。

また、テストテストテスト!セキュリティのためのテストの重要な種類の1つは "ファズテスト"です - あなたのプログラムにランダムな入力を送り、何が起こるか見てください。あなたのプログラムがセグメンテーションすると、潜在的に悪用可能なバグがあります。

+0

あなたの答えは面白いです。私はガベージコレクション(GC)について悪い姿勢を示していたことを認めています。しかし、その後、私は決してネットワークサーバーをプログラムしていないので、私の悪い態度は役に立たない偏見です。あなたが少し精緻化するのを気にしたら、私は読むことに興味があります。 – thb

+1

ガベージコレクションには長所と短所があります。私の見解では、メモリが賢明で(2倍のメモリを使用することが期待できる)性能と、プログラム実行時に予期しないGCの一時停止が存在することの両方があります。しかし、正しいプログラムを書く良い機会を得るという点で、経験と研究は大きな助けとなっています。ガベージコレクションの言語で書かれたプログラムは、あなたがそれに慣れていない場合(オーナーシップはどこですか?)、気にする必要のないメモリ管理の問題だけです。 –

+0

建設的に対応していただきありがとうございます。あなたの答えは本当に役に立ちます。私はまた、固定観念を持つ人々が、私が持っている小さな評判を完全に殺すことはないと願っています。 –