ホームページ  >  記事  >  バックエンド開発  >  PHP に関連するいくつかの一般的なセキュリティの詳細

PHP に関連するいくつかの一般的なセキュリティの詳細

迷茫
迷茫オリジナル
2017-01-14 13:39:541826ブラウズ

PHP を手動でインストールしました。PHP のデフォルト設定ファイルは /usr/local/apache2/conf/php.ini にあります。最も重要なことは、PHP をより安全に実行できるように php.ini の内容を設定することです。 PHP全体のセキュリティ設定は主にphpshellとSQLインジェクションによる攻撃を防ぐためのものです。ゆっくり説明していきます。まず、編集ツールを使用して /etc/local/apache2/conf/php.ini を開きます。他の方法でインストールした場合は、設定ファイルがこのディレクトリにない可能性があります。

(1) phpのセーフモードをオンにする

phpのセーフモードは、system()、

多くのファイル操作関数など、phpの一部の関数を同時に制御できる非常に重要な組み込みセキュリティメカニズムです権限制御がなければ、/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 関数、または

phpinfo() や php 情報を表示できるその他の関数を実行したくない場合は、それらを禁止できます:

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ヘッダー内の情報の漏洩をオフにすることができます:

expose_php = Off

例えば、ハッカーの Telnet www. chinaz.com が 80 の場合、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
もちろん、エラー プロンプトをオフにすることをお勧めします。

(11) エラーログ

サーバーが実行されている理由を見つけるために、display_errorsをオフにした後、エラー情報を記録することをお勧めします:

log_errors = On

同時に、エラーログを保存するディレクトリを設定するために必要です。Apache を root にすることをお勧めします。ログは一緒に存在します:

error_log = D:/usr/local/apache2/logs/php_error.log

注: ファイルは指定する必要があります。 Apache ユーザーとグループに書き込み権限を与えます。

権限を減らして実行する MYSQL

mysqlstart のような新しいユーザーを作成します

net user mysqlstart ****microsoft /add

net localgroup users mysqlstart /del

どのグループにも属しません

MYSQL がインストールされている場合d:mysql で、mysqlstart にフル コントロール権限を与えます

次に、システム サービスで MYSQL のサービス プロパティを設定し、ログイン プロパティでこのユーザー mysqlstart を選択し、パスワードを入力します。

MYSQL サービスを再起動すると、MYSQL は低い特権で実行されます。

Apache が Windos プラットフォーム上に構築されている場合、Apache はデフォルトでシステム権限で実行されるため、非常に不快に感じます。次に、Apache の権限を下げてみましょう。

net user apache ****microsoft /add

net localgroup users apache /del

ok どのグループにも属さないユーザー apche を作成しました。

コンピューターマネージャーを開き、サービスを選択し、Apacheサービスのプロパティをクリックし、ログオンを選択し、このアカウントを選択し、上で作成したアカウントとパスワードを入力します。

Apacheサービスを再起動します。OK、Apacheが実行されます低い権限で降りました。

実際、Apache ユーザーが実行したいことのみを実行できるように各フォルダーの権限を設定し、ディレクトリごとに個別の読み取り/書き込みユーザーを作成することもできます。

これは、現在の多くの仮想ホスティングプロバイダーの間で一般的な構成方法でもありますが、この方法をこれを防ぐために使用すると過剰になります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。