PHP のいくつかのセキュリティ設定 (最適化)

藏色散人
リリース: 2023-04-08 11:16:02
転載
3774 人が閲覧しました

PHP のいくつかのセキュリティ設定 (最適化)

スクリプト言語と初期バージョンの設計に起因するさまざまな理由により、PHP プロジェクトには多くのセキュリティ リスクが存在します。構成オプションから、次の最適化を行うことができます。

1. PHP エラー出力をシールドします。

#/etc/php.ini (デフォルトの設定ファイルの場所) で、次の設定値を Off

display_errors=Off## に変更します。 #ハッカーによる関連情報の利用を防ぐため、エラー スタック情報を Web ページに直接出力しないでください。

正しいアプローチは次のとおりです:

トラブルシューティングを容易にするために、エラー ログをログ ファイルに書き込みます。

2. PHP バージョンをブロックします。

デフォルトでは、PHP バージョンは次のような戻りヘッダーに表示されます。

Response Headers X-powered-by: PHP/7.2.0

php.ini の次の設定値を Off

expose_php=Off

3 に変更します。グローバル変数を閉じます。

グローバル変数が有効になっている場合、フォームから送信された一部のデータは自動的にグローバル変数として登録されます。コードは次のとおりです。

<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

パラメータは次のとおりです:

register_globals=Off

オフにすると、関連するパラメータは $_POST、$ からのみ取得できます。 _GET、$_REQUEST。

4. ファイル システムの制限

open_basedir を使用して、PHP がアクセスできるシステム ディレクトリを制限できます。

以下のスクリプトコード(hack.php)を制限なく使用すると、システムパスワードを取得できます。

<?php
echo file_get_contents(&#39;/etc/passwd&#39;);
ログイン後にコピー

設定すると、エラーが報告され、関連情報が表示されなくなり、システム ディレクトリ 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
ログイン後にコピー
その他のサードパーティ製セキュリティ拡張機能

6.Suhosin。

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 &#39;apg -m 32&#39;
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
//记录是密文的
可见加密对安全的重要性
ログイン後にコピー

ブロッキング機能

Whitelist

##显式指定指定白名单列表
suhosin.executor.func.whitelist = htmlentities,htmlspecialchars,base64_encode
suhosin.executor.eval.whitelist = htmlentities,htmlspecialchars,base64_encode
<?php
echo htmlentities(&#39;<test>&#39;);
eval(&#39;echo htmlentities("<test>");&#39;);
ログイン後にコピー

Blacklist

##显式指定指定黑名单列表
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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート