ここでは、編集者がウェブマスターによってまとめられた SQL インジェクション攻撃を防ぐ例と経験を共有します。このチュートリアルがすべての学生に役立つことを願っています。
1.サーバー側の設定
セキュリティ、PHP コード作成は 1 つの側面であり、PHP 構成は非常に重要です。
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 ではセーフ モードが開かないので、セーフ モードを開いてみましょう:セーフモード = オン
(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)危険な機能をオフにする
セーフモードがオンになっている場合、機能の禁止は必要ありませんが、安全性を考慮しております。たとえば、
コマンドを実行したり、php情報を表示したりできるsystem()を含む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 を取得するなど、適切な方法を使用して対応する変数を取得する必要があります。
その後、それを取得するには $_GET['var'] を使用する必要があります。PHP プログラマはこれに注意する必要があります。
(9) SQL インジェクションを防ぐために、magic_quotes_gpc をオンにします
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 ユーザーとグループに書き込み権限を与える必要があります。
1 2
http://www.bkjia.com/PHPjc/632834.html