ホームページ  >  記事  >  バックエンド開発  >  save_modeを有効にせずにphpのセーフモードを設定する方法

save_modeを有効にせずにphpのセーフモードを設定する方法

WBOY
WBOYオリジナル
2016-06-23 13:49:44751ブラウズ


セキュリティ設定 1

(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
通常この場合、プログラムを実行する必要がないため、システム プログラム ディレクトリを実行しないことをお勧めします。次のように、ディレクトリを指定して、実行する必要があるプログラムをコピーします。 :/tmp/cmd
ただし、もっとお勧めします プログラムを実行しないで、Web ページのディレクトリを指定できます:
safe_mode_exec_dir = D:/usr/www

(4) ファイルをセーフ モードでインクルードします
If youセーフモードでいくつかのパブリックファイルを含めたい場合は、オプションを変更します:
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
Forたとえば、ハッカーが Telnet www.12345 .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
エラー情報を表示したい場合は、必ずエラー表示のレベルを設定してください。たとえば、警告の上の情報のみを表示します:
error_reporting = E_WARNING & E_ERROR
もちろん、それでもエラー プロンプトをオフにすることをお勧めします。

(11) エラーログ
サーバーが動作している理由を見つけるために、display_errors をオフにしてエラー情報を記録することをお勧めします:
log_errors = On
同時にエラーログが保存されているディレクトリルート Apache ログも一緒に保存することをお勧めします:
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 ユーザーが実行したいことのみを実行できるように各フォルダーの権限を設定し、ディレクトリごとに個別の読み取り/書き込みユーザーを作成することもできます。
これは、多くの仮想ホストプロバイダーで使用されている一般的な構成方法でもありますが、これを防ぐために使用すると過剰になります。

セキュリティ構成 2

前のセクションでは、IIS+MySQL+PHP の基本的な構成プロセスと Windows の基本的な権限設定を紹介しました。この部分では、PHP のセキュリティ構成と Web ディレクトリのセキュリティ構成について説明する必要があります。もちろん、IIS の異常なセキュリティ構成も必要です。ここでいくつかの言葉から始めましょう。
私たちの最終的な目標は、Web サイトが PHP のみを実行し、ASP や ASP.NET をサポートしないようにすることです。そのため、ピクチャ ディレクトリなどの特定のディレクトリまたはサブ Web サイトで PHP スクリプトを実行できないように設定します。 , そのため、Web サイトは「ハッカー」によってバックエンドにログインされ、ファイルをアップロードできました。しかし、最終的には Web シェルを実行できませんでした。
ウェブシェルを取得したとしても、ディレクトリやファイルを読み取ることはできず、コマンドを実行することもできません。言い換えれば、強力な Web シェルはハッカーの手には何の利用価値もなく、ハッカーは最終的に発狂して死ぬことになります。笑!実際、これを行うのはそれほど難しいことではありません。この記事を学習すると、このような異常なサーバー構成を独自に完了できるようになります。

1. php.ini ファイルの構成が異常です

なぜ php.ini を先頭に記述するのでしょうか? 私たちの Web サイトは PHP なので、多くのデフォルトのオプションは安全ではありません。これにより、ハッカーが悪用する機会が多く残るため、一般的なスクリプト ハッカーによる攻撃を防ぐために、最初のステップで php.ini を異常な値に設定する必要があります。
まず、php.ini の基本概念をいくつか理解しましょう。空白文字とセミコロンで始まる行は単純に無視されます。設定ディレクティブの形式は次のとおりです。 ディレクティブ = 値 ディレクティブ名 (ディレクティブ) は大文字と小文字が区別されます。 したがって、「foo=bar」は「FOO=bar」とは異なります。値 (値) は次のとおりです:

1. 引用符で区切られた文字列 (例: "foo")
2. 数値 (整数または浮動小数点数、例: 0、1、34、-1、33.55)
3 . PHP 定数 (例: E_ALL、M_PI)
4. INI 定数 (On、Off、none)
5. 式 (例: E_ALL & ~E_NOTICE)

ブール値、1 が On の場合はオンになり、0 がオフの場合はオフになります。 php.ini は、モジュール部分、php グローバル設定、データベース設定などの多くの部分に分かれています。図 1 は、基本的な php.ini の例を示しています。基本概念を理解したら、異常な構成の旅を始めることができます。

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