ホームページ >バックエンド開発 >PHPチュートリアル >Linux サーバー、PHP のセキュリティ構成の実践トップ 10

Linux サーバー、PHP のセキュリティ構成の実践トップ 10

WBOY
WBOYオリジナル
2016-06-23 13:41:48915ブラウズ

PHP はさまざまな Web 開発で広く使用されています。サーバー側のスクリプトが正しく構成されていない場合、さまざまな問題が発生する可能性があります。現在、ほとんどの Web サーバーは Linux (Ubuntu、Debian など) 上で実行されています。この記事では、PHP のセキュリティに関するベスト プラクティスのトップ 10 を例示し、PHP を簡単かつ安全に設定できるようにします。

PHP セキュリティ設定のヒント:

DocumentRoot: /var/www/
デフォルトの Web サーバー: Apache
デフォルトの PHP 設定ファイル: /etc/php.ini
デフォルトの PHP 拡張機能設定ディレクトリ: /etc/php /
サンプル php セキュリティ構成ファイル: /etc/php.d/security.ini (テキスト エディターを使用してこのファイルを作成する必要があります)
オペレーティング システム: Ubuntu (この手順は、RHEL などの他の Linux ディストリビューションでも機能するはずです / CentOS / Fedora または OpenBSD/FreeBSD/HP-UX などの他の Unix 系オペレーティング システム)

1. PHP 組み込みモジュールを削減します

パフォーマンスとセキュリティを強化するために、次のモジュールの数を減らすことを強くお勧めします。 PHP のモジュール。コマンドを実行してインストールされた以下のモジュールを見てみましょう。

1    # php ?m

同様の結果が得られます:

同様の結果が得られます:

[PHP モジュール]
apc
bcmath
bz2
Calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
フィルター
ftp
gd
gettext
gmp
ハッシュ
iconv
imap
json
libxml
mbstring
memcache
mysql
mysqli
openssl
pcntl
pc re
PDO
pdo_mysql
pdo_sqlite
Phar
readline
リフレクション
セッション
shmop
SimpleXML
ソケット
SPL
sqlite3
標準
suhosin
トークナイザー
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
z lib
[Zend モジュール] ]
Suhosin


モジュールを削除して、このコマンドを実行します。例: 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/

 

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。