PHP がすでに最も人気のある Web アプリケーション プログラミング言語であることは誰もが知っています。しかし、他のスクリプト言語と同様に、PHP にもいくつかの危険なセキュリティ ホールがあります。したがって、このチュートリアルでは、一般的な PHP セキュリティ問題を回避するのに役立ついくつかの実践的なヒントを見ていきます。
一般に、開発プロセス中、多くのプログラマーは常にプログラムエラーレポートを作成することを忘れます。適切なエラーレポートは最良のデバッグツールであるだけでなく、問題を特定するための優れたセキュリティ脆弱性検出ツールでもあるためです。アプリケーションをオンラインにする前に、できる限り多くのことに遭遇するでしょう。
もちろん、エラー報告を有効にする方法はたくさんあります。たとえば、php.in 構成ファイルで、実行時に有効になるように設定できます
エラー報告を開始
リーリーエラー報告を無効にする
リーリーOFF に設定する必要がある PHP プロパティがいくつかあります。通常、これらは PHP4 に存在しますが、PHP5 では使用は推奨されません。特に PHP6 では、これらの属性が削除されました。
グローバル変数を登録する
register_globals が ON に設定されている場合、Environment、GET、POST、COOKIE または Server 変数がグローバル変数として定義されている設定と同等です。現時点では、フォーム変数「username」を取得するために $_POST['username'] を記述する必要はありません。この変数を取得するには、「$username」だけが必要です。
ということは、 register_globals を ON に設定するとこんなに便利なメリットがあるのだから、使わない手はないのではないかと考えているのではないでしょうか?これを行うと多くのセキュリティ上の問題が発生し、ローカル変数名と競合する可能性があるためです。
たとえば、次のコードを見てください:
リーリー実行時に register_globals が ON に設定されている場合、ユーザーはクエリ文字列で access=1 を渡すだけで、PHP スクリプトが実行するものを取得できます。
.htaccess のグローバル変数を無効にする
リーリーphp.iniのグローバル変数を無効にする
リーリーmagic_quotes_gpc、magic_quotes_runtime、magic_quotes_sybase などの Magic Quotes を無効にします
.htaccess ファイルで設定します
リーリーphp.iniで設定します
リーリーもちろん、ユーザー入力を検証することもできます。まず、ユーザーが入力すると予想されるデータ型を知る必要があります。このようにして、ユーザーによる悪意のある攻撃をブラウザ側で防ぐことができます。
Web アプリケーションでは、フォームへのユーザー入力を単純に受け入れ、結果をフィードバックします。ユーザー入力を受け入れる場合、HTML 形式の入力を許可すると、JavaScript が予期しない方法で侵入して直接実行される可能性があるため、非常に危険です。このような脆弱性が 1 つでもあると、Cookie データが盗まれ、ユーザーのアカウントが盗まれる可能性があります。
PHPは基本的にデータベースを保護するツールを提供していないため、データベースに接続する際には、次のmysqli_real_escape_string関数を使用できます。
リーリーさて、この短い記事では、開発プロセス中に無視できないいくつかの PHP セキュリティ問題について詳しく説明します。ただし、それを使用するかどうか、および使用方法を決定するのは最終的に開発者次第です。この記事があなたのお役に立てば幸いです。