サーバー側の構成
セキュリティ、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()、At などの 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) オフにする危険な機能について
if セーフモードがオンになっている場合は機能の禁止は必要ありませんが、安全性を考慮しております。たとえば、system() や phpinfo() などのコマンドを実行できる PHP 関数や、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
ハッカーがサーバー内の PHP バージョン情報を取得することを防ぐために、http ヘッダー内の PHP バージョン情報の漏洩を阻止します。 http ヘッダー内の情報の漏洩 ヘッダー内:
expose_php = Off
(8) グローバル変数の登録をオフにする
PHP で送信された変数 (POST または GET を使用して送信された変数を含む) は、グローバル変数として自動的に登録され、直接アクセスできるようになります。サーバーは非常に安全ではないため、グローバル変数として登録させることはできません。そのため、グローバル変数の登録オプションをオフにします。
register_globals = Off
(9) SQL インジェクションを防ぐために magic_quotes_gpc をオンにする
SQL インジェクションは非常に危険な問題であり、Web サイトのバックエンドに侵入したり、サーバー全体がダウンしたりする可能性があるため、注意してください。 。 php.ini には次の設定があります:
magic_quotes_gpc = Off
magic_quotes_gpc = On
通常、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 fuckmicrosoft /add net localgroup users mysqlstart /del
不属于任何组
如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限
然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。
重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限
这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache fuckmicrosoft /add net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,
重启apache服务,ok,apache运行在低权限下了。
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。
这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。
推荐视频教程:PHP视频教程
以上がphp は SQL インジェクション攻撃をどのように防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。