PHP はさまざまな Web 開発で広く使用されています。サーバー側のスクリプトが正しく構成されていない場合、さまざまな問題が発生する可能性があります。現在、ほとんどの Web サーバーは Linux (Ubuntu、Debian など) 上で実行されています。この記事では、PHP のセキュリティに関するベスト プラクティスのトップ 10 を例示し、PHP を簡単かつ安全に設定できるようにします。
PHP セキュリティ設定のヒント:
DocumentRoot: /var/www/1. PHP 組み込みモジュールを削減します
パフォーマンスとセキュリティを強化するために、次のモジュールの数を減らすことを強くお勧めします。 PHP のモジュール。コマンドを実行してインストールされた以下のモジュールを見てみましょう。
1 # php ?m
同様の結果が得られます:
同様の結果が得られます:
[PHP モジュール]
モジュールを削除して、このコマンドを実行します。例: delete module sqlite3
1 # rm /etc/php.d/sqlite3.ini
または
1 # mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disableRestrict
2. PHP 情報漏洩を最小限に抑える
デフォルトの PHP では、各応答間の HTTP ヘッダーに行が生成されます (X-Powered など)。 -作者: PHP/5.2.10)。これにより、攻撃者にとって非常に貴重な情報がシステム情報に作成されます。
HTTP の例:
1 HTTP/1.1 200 OK2 X-Powered-By: PHP/5.2.103 Content-type: text/html; charset=UTF-84 Vary: Accept-Encoding, Cookie5 X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;6 string-contains=wikiLoggedOut;string-contains=wiki_session7 Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT8 ...
したがって、PHP 情報漏洩を無効にするには、/etc/php.d/secuity.ini を編集し、次のディレクティブを設定する必要があります:
1 expose_php=Off
3. PHP でロードされるモジュールを最小化する
デフォルトでは、RHEL によってロードされるすべてのモジュールは /etc/php.d/ ディレクトリにあります。特定のモジュールを無効または有効にするには、構成ファイル /etc/php.d/ ディレクトリ内のモジュール名をコメントアウトするだけです。 PHP のパフォーマンスとセキュリティを最適化するために、アプリケーションで必要な場合は拡張機能を有効にすることを強くお勧めします。例: GD 拡張機能が無効になっている場合は、次のコマンドを入力します:
1 # cd /etc/php.d/2 # mv gd.{ini,disable}3 # /etc/init.d/apache2 restart
PGP GD モジュールを拡張するには、次のコマンドを入力します:
1 # mv gd.{disable,ini}2 # /sbin/service httpd restart
4. PHP エラー メッセージをログに記録します
システムを改善するにはおよび Web アプリケーションのセキュリティのため、PHP エラー メッセージは公開できません。これを行うには、/etc/php.d/security.ini ファイルを編集し、次の指示を設定する必要があります:
1 display_errors=Off
開発者によるバグ修正を容易にするために、すべての PHP エラー情報をログに記録する必要があります。 。
1 log_errors=On2 error_log=/var/log/httpd/php_scripts_error.log
5. リモート コード実行を無効にする
コードがリモートで実行される場合、PHP コードが FTP や Web などのリモート関数からデータを取得して、PHP 経由でビルド関数を実行できるようにします。例: file_get_contents()。
多くのプログラマーは、これらの関数を使用して、FTP または HTTP プロトコルを通じてデータをリモートで取得します。ただし、この方法では PHP ベースのアプリケーションに大きな脆弱性が生じます。ほとんどのプログラマは、ユーザーが提供したデータを渡すときに適切なサニタイズを実装していないため、セキュリティ ホールが開き、脆弱性を挿入するコードが作成されます。この問題を解決するには、/etc/php.d/security.ini で _url_fopen を無効にし、次のコマンドを設定する必要があります:
1 allow_url_fopen=Off
これとは別に、システムのセキュリティを向上させるために _url_include を無効にすることもお勧めします。
1 allow_url_include=Off
6. PHP の危険な関数を無効にする
PHP には、不適切に使用するとシステムをクラッシュさせる危険な組み込み関数が多数あります。 /etc/php.d/security.ini を編集することで、PHP 組み込み機能のリストを作成して無効にすることができます。
えー
7. リソース制御
为了提高系统的稳定性,强烈建议设置每个脚本解析请求数据所花费的时间和脚本可能消耗的最大内存量。正确的配置这些参数可以防止PHP任何脚本消耗太多的资源或是内存,从而避免系统不安全或降低安全系数。
1 # set in seconds2 max_execution_time = 303 max_input_time = 304 memory_limit = 40M
8. 限制PHP访问文件系统
该open_basedir指令指定的目录是允许PHP访问使用fopen()等功能。如果任何脚本试图访问超出open_basdir定义的路径文件,PHP将拒绝打开。值得注意的是,你不能使用一个符号链接作为一种变通方法。
1 ; Limits the PHP process from accessing files outside2 ; of specifically designated directories such as /var/www/html/3 open_basedir="/var/www/html/"4 ; ------------------------------------5 ; Multiple dirs example6 ; open_basedir="/home/httpd/vhost/cyberciti.biz/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"7 ; ------------------------------------
9.限制文件/目录访问
进行适当的安全设置:确保Apache作为非root用户运行,比如www-data或www。对于文件和目录在基于/var/www/下同样属于非root用户。想要更改所有者,执行以下命令:
1 # chown -R apache:apache /var/www/
10.编译保护Apache,PHP和MySQL的配置文件
使用charrt命令编译保护配置文件
1 # chattr +i /etc/php.ini2 # chattr +i /etc/php.d/*3 # chattr +i /etc/my.ini4 # chattr +i /etc/httpd/conf/httpd.conf5 # chattr +i /etc/
使用charrt命令可以编译保护PHP文件或者是文件中的/var/www/html的目录:
1 # chattr +i /var/www/html/file1.php2 # chattr +i /var/www/html/