PHP は、最も広く使用されているスクリプト プログラミング言語の 1 つです。市場シェアは、その支配的な地位を雄弁に物語っています。 PHP 7 がリリースされたという事実により、このプログラミング言語は現在の開発者にとってさらに魅力的なものになっています。いくつかの変更にもかかわらず、多くの開発者は PHP の将来について懐疑的です。理由の 1 つは PHP のセキュリティです。
Linux 管理者は、PHP のセキュリティに関するトップ 10 のポイントを知っておく必要があります
PHP は、最も広く使用されているスクリプト プログラミング言語の 1 つです。市場シェアは、その支配的な地位を雄弁に物語っています。 PHP 7 がリリースされたという事実により、このプログラミング言語は現在の開発者にとってさらに魅力的なものになっています。いくつかの変更にもかかわらず、多くの開発者は PHP の将来について懐疑的です。理由の 1 つは PHP のセキュリティです。
PHP のセキュリティは開発者にとっての主な懸念事項です。 PHP は内部から外部まで強固なセキュリティを提供しますが、これらのセキュリティ メカニズムを正しく実装できるかどうかは開発者の責任です。この記事では、Linux 管理者向けの PHP セキュリティ ポイントをいくつか紹介します。これらのポイントは、Web アプリケーションを保護し、長期的に適切に機能することを保証するのに役立ちます。
始める前に、私たちが扱っているシステムを理解する必要があります。デモンストレーションの目的で、Fedora を使用します。ただし、これらの点は、Ubuntu バージョンまたはその他の Linux ディストリビューションに適用される必要があります。詳細については、オペレーティング システムのディストリビューションのマニュアルを確認してください。
システム環境のいくつかの主要なファイルを詳しく見てみましょう。ファイルは次のものに似ているか、それに対応している必要があります:
デフォルト Web サーバー: Apache
DocumentRoot: /var/www/html
PHP 設定ファイル: /etc/php.ini
拡張設定ディレクトリ: /etc/php 。 d/
セキュリティ ファイル: /etc/php.d/security.ini
これらのヒントは、SQL インジェクション、XSS、クロスサイト リクエスト フォージェリ攻撃、eval()、およびファイルアップロード攻撃。一般的な攻撃のリストは、こちら (https://www.sitepoint.com/top-10-php-security-vulnerabilities/) でご覧いただけます。
1. 不要なモジュールを削除します。
PHPには組み込みのphpモジュールが付属しています。これらは多くのタスクに役立ちますが、すべてのプロジェクトで必要になるわけではありません。次のコマンドを入力するだけで、利用可能な PHP モジュールが表示されます:
# php - m
リストを表示したら、不要なモジュールを削除できます。モジュールの数を減らすと、作業する Web アプリケーションのパフォーマンスとセキュリティが向上します。
2. PHP 情報の漏洩を制限します。
プラットフォームが重要な情報を漏洩することはよくあります。たとえば、PHP はバージョンやサーバーにインストールされた事実などの情報を漏洩します。これは、expose_php コマンドを通じて実現できます。リークを防ぐには、/etc/php.d/security.ini でこのコマンドをオフに設定する必要があります。
expose_php=Off
バージョンとそのステータスを知る必要がある場合は、Web サイトのアドレスに対して簡単な Curl コマンドを実行するだけで情報を取得できます。
Curl - I http://www.kubiji.cn/index.php
前のコマンドは次の情報を返します:
HTTP/1.1 200 OK
X-Powered-By: PHP/7.0.10
Content-type: text/html; charset=UTF-8
3. リモートコード実行を無効にします。
リモート コード実行は、PHP セキュリティ システムにおける一般的なセキュリティ脆弱性の 1 つです。デフォルトでは、システム上でリモート コード実行が有効になっています。 「allow_url_fopen」コマンドを使用すると、require、include、URL 対応の fopen ラッパーなどの関数が PHP ファイルに直接アクセスできるようになります。リモート アクセスは HTTP または FTP プロトコルを使用して実現されるため、システムはコード インジェクションのセキュリティ脆弱性を防御できなくなります。
システムを安全かつ確実にリモート コード実行から遠ざけるために、次のようにこのコマンドを「オフ」に設定できます:
Allow_url_fopen=Off
allow_url_include=Off
4. PHP エラーをログに記録します。
Web アプリケーションのセキュリティを強化するもう 1 つの簡単な方法は、訪問者にエラーを表示しないことです。これにより、ハッカーが Web サイトのセキュリティをまったく侵害できなくなります。 /etc/php.d/security.ini ファイルを編集する必要があります。
display_errors=Off
この手順を完了した後、「開発者は、エラー メッセージの助けを借りずに、どのようにしてデバッグできるのでしょうか?」と考えているかもしれません。開発者は、デバッグに log_errors コマンドを使用できます。 security.ini ファイルで log_errors コマンドを「オン」に設定するだけです。
log_errors=オン
error_log=/var/log/httpd/php_scripts_error.log
5. リソースを合理的に制御します。
アプリケーションのセキュリティを確保するには、リソースを制御することが重要です。適切な実行とセキュリティを確保するには、PHP スクリプトの実行を制限する必要があります。さらに、リクエスト データの解析に費やす時間にも制限を設ける必要があります。実行時間が制御されている場合は、スクリプトによって使用されるメモリなどの他のリソースもそれに応じて構成する必要があります。これらすべてのメトリクスは、security.ini ファイルを編集することで管理できます。
# 秒単位で設定
max_execution_time = 25
max_input_time = 25
memory_limit = 30M
6. 危険な PHP 関数を無効にする
PHP には開発に役立つ関数が付属していますが、ハッカーが Web アプリケーションに侵入するために使用できる関数も多数あります。これらの機能を無効にすると、全体的なセキュリティが向上し、危険な PHP 機能にさらされることがなくなります。
これを行うには、まず php.ini ファイルを編集する必要があります。ファイル内に入ったら、disable_functions コマンドを見つけて、ファイル内の危険な機能を無効にします。これを行うには、次のコードをコピー/ペーストするだけです。
disable_functions =exec,passthru,
shell_exec,system,proc_open,popen,curl_exec,
curl_multi_exec,parse_ini_file,show_source
ここで見つけることができます (https://www.eukhost.com/blog/webhosting/dangerous) - php-functions-must-be-disabled/) 危険な PHP 関数の無効化について詳しくは、こちらをご覧ください。
7. ファイルをアップロードします。
アプリケーションでファイルのアップロードが必要ない場合は、ファイルのアップロード機能を無効にすることでセキュリティを向上させることができます。ユーザーによるファイルのアップロードを禁止したい場合は、/etc/php.d/ ディレクトリ内の security.ini ファイルを編集し、file_uploads コマンドを OFF に設定するだけです。
file_uploads=オフ
8. バージョンを最新の状態に保ちます。
開発者は、使用するテクノロジーにパッチを適用するために年中無休で働いています。 PHPについても同様です。オープンソース コミュニティがあるため、パッチや修正が定期的にリリースされます。更新されたバージョンでは、デイワン脆弱性やその他のセキュリティ脆弱性に対するセキュリティ パッチも提供されます。アプリケーションのセキュリティを重視する場合は、PHP ソリューションが最新であることを常に確認してください。さらに、他の関連テクノロジーに最新のパッチを適用することで、最大限のセキュリティを確保できます。
9. ファイルシステムへのアクセスを制御します。
デフォルトでは、PHP は fopen() などの関数を使用してファイルにアクセスできます。アクセスは open_basedir コマンドによって提供されます。まず、open_basedir コマンドを常に /var/www/html ディレクトリに設定します。他のディレクトリに設定すると、セキュリティ上の問題が発生する可能性があります。
open_basedir="/var/www/html/"
10. POST サイズを制御します。
最後の PHP セキュリティ ポイントは、POST サイズの制御関数です。 HTTP POST 機能は、クライアントのブラウザを使用してデータを Web サーバーに送信します。たとえば、ユーザーが証明書をアップロードすると、証明書は処理のために Web ブラウザに送信されます。すべてが順調に進んでいたのですが、ある日、ハッカーがサーバーのリソースを使い果たす巨大なファイルを送信しようとしました。これにより、サーバーがクラッシュしたり、応答が遅くなったりする可能性があります。この脆弱性からサーバーを保護するには、POST サイズを設定する必要があります。 POST サイズは /etc/php.d/security.ini ファイルで設定できます。
post_max_size=1k
結論
セキュリティは、Web 開発者と Linux 管理者にとって最も懸念される問題の 1 つです。上記の点に注意すれば、開発環境やPHP Webアプリケーションのセキュリティを強化することができます。重要な点が抜けていると思われる場合は、メッセージを残して追加してください。