はじめに
PHP は、モジュールまたは CGI としてインストールされた場合でも、サーバー上のファイルにアクセスしたり、コマンドを実行したり、ネットワーク接続を作成したりできる強力な言語です。これらの機能により、サーバーに多くのセキュリティ上の危険要素が追加される可能性がありますが、PHP が正しくインストールおよび構成され、安全なコードが記述されている限り、PHP は Perl や C よりも安全な CGI プログラムを作成できます。また、使いやすさとセキュリティのバランスも考慮することが可能です。
PHP はさまざまな方法で使用できるため、PHP には簡単に設定できるオプションが組み込まれています。多数のオプションにより PHP は多くの作業を実行できるようになりますが、これらのオプションの設定とサーバーの構成によってセキュリティ上の問題が発生する可能性があります。
PHP のオプションは、その構文と同じくらい柔軟です。 PHP を使用すると、シェル ユーザー権限のみを持つ環境で完全なサーバー側プログラムを作成したり、PHP を使用して、あまりリスクを負うことなく、厳密に制限された環境でサーバー側インクルード (Server-Side include) を完了したりできます。このような環境をセットアップする方法とその安全性は、PHP 開発者に大きく依存します。
この章は、いくつかの一般的なセキュリティに関する提案から始まり、さまざまな環境でセキュリティを最大化する方法を説明し、さまざまなセキュリティ レベル向けのいくつかのプログラミング原則を紹介します。
一般
絶対に安全なシステムは存在しないため、セキュリティ業界で一般的に使用されている方法は、可用性とリスクのバランスを取るのに役立ちます。ユーザーが送信するすべての変数を二重検証することは責任ある行動かもしれませんが、その結果、ユーザーは複雑なフォームに記入するのに多くの時間を費やす必要が生じ、一部のユーザーがセキュリティを回避しようとする可能性があります。
最適なセキュリティメカニズムは、ユーザーの妨げにならず、開発の難易度も過度に高めることなくニーズを満たすことができるものでなければなりません。実際、このようにセキュリティが強化されすぎたシステムでは、セキュリティ上の問題が発生することがよくあります。
強度が等しいという有名な原則を忘れないでください。システムの強度は、そのシステムの最も弱いリンクによって決まります (バレルの原理と同等)。すべての取引が時間、場所、取引の種類に基づいて詳細に記録され、ユーザー認証が 1 つの Cookie のみに依存する場合、ユーザーの対応する取引記録の信頼性は大幅に弱まります。
コードをデバッグするときは、単純なページであっても、考えられるすべてのシナリオを検出するのは難しいことを必ず覚えておいてください。あなたに不満を抱いている従業員が、必ずしもあなたが望むものを入力するとは限らず、ハッカーもあなたのシステムを研究するのに十分な時間を持っています。もちろん、ペットの猫がキーボードに飛び乗るでしょう。このため、すべてのコードを検査して、不適切なデータが導入される可能性のある場所を発見し、コードを改善、簡略化、または強化する必要があるのです。
インターネットには、有名になってあなたの人生を楽しくするために、コードを破ったり、Web サイトを攻撃したり、怪しいデータを入力したりする人がたくさんいます。大規模な Web サイトでも小規模な Web サイトでも、インターネットに接続できればターゲットになります。多くのハッキング プログラムは Web サイトのサイズを気にせず、機械的に IP アドレスをスキャンして被害者を探すだけです。それがあなたではないことを祈ります。