スクリプト言語と初期バージョンの設計に起因するさまざまな理由により、PHP プロジェクトには多くのセキュリティ リスクが存在します。構成オプションから、次の最適化を行うことができます。
1. PHP エラー出力をシールドします。
#/etc/php.ini (デフォルトの設定ファイルの場所) で、次の設定値を Offdisplay_errors=Off## に変更します。 #ハッカーによる関連情報の利用を防ぐため、エラー スタック情報を Web ページに直接出力しないでください。
トラブルシューティングを容易にするために、エラー ログをログ ファイルに書き込みます。
2. PHP バージョンをブロックします。
デフォルトでは、PHP バージョンは次のような戻りヘッダーに表示されます。
Response Headers X-powered-by: PHP/7.2.0php.ini の次の設定値を Off
グローバル変数が有効になっている場合、フォームから送信された一部のデータは自動的にグローバル変数として登録されます。コードは次のとおりです。
<form action="/login" method="post"> <input name="username" type="text"> <input name="password" type="password"> <input type="submit" value="submit" name="submit"> </form>
グローバル変数が有効になっている場合、サーバー側の PHP スクリプトは $username と $password を使用してユーザー名とパスワードを取得できます。これにより、スクリプト インジェクションの大きな危険が生じます。
これを有効にする方法は、php.ini で次のように変更することです:register_globals=On
パラメータは次のとおりです:
オフにすると、関連するパラメータは $_POST、$ からのみ取得できます。 _GET、$_REQUEST。
4. ファイル システムの制限
open_basedir を使用して、PHP がアクセスできるシステム ディレクトリを制限できます。
以下のスクリプトコード(hack.php)を制限なく使用すると、システムパスワードを取得できます。
<?php echo file_get_contents('/etc/passwd');
設定すると、エラーが報告され、関連情報が表示されなくなり、システム ディレクトリ b が不正にアクセスされなくなります:
PHP Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3 Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3 PHP Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3 Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
設定
open_basedir=/var/www
5. リモートリソースへのアクセスを禁止します。
allow_url_fopen=Off
allow_url_include=Off
Suhosin は、PHP プログラムの保護システムです。これはもともと、PHP プログラムと PHP コアの既知または未知の欠陥からサーバーとユーザーを保護するために設計されました (非常に実用的で、いくつかの軽微な攻撃に耐えることができます)。スホシンには 2 つの独立したパーツがあり、別々に使用することも、組み合わせて使用することもできます。
最初の部分は、バッファ オーバーフローやフォーマット文字列の弱点に対処できる PHP コア用のパッチです (これは必須です!);
2 番目の部分は、強力な PHP 拡張機能 (拡張機能) です。モードは非常に優れており、インストールが簡単です...)、他のすべての保護手段を含みます。
拡張機能のインストール
wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gz tar zxvf suhosin-0.9.37.1.tar.gz cd suhosin-0.9.37.1/ phpize ./configure --with-php-config=/usr/local/bin/php-config make make install 在php.ini下加入suhosin.so即可 extension=suhosin.so
機能
●エミュレータ保護モード
# 2 つの関数 sha256() と sha256_file( ) を追加します。 PHP コア
# すべてのプラットフォーム、CRYPT_BLOWFISH を関数 crypt() に追加します
# phpinfo() ページの透過的保護をオンにします
## SQL データベース ユーザー保護 (テスト段階) #実行時保護#● 暗号化された cookie● さまざまなタイプの組み込み脆弱性を防止 (リモート URL の組み込みは許可されていません (ハッキング/ホワイトリスト) ); アップロードされたファイルを含めることを許可しません; ディレクトリ トラバーサル攻撃を防ぎます)
# preg_replace() の禁止を許可します # eval() 関数の禁止を許可します #パス 無限再帰を防ぐために最大実行深度を構成します##● ブラック リストとホワイト リストを構成する各仮想ホストをサポートします
## コード実行用に個別の関数のブラック リストとホワイト リストを提供します## HTTP 応答の分割の脆弱性を防止します。
#● スクリプトによるmemory_limit オプションの制御を防止します。#● 関数 extract()、import_request_vars() などの PHP スーパーグローバルを保護します。
● 新しい脆弱性を防止します。 mail() 関数 Line 攻撃
##● preg_replace() 攻撃の防止#セッション保護● セッション データの暗号化##● 防止セッションがハイジャックされるのを防ぐ
##● 長すぎるセッション ID を防止する##● 悪意のあるセッション ID を防止する
##SESSION 内のデータは、通常、サーバー上にクリア テキストで保存されます。ここで、$_SESSION はサーバー側で暗号化および復号されます。このようにして、セッション ハンドルが Memcache またはデータベースに保存されると、簡単には壊れなくなります。多くの場合、セッション データには機密フィールドが保存されます。 この機能はデフォルトで有効になっており、php.ini を通じて変更することもできます。suhosin.session.encrypt = On suhosin.session.cryptkey = zuHywawAthLavJohyRilvyecyondOdjo suhosin.session.cryptua = On suhosin.session.cryptdocroot = On ;; IPv4 only suhosin.session.cryptraddr = 0 suhosin.session.checkraddr = 0
Cookie Encryption
クライアントのブラウザの Cookie によって送信される HTTP ヘッダーもクリア テキストです。 Cookie を暗号化することで、Cookie 改ざんなどのさまざまな攻撃からアプリケーションを保護できます。攻撃者は、他の妥当な Cookie 値を推測してプログラムを攻撃しようとする可能性があります。 アプリケーション全体での Cookie の使用: 不適切に構成されたアプリケーションは、同じセッション ストレージを持つ可能性があります。たとえば、デフォルトでは、すべてのセッションが /tmp ディレクトリに保存されます。あるアプリケーションからの Cookie は、別のアプリケーションで再利用されることはありません。暗号化キーが異なる限り。 php.ini での Cookie 暗号化設定:
suhosin.cookie.encrypt = On ;; the cryptkey should be generated, e.g. with 'apg -m 32' suhosin.cookie.cryptkey = oykBicmyitApmireipsacsumhylWaps1 suhosin.cookie.cryptua = On suhosin.cookie.cryptdocroot = On ;; whitelist/blacklist (use only one) ;suhosin.cookie.cryptlist = WALLET,IDEAS suhosin.cookie.plainlist = LANGUAGE ;; IPv4 only suhosin.cookie.cryptraddr = 0 suhosin.cookie.checkraddr = 0 Blocking Functions 测试 ##默认PHP的Session保存在tmp路径下 ll -rt /tmp | grep sess ##扩展未开启时查看某条sesson的数据 cat sess_ururh83qvkkhv0n51lg17r4aj6 //记录是明文的 ##扩展开启后查看某条sesson 的数据 cat sess_ukkiiiheedupem8k4hheo0b0v4 //记录是密文的 可见加密对安全的重要性
##显式指定指定白名单列表 suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode <?php echo htmlentities('<test>'); eval('echo htmlentities("<test>");');
##显式指定指定黑名单列表 suhosin.executor.func.blacklist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand suhosin.executor.eval.whitelist = assert,unserialize,exec,popen,proc_open,passthru,shell_exec,system,hail,parse_str,mt_srand 通过日志来查看非法调用黑白名单 suhosin.simulation = 1 suhosin.log.file = 511 suhosin.log.file.name = /tmp/suhosin-alert.log
suhosin.executor.include.max_traversal 扩目录的最大深度,可以屏蔽切换到非法路径 suhosin.executor.include.whitelist 允许包含的URL,用逗号分隔 suhosin.executor.include.blacklist 禁止包含的URL,用逗号分隔 suhosin.executor.disable_eval = On 禁用eval函数 suhosin.upload.max_uploads suhosin.upload.disallow_elf suhosin.upload.disallow_binary suhosin.upload.remove_binary suhosin.upload.verification_script 上传文件检查脚本,可以来检测上传的内容是否包含webshell特征
使用Suhosin,你可以得到一些错误日志,你能把这些日志放到系统日志中,也可以同时写到其他任意的日志文件中去;
它还可以为每一个虚拟主机创建黑名单和白名单;
可以过滤GET和POST请求、文件上载和cookie;
你还能传送加密的会话和cookie,可以设置不能传送的存储上线等等;
它不像原始的PHP强化补丁,Suhosin是可以被像Zend Optimizer这样的第三方扩展软件所兼容的。
更多相关php知识,请访问php教程!
以上がPHP のいくつかのセキュリティ設定 (最適化)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。