PHP のセキュリティ問題の概要
(1) php のセーフ モードをオンにする
php のセーフ モードは、system()、
と多くの機能を同時に制御します。 ファイル操作関数は権限制御を実行し、/etc/passwd、
などの特定のキー ファイルを許可しません。ただし、デフォルトの php.ini はセーフ モードを開きません。
safe_mode = on
(2) ユーザー グループのセキュリティ
safe_mode がオンになると、safe_mode_gid がオフになり、php スクリプトがファイルにアクセスできるようになります。 、同じ
グループ内のユーザーもファイルにアクセスできます。
次のように設定することをお勧めします。
safe_mode_gid = off
設定しないと、ディレクトリ内のファイルを操作できなくなる可能性があります。たとえば、サーバー Web サイトでは、ファイルを操作するときに
を行う必要があります。
(3) セーフ モードでプログラムを実行するためのホーム ディレクトリ
セーフ モードがオンになっているが、特定のプログラムを実行したい場合は、実行するプログラムのホーム ディレクトリを指定できます。
safe_mode_exec_dir = D:/usr/bin
通常、プログラムを実行する必要はないため、システム プログラム ディレクトリを指定することをお勧めします。
に続いて、実行する必要があるプログラムをコピーします。例:
safe_mode_exec_dir = D:/tmp/cmd
ただし、プログラムは実行しないことをお勧めします。次に、Web ディレクトリを指定します:
safe_mode_exec_dir = D:/usr/www
(4) ファイルをセーフ モードで含めます
一部のパブリックファイルを含めたい場合ファイルをセーフ モードで開き、オプションを変更します。
safe_mode_include_dir = D:/usr/www/include/
実際、通常、php スクリプトに含まれるファイルはプログラム自体に書き込まれています。これは、特定のニーズに応じて設定できます。
(5) PHP スクリプトがアクセスできるディレクトリを制御する
open_basedir オプションを使用して、PHP スクリプトが指定されたディレクトリのみにアクセスできるように制御します。これにより、PHP スクリプトが
アクセスされるファイルによって phpshell の害はある程度制限されます。通常は、Web サイトのディレクトリにのみアクセスするように設定できます:
open_basedir = D:/usr/www
(6) ) 危険な機能をオフにしてください
セーフモードがオンになっている場合、機能の禁止は必要ありませんが、安全性を考慮しております。たとえば、
コマンドを実行できる system() などの php 関数や、php 情報を表示できる
phpinfo() などの関数を実行したくないと感じた場合、
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
ファイルやディレクトリの操作を無効にしたい場合は、多くのファイル操作をオフにすることができます
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
上記は、一般的に使用されるファイル処理関数の一部を示しているだけです。
は、ほとんどの phpshell に耐えることができます。
(7) http ヘッダーの PHP バージョン情報の漏洩をオフにする
ハッカーがサーバー内の PHP バージョン情報を取得するのを防ぐために、http ヘッダーの PHP バージョン情報の漏洩をオフにすることができます。 http ヘッダーの情報:
expose_php = Off
たとえば、ハッカーが www.shilicn.com 80 に Telnet する場合、PHP 情報を見ることはできません。
(8) グローバル変数の登録をオフにする
POST または GET を使用して送信された変数を含む、PHP で送信された変数は、グローバル変数として自動的に登録され、直接アクセスできます。
これはサーバーにとって非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします:
register_globals = Off
もちろん、このように設定した場合は、GET によって送信された変数 var を取得するなど、適切な方法を使用して対応する変数を取得する必要があります。その後、$_GET['var'] を使用する必要があります。 PHP プログラマーはこれに注意してください。
(9) SQL インジェクションを防ぐために magic_quotes_gpc をオンにします。
SQL インジェクションは非常に危険な問題で、最小のケースでは Web サイトのバックエンド、最悪の場合はサーバー全体に侵入されます。
ので、必ず注意してください。 php.ini には次の設定があります:
magic_quotes_gpc = Off
これがオンになっている場合、ユーザーが送信した SQL クエリが自動的に変換されます。
たとえば、' を ' に変換するなど、SQL インジェクションを防ぐ上で重要な役割を果たします。したがって、次のように設定することをお勧めします:
magic_quotes_gpc = On
(10) エラー メッセージ制御
一般に、PHP はデータベースに接続されていない場合にエラーを表示します。または他の状況では、一般的に、エラー メッセージには、
の前の PHP スクリプトのパス情報またはクエリの SQL ステートメントが含まれます。このタイプの情報はハッカーに提供されると安全ではないため、一般的に推奨されます。サーバーがエラー プロンプトを無効にしていること:
display_errors = Off
エラー情報を表示したい場合は、警告の上の情報のみを表示するなど、エラー表示のレベルを必ず設定してください:
error_reporting = E_WARNING & E_ERROR
もちろん、それでも有効にすることをお勧めします。オフのヒント。
(11) エラーログ
サーバーが動作している理由を見つけるために、display_errors をオフにしてエラー情報を記録することをお勧めします。
log_errors =
では、エラー ログが保存されるディレクトリも設定します。
error_log = D:/usr/local/apache2/logs/php_error のように、ルート Apache ログも一緒に保存することをお勧めします。 .log
注: ファイルでは、Apache ユーザーとグループに書き込み権限を許可する必要があります。
MYSQL 権限をダウンロード
mysqlstart などの新しいユーザーを作成
net user mysqlstart ****microsoft /add
net localgroup users mysqlstart / del
はどのグループにも属していません
MYSQL が d:mysql にインストールされている場合は、mysqlstart にフル コントロール アクセス許可
を与えてから、システム内の MYSQL のサービス プロパティを設定しますservice 、ログイン プロパティでこのユーザー mysqlstart を選択し、パスワードを入力して [OK] をクリックします。
MYSQL サービスを再起動すると、MYSQL は低い特権で実行されます。
Apache が Windos プラットフォーム上に構築されている場合、Apache はデフォルトでシステム権限で実行されるため、非常に不快に感じます。 apacheに権限を減らします。
net user apache ****microsoft /add
net localgroup users apache /del
ok。どのグループにも属さないユーザー apche を作成しました。
コンピューターマネージャーを開き、サービスを選択し、Apache サービスのプロパティをクリックし、ログオンを選択し、このアカウントを選択し、上記で作成したアカウントとパスワードを入力し、
再起動しますApache サービス、OK、Apache は低い権限で実行されています。
実際、Apache ユーザーが実行したいことのみを実行できるように各フォルダーの権限を設定し、ディレクトリごとに個別の読み取り/書き込みユーザーを作成することもできます。
これは、多くの仮想ホスト プロバイダーで使用されている一般的な構成方法でもありますが、これを防ぐために使用すると過剰になります。 (http://www.65066.com.cn)