このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

4.2 セキュアなコーディングの一般的なガイドライン

次のコーディング・プラクティスが推奨されます。

  • タイプ・チェック、長さチェック、バインド・チェックを実行して、入力データがプログラムで必要なデータであることを確認します。 入力には、ユーザーが入力するデータの他に、コマンドライン引数および環境変数が含まれます。

  • インジェクション攻撃で利用される可能性のあるシェル・コマンド、SQL文、XMLおよびHTMLコードなどの構造体が含まれているかどうか、入力データを確認します。

  • システム・コールおよびライブラリ・ルーチンに対する引数のタイプ、長さ、バインドを確認します。 可能な場合は、バッファ・オーバーフローを防ぐライブラリ・ルーチンを使用します。

  • ファイル名引数にはフルパス名を使用します。あらゆるユーザーが書込み可能なディレクトリのファイルは使用しないでください。また、書き込まれるファイルが実際にはシンボリック・リンクでないことを確認し、既存のファイルが間違って上書きされないようにします。

  • システム・コールおよびライブラリ・ルーチンから返される値のタイプ、長さ、バインドを確認します。 コードが、システム・コールおよびライブラリ関数で設定された、またはこれらから返されたエラー・コードに適切に応答するようにします。

  • シェル環境の状態を想定しないでください。 ユーザー・ファイル作成マスク、シグナル処理、ファイル記述子、現在の作業ディレクトリ、環境変数など、特にPATHIFSなど、プログラムがシェルから継承した設定を確認します。 必要に応じて、設定をリセットします。

  • 有限の値セットをとる変数で、アサーション・チェックを実行します。

  • 権限アクションやエラー条件に関する情報を記録します。 エンドユーザーのシステム上で、プログラムがコア・ファイルをダンプできないようにします。

  • パスワードを画面にエコーしたり、クリア・テキストで転送または保存したりしないでください。 パスワードを転送または保存する前に、Salt値と組み合せて、SHA-512などのセキュアな一方向アルゴリズムを使用してハッシュを作成します。

  • プログラムで疑似番号生成ルーチンを使用する場合、生成する番号が要件を満たすだけ十分にランダムであることを確認します。 また、攻撃者が予測できないような、適切な乱数シードを使用する必要があります。 詳細は、RFC 4086、『Randomness Requirements for Security』を参照してください。

  • ホスト・システムでアドレス空間配置のランダム化(ASLR)を有効にすることをお薦めします。この機能は、特定タイプのバッファ・オーバーフロー攻撃を防ぐのに役立つためです。 3.15.1項「アドレス空間配置のランダム化」を参照してください。

  • プログラムをコンパイルしてリンクする際、位置独立実行形式(PIE)機能を使用して位置独立バイナリを生成します。 3.15.3項「位置独立実行形式」を参照してください。

  • chroot()を使用して、プログラムの操作境界をファイル・システム内の指定された場所に制限することを検討してください。

  • プログラムから、特にsetuidまたはsetgidプログラムからpopen()またはsyscall()をコールしてシェル・コマンドを実行しないでください。

次のガイドラインは、プログラムにsetuidまたはsetgidビットが設定されていて、権限を持たないユーザーのかわりに権限アクションを実行できる場合に適用されます。

  • シェル・スクリプトでsetuidまたはsetgidビットを設定しないでください。 ただし、setuidまたはsetgidなPerlスクリプトを使用する場合、perltaintモード(汚染検出モード)で実行され、同等のCコードを使用するよりも安全とされます。 詳細は、perlsec(1)マニュアル・ページを参照してください。

  • setuidまたはsetgidが付与する権限の使用を、その権限を必要とする機能に制限し、その後有効なUIDまたはGIDをユーザーのUIDまたはGIDに戻します。 可能な場合は、権限機能は別個の詳細に監視されるスレッドまたはプロセスで実行します。

  • setuidまたはsetgidプログラムが、PATH環境変数を使用するexeclp()またはexecvp()を使用して子プロセスを実行できないようにします。