php のアンチインジェクションには 2 種類あり、1 つは SQL アンチインジェクション、もう 1 つはすべての変数を送信する cms のような処理、もう 1 つは php.ini を直接設定する方法です。 。
1. インクルードするファイルのディレクトリにsafe.func.phpを渡します
2. ページに保護を追加するには、状況に応じて 2 つの方法を選択できます。
コードは次のとおりです
| コードをコピー
|
/* すべての GET 変数をフィルタリングします */
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strto lower($get_key)] = get_int($get_var);
} その他 {
$get[strto lower($get_key)] = get_str($get_var);
}
}
/* すべての POST 変数をフィルターします */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var))
{
$post[strto lower($post_key)] = get_int($post_var);
}
それ以外は
{
$post[strto lower($post_key)] = get_str($post_var);
}
}
/* フィルター関数 */
//整数フィルター関数
関数 get_int($number)
{
return intval($number);
}
//文字列フィルター関数
関数 get_str($string)
{
if (!get_magic_quotes_gpc())
{
リターン addslashes($string);
}
$string を返します;
}
?>
|
phpで直接インジェクションを防ぐことに加えて、php.iniファイルを設定することもできます
。まず、編集ツールを使用して /usr/local/php/etc/php.ini を開きます。他の方法でインストールした場合は、設定ファイルがこのディレクトリにない可能性があります。
(1) PHP のセーフ モードをオンにする PHP のセーフ モードは、system()、
などの PHP の一部の関数を制御できる非常に重要な組み込みのセキュリティ メカニズムです。
同時に、多くのファイル操作機能が権限制御されており、/etc/passwd などの特定の重要なファイルは許可されません。
ただし、デフォルトの php.ini はセーフ モードで開かないので、セーフ モードを開いてみましょう:
セーフモード = オン
(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 ヘッダー内の情報をオフにすることができます:
Expose_php = Off たとえば、ハッカーが www.12345.com 80 に Telnet すると、PHP 情報を見ることができなくなります。
(8) グローバル変数のクローズ登録
PHP で送信された変数 (POST または GET を使用して送信された変数を含む) は、グローバル変数として自動的に登録され、直接アクセスできます
これはサーバーにとって非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします:
register_globals = オフ
もちろん、これが設定されている場合は、GET によって送信された変数 var を取得するなど、適切な方法を使用して対応する変数を取得する必要があります。
PHP プログラマは、これを取得するために $_GET['var'] を使用する必要があります。
(9) SQLインジェクションを防ぐためにmagic_quotes_gpcをオンにする
SQL インジェクションは、Web サイトのバックエンドに侵入したり、サーバー全体がダウンしたりする可能性がある非常に危険な問題です。
ので注意してください。 php.ini に次の設定があります:
magic_quotes_gpc = オフ
これはデフォルトではオフになっています。オンにすると、ユーザーが送信した SQL クエリが自動的に変換されます
たとえば、' を ' に変換するなど、SQL インジェクションの防止に重要な役割を果たします。したがって、次のように設定することをお勧めします:
magic_quotes_gpc = オン
(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 ユーザーとグループに書き込み権限を与えるために指定する必要があります。