ファイルアップロードの脆弱性 - アップロード射撃場 3 ~ 4 のクリアランスノート (ネットワーク全体における最も詳細な解釈)
第 3 レベル (特別なサフィックス) をアップロードします
アイデア
ソースコード分析
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
ソースコード関数関数
- isset(): 変数が設定されているかどうか、null ではないかどうかを確認します。
- file_exists(): ファイルまたはディレクトリが存在するかどうかを確認します。
- trim(): 文字列の両端のスペースを削除します。
- $_FILES: アップロードされたファイル情報を含むグローバル変数。
- strrchr(): 文字列内の指定された文字 (または部分文字列) の最後の出現とその後のすべての文字を返します。
- strto lower(): 文字列を小文字に変換します。
- str_ireplace(): 置換文字列内の部分文字列の大文字と小文字を無視します。
- in_array(): 指定された値が配列内に存在するかどうかを確認します。
- move_uploaded_file(): アップロードされたファイルを新しい場所に移動します。
このソース コードのワークフローは次のとおりです。
- ユーザーがフォームの「送信」ボタンを通じて POST リクエストを送信すると、コードによってファイル アップロード ロジックが実行されます。
- まず、アップロードディレクトリが存在するかどうかを確認します。存在する場合は実行を続行します。存在しない場合はエラー メッセージが返されます。
- アップロードを拒否されるファイル拡張子の配列が定義されており
$deny_ext
、一般的な危険なファイル拡張子 (.asp、.aspx、.php、.jsp) が含まれています。 - アップロードされたファイルの名前をフォームから取得し、ファイル名の末尾のドットを削除するなどの処理を行います。
- この関数を使用して
strrchr
、ファイル名の拡張子を取得し、小文字に変換します。 - 関数を使用して
str_ireplace
、ファイル名から文字列「::$DATA」を削除します。 - この関数を使用して
trim
、ファイル拡張子から先頭と末尾のスペースを削除します。 - 処理されたファイル拡張子が拒否されたアップロードのブラックリスト配列に含まれているかどうかを確認します。ブラックリストに存在しない場合は、次のステップに進みます。
- アップロードされたファイルの一時パスを取得し、タイムスタンプと乱数に基づいて新しいファイル名を生成します。
move_uploaded_file
この関数を使用して、一時ファイルを指定されたアップロード ディレクトリに移動し、$is_upload
フラグを true に設定します。- ファイルの移動が失敗すると、エラー メッセージが返されます。
- 最後に、ファイル拡張子がアップロードを拒否するブラックリスト配列に含まれている場合は、対応するエラー メッセージが返されます。
ブラックリストとホワイトリストの概要
ブラックリストの検証
ソースコードからバックエンドのブラックリスト検証であることが分かりましたが、ブラックリストとは何でしょうか?
いわゆるブラックリストは差分セットです。これは何を意味しますか? 人生における小さな例で説明しましょう:
あなたが会社の管理者で、従業員のブラックリストを持っていると仮定します。このブラックリストには、手に負えない、会社の方針に反する、またはその他の理由で不人気であるとみなされる従業員がリストされます。これらの従業員が特定の会社リソースにアクセスしたり、特定の会社イベントに参加しようとすると、ブロックまたは拒否されます。
つまり、このリストに名前がある限り正常にアップロードすることはできませんが、ブラックリストは検証が緩いので、自分のファイルやファイル名がこのブラックリストに含まれていない限り、正常にアップロードすることができます。 , ブラックリスト リストの検証には誤判断のリスクも伴います。管理者は、不完全な構成や経験不足により、望ましくない入力を見逃したり、一部の正当なデータを誤ってブラックリストに登録したりして、正当なユーザーが誤ってアクセスや操作を拒否される可能性があります。
ホワイトリストの検証
ブラックリストがあり、当然ホワイトリストもあります。ホワイトリストはブラックリストの逆です。ブラックリストはリストに載っている人のアクセスを拒否します。すると、ホワイトリストはリストに載っている人だけがアクセスできることを意味します。恋人のホワイトリストだけなら一人でいると、彼女以外の誰も私の心に入ることができなくなります。
ホワイトリストは、特定のものだけを通過させ、それ以外はすべて拒否する制限およびフィルタリングのメカニズムです。許容可能なオプションまたはコンテンツを指定し、他のすべてのオプションを除外します。ホワイトリストを使用すると、明確に定義されたエンティティ、操作、またはデータのみが認証され、特定のリソースまたはシステムにアクセスできることになります。
対照的に、ブラックリストは、特定のオプションやコンテンツを除外する禁止事項のリストです。これは、既知の受け入れられないオプションから特定のエンティティ、操作、またはデータを削除することです。ただし、ブラックリストに登録することの欠点は、未知のオプションや新たに受け入れられないオプションが見逃される可能性があり、セキュリティにリスクをもたらす可能性があることです。
ホワイトリスト メカニズムを使用すると、潜在的なセキュリティの脆弱性や攻撃を防ぐことができます。ホワイトリストでは、既知で信頼できる、明確に定義されたエンティティまたはアクションのみが認証と認可を通過できるようにすることで、より高いレベルのセキュリティと制御を提供できます。これにより、未知の入力または予期しない入力によって引き起こされるセキュリティ上の問題が防止され、攻撃者がシステムを悪用する可能性が低減されます。
攻撃のアイデア
ブラックリストの原理がわかったので、次は攻撃方法を分析する必要がありますが、Apache ミドルウェアで php を解析できるサフィックスは .php だけではありません。.php サフィックスは、デフォルトでは Apache によってのみ使用されます。次のような、PHP ファイルを解析できるサフィックスも多数あります。
-
.php3
: PHP の以前のバージョンでは、.php3
PHP スクリプトの接尾辞として使用されます。現在ではあまり一般的ではありませんが、一部のサーバーは依然としてこのサフィックスをサポートしています。(php5.3.0 以降、.php3
サフィックス解析はデフォルトで無効になっています) -
.php4
:.php3
と同様、.php4
一部のサーバーでは以前のバージョンの PHP スクリプトのサフィックスとしても使用されます。現在ではあまり使用されていませんが、一部のサーバーではまだサポートされています。(.php3
php5.3.0以降も同様にデフォルトで無効になっています) -
.php5
:.php5
は、PHP 5 のバージョンを示すために使用される接尾辞です。一部のサーバーは、このサフィックスを使用して PHP 5 コードを解析します。(引き続き使用できますが、設定ファイルで無効にされているかどうかにも依存します) -
.phtml
:.phtml
ファイルは基本的に PHP コードと HTML マークアップを組み合わせたものです。このファイル拡張子を使用すると、開発者は同じファイル内で PHP コードを記述して実行し、結果を HTML ページに直接埋め込むことができます。 -
多くのサフィックスがありますが、要約すると、php ファイルを正常に解析するには、それらはすべて Apache によって設定される必要があります。
Apache の拡張知識:
Apache 設定ファイル (httpd.conf) には、AddType application/x-httpd-php フィールドがあります。
このフィールドの後にサフィックスを追加する限り、php ファイルを正常に解析できます。たとえば、
.abcd
ここにサフィックスを追加しました。Apache サービスを再起動すると、php ファイルを正常に解析できます。
Apache による PHP ファイル拡張子の解析に関する知識を理解した後、burpsuite の Intruder モジュールを使用してサフィックス名のブラスティング トラバーサルを実行できます。
サフィックス php が付いたファイルをアップロードし、burpsuite を使用してパケットをキャプチャします
爆破のためにそれをイントルーダーモジュールに送信します。
Intruder モジュールでは、スナイパー モードを使用し、ブルート フォース列挙のためにペイロード変数に php サフィックスを追加します。
これは、私が収集した、より一般的に使用される PHP 解析名であり、列挙のペイロードとして使用します。
バイト長 4007 の 12 個のパッケージはすべてアップロードに失敗しました。名前のどの文字を大文字に変更しても検証に失敗しました。これは機能の影響によるものです。サーバーにアップロードされるファイル名はすべて自動的に変更されstrtolower()
ますアップロードに失敗したこれら 12 個のファイルを除いて、他のファイルは正常にアップロードされましたが、php ファイルに正常に解析できるかどうかは、Addtype application/x-httpd-php がこのサフィックス名を追加するかどうかによって決まります。 apache の設定はすでにわかっており、phtml は解析可能なリストに含まれているため、正常に解析できるかどうかを確認してみます。
応答ファイルからこれを見つけるためのパスは、upload/202308291518502062.phtml です。
解析は成功しました。このレベルでは、php ファイルのサフィックス名解析の原理を理解しました。これが、ファイルをアップロードする一般的な考え方です。以降のテストも、考え方をさらに拡張するための基礎として、これらに基づいて行われます。
第 4 レベルのアップロード (.htaccess ファイルの解析)
アイデア
第 4 レベルは、第 3 レベルをさらに拡張したもので、たとえば、ユーザーが AddType application/x-httpd-php に厳しい制限を設けている場合、php ファイルを解析するためのカスタム サフィックスを記述するだけで済みますが、他のファイルは解析できません。その後、.htaccess ファイルの解析を使用してユーザー制限を回避できます。
ソースコードを分析する
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
このソース コード文字列は、第 3 レベルのソース コードに似ており、ブラックリスト検証でもありますが、一般的に使用されるほぼすべてのサフィックスを含む、ファイル名に関してより多くの制限があります。ただし、ここでは .htaccess ファイルのアップロードは制限されていないため、.htaccess ファイルを介してバイパスできます。
.htaccess ファイルの説明
-
.htaccess
ファイルは、Apache サーバー上で Web サイトを構成するために使用される分散構成ファイルです。これにより、サーバーのメイン構成ファイルを変更せずに、特定のディレクトリに特定の構成ルールを設定できます。 -
.htaccess
ファイルは通常、URL 書き換え、リダイレクト、アクセス制御、カスタム エラー ページ、およびその他の関連構成ルールを実装するために使用されます。特定のディレクティブを追加して、特定の Web サイトのニーズを実装することで、デフォルトのサーバー構成をオーバーライドまたは補足できます。 -
.htaccess
ファイルは、Web サイトのルート ディレクトリおよびサブディレクトリのどこにでも配置できます。そのスコープは、それが置かれているディレクトリとそのサブディレクトリによって異なります。-
ファイルがディレクトリに存在する場合
.htaccess
、Apache はファイル内の構成ルールを自動的に読み取り、適用します。これは、Web サイトのルート ディレクトリと他のサブディレクトリに、異なるディレクトリに固有の構成を使用して、異なるファイルを作成できることを意味します.htaccess
。 -
.htaccess
ファイルのスコープは、ファイルが存在するディレクトリとそのすべてのサブディレクトリです。ファイルが上位のディレクトリに存在する場合は.htaccess
、下位のディレクトリの設定が上書きされます.htaccess
。 -
ルート ディレクトリ内のファイルに
.htaccess
特定の構成ルールがないが、Web サイトのファイル ディレクトリ内のファイルに構成ルールがある場合は、Web サイトのファイル ディレクトリ内のファイルの構成.htaccess
が実行されます。.htaccess
-
.htaccess 構成プロセスのオンとオフを切り替える
Apache で
.htaccess
オーバーライドが有効になっていることを確認します。メインの Apache 構成ファイル ( config などhttpd.conf
)で<Directory>
セクションを見つけ、ファイルの構成ルールが有効になるようにAllowOverride
ディレクティブが に設定されていることAll
(または対応するオーバーライド レベル) を確認します。.htaccess
ファイルの作成
.htaccess
: 構成ルールを適用するディレクトリに新しいテキスト ファイルを作成し、名前を付けます (.htaccess
ファイル名は.
で始まるため、ファイル名の前にファイル名プレフィックスがないことに注意してください)。ファイルを編集する
.htaccess
: テキスト エディタでファイルを開き.htaccess
、適用する構成ルールを追加します。Web サイトの動作は、利用可能なさまざまなディレクティブとオプションを使用して制御およびカスタマイズできます。ファイルを保存
.htaccess
: 変更を保存し、.htaccess
ファイルを Web サイトのディレクトリにアップロードして有効にします。このディレクトリとそのサブディレクトリ内のファイルを無効にする
AllowOverride
ディレクティブを設定します。None
.htaccess
.htaccess の構成可能な基本パラメータ
.htaccess
ファイルを使用してさまざまなパラメータとルールを構成し、Apache サーバーの動作をカスタマイズおよび制御できます。一般的な構成パラメータの例をいくつか示します。
URL 書き換えルール:
RewriteRule
ディレクティブを使用してカスタム URL 書き換えルールを定義し、複雑な URL パスをよりわかりやすく読みやすい形式に変換します。
簡単な例:
- 単純なパスの書き換え:
RewriteEngine On RewriteRule ^about$ about-us.html [L]
上記のルールにより、
/about
ページがリダイレクトされabout-us.html
、訪問者が About ページにアクセスしやすくなります。
- パラメータによるオーバーライド:
RewriteEngine On RewriteRule ^products/([0-9]+)$ product.php?id=$1 [L]
上記のルールは、バックエンドが特定の製品に対するリクエストを処理できるように、URL をよりフレンドリーに
/products/123
書き換えます。product.php?id=123
- 他のドメイン名またはページにリダイレクトします。
RewriteEngine On RewriteRule ^old-page$ http://www.example.com/new-page [R=301,L]
上記のルールは、からの
/old-page
リクエストをリダイレクトしhttp://www.example.com/new-page
、永続的にリダイレクトされたステータス コード 301 を返します。これは、Web サイトを更新するときに古いリンクを利用可能な状態に保つために使用できます。アクセス制御:
Require
またはOrder
ディレクティブを使用して、特定のディレクトリ、ファイル、または IP アドレスへのアクセスを制限します。IPアドレスやユーザー認証などによるアクセス制御が可能です。
簡単な例:
- IPアドレスベースのアクセス制御:
Order deny,allow Deny from 192.168.0.1 Allow from 10.0.0.0/24
上記のルールは、特定の IP アドレスのアクセス制御を指定します。IP アドレスの場合は
192.168.0.1
アクセスが拒否され、IP アドレスの範囲の場合は10.0.0.0/24
アクセスが許可されます。必要に応じて、許可または拒否される IP アドレスまたは範囲を追加/変更できます。
- ユーザー認証に基づくアクセス制御:
AuthType Basic AuthName "Restricted Area" AuthUserFile /path/to/.htpasswd Require valid-user
上記のルールは基本的なユーザー認証を実装します。制限されたエリアにアクセスするには、ユーザーが有効な資格情報を提供する必要があります。ユーザーの認証情報は通常、ファイルに保存されます
.htpasswd
。htpasswd
ツールを使用してこのファイルを作成および管理できます。
- ファイルの種類によるアクセス制御:
<Files "sensitive-file.php"> Order allow,deny Deny from all </Files>
カスタム エラー ページ:
ErrorDocument
ディレクティブを介してカスタム エラー ページを定義し、特定のエラーが発生したときにカスタマイズされたエラー メッセージを表示できます。
簡単な例
- 404 エラー ページを定義します。
ErrorDocument 404 /errors/not-found.html
上記のルールは、404 エラー (ファイルが見つかりません) が発生したときにページを表示することを指定します
/errors/not-found.html
。
- 500 エラー ページを定義します。
ErrorDocument 500 /errors/server-error.html
上記のルールは、500 エラー (内部サーバー エラー) が発生したときにページを表示することを指定します
/errors/server-error.html
。圧縮とキャッシュ制御:
mod_deflate
およびmod_expires
モジュールのディレクティブを使用して、HTTP 圧縮とキャッシュ制御を有効にして構成し、Web サイトのパフォーマンスを向上させることができます。
簡単な例
- テキスト ファイルの圧縮を有効にします。
<IfModule mod_deflate.c> # Enable compression AddOutputFilterByType DEFLATE text/html text/plain text/xml # Set compression level (optional) DeflateCompressionLevel 6 </IfModule>
上記のルールにより、HTML、プレーン テキスト、XML などのテキスト ファイルの圧縮が可能になります。
AddOutputFilterByType
ディレクティブを使用して、指定された MIME タイプのファイルを圧縮します。必要に応じて、他の MIME タイプを追加できます。
- キャッシュ制御を有効にする:
<IfModule mod_expires.c> # Enable expiration headers ExpiresActive On # Cache control for different file types ExpiresByType text/html "access plus 1 week" ExpiresByType image/png "access plus 1 month" </IfModule>
MIME タイプ設定:
AddType
およびAddHandler
ディレクティブを使用して、特定の MIME タイプとファイル拡張子を関連付けます。
簡単な例
- テキスト ファイルの MIME タイプを設定します。
AddType text/plain .txt AddType text/html .html .htm
上記のルールは、ファイル拡張子を
.txt
MIME タイプtext/plain
とファイル拡張子.html
、および.htm
MIME タイプに関連付けますtext/html
。これにより、これらのファイル タイプを正しく処理する方法がサーバーに指示されます。
- 画像ファイルの MIME タイプを設定します。
AddType application/x-httpd-php .php
上記のルールは、ファイル拡張子を
.php
MIME タイプに関連付けますapplication/x-httpd-php
。これにより、サーバーは PHP パーサーを使用して.php
この拡張子を持つファイルを処理するように指示されます。
- スクリプト ファイルのハンドラーを設定します。
AddHandler php-script .php
上記のルールは、ファイル拡張子を
.php
PHP ハンドラーに関連付けます。これにより、拡張子を持つファイルの.php
スクリプトを処理および実行するために PHP パーサーを使用するようにサーバーに指示されます。Force HTTPS:
RewriteCond
およびRewriteRule
ディレクティブを使用して、Web サイトまたは特定のページの HTTPS リダイレクトを強制します。
簡単な例:
- Web サイト全体で HTTPS を使用するように強制します。
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
https://
上記のルールは、接続が HTTP (つまり HTTPS ではない) かどうかを確認し、そうであれば、先頭に301が付加された同じ URL にリダイレクトします(永続的なリダイレクト)。
- 特定のページに HTTPS の使用を強制するには:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(secure-page\.html)$ https://%{HTTP_HOST}/$1 [L,R=301]
上記のルールは、
secure-page.html
URL に含まれるページのみをリダイレクトします。接続が HTTPS 以外の場合は、同じページの HTTPS バージョンにリダイレクトします。ディレクトリ インデックス:
Options
ディレクティブを使用して、リスト インデックスを Web サイトのディレクトリに表示するかどうかを制御します。
簡単な例:
- ディレクトリのインデックス作成を無効にします。
Options -Indexes
上記のルールによりディレクトリのインデックス作成が無効になるため、特定のファイルを指定せずにディレクトリにアクセスした場合、サーバーはディレクトリ内のファイルのリストを表示しません。
- ディレクトリのインデックス作成を有効にします。
Options +Indexes
上記のルールにより、ディレクトリのインデックス作成が有効になります。デフォルトでは、特定のファイルを指定せずにディレクトリにアクセスすると、サーバーはそのディレクトリ内のファイルのリストを表示します。
これらは一般的な使用例のほんの一部です。.htaccess
ファイルには幅広い機能があり、Apache サーバーのほぼすべての側面をカスタマイズおよび制御できます。.htaccess
ファイルは強力な構成機能を提供し、Apache サーバーにさまざまなカスタマイズを行うことができます。適切な使用法と設定.htaccess
ファイルを使用すれば、Apache を制御してほぼすべてのことを行うことができます。
攻撃のアイデア
上で述べたように、.htaccess ファイルは非常に強力な構成ファイルです。ファイルのアップロードに使用すると、単純に過剰になります。次のような潜在的なセキュリティ リスクが考えられます。
- リダイレクト攻撃: ハッカーはリダイレクト ルールを変更して、正規のユーザーを悪意のあるサイトにリダイレクトしてフィッシング攻撃を行ったり、マルウェアを配布したりする可能性があります。
- ディレクトリ トラバーサル攻撃: ハッカーは
.htaccess
ファイルを使用してサーバー構成をバイパスし、ディレクトリ トラバーサル攻撃を実行し、ファイルやディレクトリへの不正アクセスを取得する可能性があります。 - 認証の脆弱性: ハッカーは認証ルールを変更してユーザー認証をバイパスしたり、アクセス制御を弱めたりして、制限されたリソースへの不正アクセスを取得する可能性があります。
- 悪意のある書き換えルール: ハッカーは悪意のある URL 書き換えルールを追加して、ワーム、インジェクション攻撃、その他の悪意のあるアクティビティを実行するためにリクエストを悪意のあるコードにリダイレクトする可能性があります。
- PHP 解析: ハッカーは解析サフィックスを変更して悪意のある WebShell トロイの木馬ファイルを実行する可能性があります
これがどれほど強力であるかを理解したので.htaccess
、引き続き 4 番目のレベルに合格する方法を試してみましょう。4 番目のレベルでは、制限なしでアップロードできます。新しいファイル.htaccess
を作成できます。.htaccess
これは、.aaaa
サフィックスが付いているファイルはブラウザで php ファイルとして解析できることを意味します。
.aaaa
サフィックスが付いたWebshell トロイの木馬のアップロード
すべて正常にアップロードされました。.aaaa
拡張子が付いているファイルが正常に解析できるかどうかを確認してみましょう。
OKは正常に解析されました。phpinfo() 関数を実行できるということは、他の PHP コードも実行できることを意味します。
要約する
- ブラックリストは禁止または許可されないもののリストですが、ホワイトリストはブラックリストの逆で、許可または許可されるもののリストです。ブラックリストは通常、既知の悪意のある動作を傍受またはブロックするために使用されますが、ホワイトリストは特定の合法的な動作のみを許可するために使用されます。
- Apache の httpd.conf ファイルで addType application/x-htppd-php を設定することにより、設定に追加されたサフィックスが Web ページによって php ファイルに解析できる限り、サーバーはこれらのファイルを PHP スクリプトとして扱うことができます。どの PHP コードを実行するか。
- Apache の .htaccess ファイルは非常に強力なファイルです。攻撃者が .htaccess ファイルをサーバーにアップロードすると、非常に深刻な結果が生じます。.htaccess ファイルを使用する場合は、アクセス許可の設定に注意して、次のことを確認する必要があります。ファイルは読み取り可能、書き込み可能、および実行可能です。さらに、構成ミスやセキュリティの脆弱性を防ぐために、ルールを慎重に構成する必要があります。.htaccess ファイルを定期的に確認および監視し、問題をタイムリーに修正して、Web サイトのセキュリティと安定性を確保します。