nginx+php(fpm-php fastcgi)open_basedir セキュリティ設定
実験の目的
「open_basedir リストディレクトリをバイパスする PHP の研究」の記事に従って、この記事の basedir をバイパスする方法が効果的であるかどうかを、さまざまな構成をテストすることで検証し、それによって PHP の open_basedir を安全に設定することができます。記事はすべてwindwosです Linuxでは、総当たりの推測が必要なため、テストは行われません
「DirectoryIterator + Glob」メソッドがopen_basedirをバイパスできるかどうかをテストします
実験環境
nginx + PHP 5.6.7 fastcgi モード、centos7 linux
以下で 1 つずつテストします
テストの詳細
でのみphp-fpm .conf の設定
php_admin_value[open_basedir]=/home/wwwroot/:/proc/:/tmp/
結果
Open_basedir はディレクトリ外で読み書きできないが、DirectoryIterator + Glob はすべてのファイルを正常にリストできる
open_basedir : /home/wwwroot/:/proc/:/tmp/ -- DirectoryIterator + Glob --. .. .autorelabel bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr vagrant var
包丁は basedir から出られない
fastcgi_param でのみ設定nginx
# set php open_basedir fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
ここで、「$document_root」は nginx の変数であり、nginx の各サーバーのルート ディレクトリです
たとえば、サーバー www.iamle.com に設定されたルート ディレクトリは /home/wwwroot/www.iamle です。 com
PHP マニュアルをよく読んでください 次の段落があります
php.ini で定義された disable_functions または disable_classes の値は上書きされませんが、新しい設定が元の値に追加されることに注意してください。 php_admin_value または php_admin_flag を使用して定義された値は、PHP コードの ini_set() によってオーバーライドできません。 5.3.3 以降、PHP 設定は Web サーバー経由でも設定できるようになりました。つまり、php を設定するための niignx の fastcgi_param の設定は、on、off、1、0、true、false、yes、no などのブール値を具体的に設定するために使用され、php_value はすべてのタイプの値を設定するために使用されます。結果は上記と同じです open_basedir のディレクトリ 読み取りも書き込みもできませんが、DirectoryIterator + Glob ですべてのファイルを正常に一覧表示できます
包丁は basedir から抜け出すことができません
これは、HOST=www.iamle.com のときに open_basedir を設定し、PATH =/home/wwwroot/www.iamle.com/
に open_basedir を設定することを意味します。テストしたところ、2 つの設定のいずれも有効でした結果は同上
Open_basedirはディレクトリ外では読み書きできないが、DirectoryIterator + GlobでPHPサーバー上のすべてのファイルを一覧表示できる
basedirを包丁が横切ることはできない
個人的な結論
DirectoryIterator + Globですべてを一覧表示できるPHP サーバー上のファイルは無害に見えますが、実際には長期的な APT には間違いなく役立ちます
open_basedir は想像されているほど安全ではありません、おそらく他の誰かが open_basedir を読み書きできる 0day を持っているでしょう
個人的には。 nginx + php (fastcgi fpm-php) (lnmp) open_basedir の設定
3 つのアプローチを使用、母はもう私の php open_basedir について心配する必要はありません (そう願っています)
非常に冗長ですが、もっと安心ではないでしょうか
簡単に言うと、結果は以下の通りです、私は次のような面倒な設定です
[HOST=www.iamle.com]open_basedir=/home/wwwroot/www.iamle.com/:/proc/:/tmp/[PATH=/home/wwwroot/www.iamle.com/]open_basedir=/home/wwwroot/www.iamle.com/:/proc/:/tmp/
テスト中に、これら 3 つの場所の設定の優先順位は次のとおりであることも判明しました
"php.ini" > "nginx fastcgi fastcgi_param" > "php-fpm.conf"

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

Phpoopでは、self ::は現在のクラスを指し、親::は親クラスを指し、静的::は後期静的結合に使用されます。 1.Self ::静的方法と一定の呼び出しに使用されますが、後期静的結合をサポートしていません。 2.Parent ::サブクラスには、親クラスのメソッドを呼び出すために使用され、プライベートメソッドにアクセスできません。 3.Static ::継承と多型に適した後期静的結合をサポートしますが、コードの読みやすさに影響を与える可能性があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。
