PHPの活用がますます進んでいます!安全性の問題はより重要です! php.ini
を安全に設定する方法は次のとおりです。
セキュリティ構成 1
(1) php
のセーフモードをオンにするPHP のセキュリティ モードは、system()、
などの PHP の一部の関数を制御できる非常に重要な組み込みセキュリティ メカニズムです。同時に、多くのファイル操作関数の権限が制御され、/etc/passwd、
などの特定のキー ファイルは許可されません。しかし、デフォルトの php.ini はセーフ モードで開かないので、セーフ モードを開いてみましょう:
セーフモード = オン
(2) ユーザーグループのセキュリティ
safe_mode がオンになり、safe_mode_gid がオフになると、PHP スクリプトはファイルにアクセスできるようになり、同じ
グループ内のユーザーもファイルにアクセスできます。
次のように設定することをお勧めします:
safe_mode_gid = オフ
これを設定しないと、サーバー 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 = システム、パススルー、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 = オフ
たとえば、ハッカーが www.12345.com 80 に Telnet した場合、PHP 情報を見ることはできません。
(8) 登録したグローバル変数を閉じる
PHP で送信された変数 (POST または GET を使用して送信された変数も含む) は、グローバル変数として自動的に登録され、直接アクセスできます。
これはサーバーにとって非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします。
register_globals = オフ
もちろん、これが設定されている場合は、GET、
によって送信された変数 var を取得するなど、適切な方法を使用して対応する変数を取得する必要があります。PHP プログラマーは、これを取得するために $_GET['var'] を使用する必要があります。
(9) magic_quotes_gpc をオンにして SQL インジェクションを防止します
SQL インジェクションは、Web サイトのバックエンドに侵入したり、サーバー全体がダウンしたりする可能性がある非常に危険な問題です。
だから注意してください。 php.ini に次の設定があります:magic_quotes_gpc = オフ
これはデフォルトではオフになっています。オンにすると、ユーザー
によって送信された SQL クエリが自動的に変換されます。
たとえば、' を ' に変換するなど、SQL インジェクションの防止に重要な役割を果たします。したがって、次のように設定することをお勧めします:
magic_quotes_gpc = オン
(10) エラーメッセージ制御
通常、php はデータベースに接続されていない場合、またはその他の状況下でエラーを表示します。
の場合、エラー メッセージには php スクリプトが含まれます。以前のパス情報やクエリ SQL ステートメント、その他の情報は、この種の情報がハッカーに提供されると安全ではなくなるため、通常はサーバーでエラー プロンプトを無効にすることをお勧めします。
display_errors = オフエラー情報を表示したい場合は、警告以上の情報のみを表示するなど、エラー表示のレベルを必ず設定してください:
error_reporting = E_WARNING & E_ERROR
もちろん、それでもエラープロンプトをオフにすることをお勧めします。
(11) エラーログ
サーバー動作の原因を見つけやすくするために、display_errors を閉じた後にエラー情報を記録することをお勧めします:
log_errors = オン
同時に、エラー ログを保存するディレクトリも設定する必要があります。ルート Apache ログも一緒に保存することをお勧めします。
error_log = D:/usr/local/apache2/logs/php_error.log
注: ファイルには、Apache ユーザーおよびグループに対する書き込み権限が与えられている必要があります。
MYSQL の権限を削減した操作
mysqlstart
などの新しいユーザーを作成します。
ネットユーザー mysqlstart ****microsoft /addnet ローカルグループ ユーザー mysqlstart /del
どのグループにも属していません
MYSQL が d:mysql にインストールされている場合は、mysqlstart にフル コントロールのアクセス許可を与えます
次に、システム サービスで MYSQL サービス プロパティを設定し、ログイン プロパティでこのユーザー mysqlstart を選択し、パスワードを入力して確認します。
MYSQL サービスを再起動すると、MYSQL は低い特権で実行されます。
Apache が Windos プラットフォーム上に構築されている場合、Apache はデフォルトでシステム権限で実行されるという 1 つの点に注意する必要があります。
これは恐ろしいことであり、人々を非常に不快にさせます。それなら、Apache の権限を下げましょう。
ネットユーザー apache ****microsoft /add
net ローカルグループ ユーザー apache /del
OK。どのグループにも属さないユーザー apche を作成しました。
コンピューターマネージャーを開き、サービスを選択し、Apache サービスのプロパティをクリックし、ログオンを選択し、このアカウントを選択し、上で作成したアカウントとパスワードを入力します。
Apache サービスを再起動します。Apache は低い権限で実行されています。
実際、Apache ユーザーが実行したいことのみを実行できるように各フォルダーの権限を設定し、ディレクトリごとに個別の読み取り/書き込みユーザーを作成することもできます。
これは、現在の多くの仮想ホスト プロバイダーの間で一般的な構成方法でもありますが、この方法をこれを防ぐために使用すると過剰になります。
セキュリティ構成 2
前のセクションでは、IIS+MySQL+PHP の基本的な構成プロセスと Windows の基本的な権限設定を紹介しました。この部分では、PHP のセキュリティ構成と Web ディレクトリのセキュリティ構成について説明する必要があります。もちろん、IIS の異常なセキュリティ構成も必要です。ここでいくつかの言葉から始めましょう。
最終的な目標は、Web サイトが PHP のみを実行し、ASP や ASP.NET をサポートしないようにすることです。そのため、ピクチャ ディレクトリなどの特定のディレクトリまたはサブサイトでは 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 定数 (オン、オフ、なし)
5. 式 (例: E_ALL & ~E_NOTICE)
もう 1 つはブール値を設定する方法です。1 はオン (オン) を意味し、0 (オフ) はオフを意味します。 php.ini は、モジュール部分、php グローバル設定、データベース設定などの多くの部分に分かれています。図 1 は、基本的な php.ini の例を示しています。基本概念を理解したら、異常な構成の旅を始めることができます。