おすすめ: 「PHP ビデオ チュートリアル 」
##こんにちは、PHP 開発者。この記事では、PHP アプリケーションのセキュリティを向上させるために実行できる具体的な手順をいくつか紹介します。ここでは PHP 構成自体に焦点を当てているため、SQL インジェクション、HTTPS、またはその他の PHP 関連以外の問題については説明しません。docker-entrypoint.shスクリプトの bash 行を使用して例を説明しますが、もちろん、これを Docker 以外の環境に適用することもできます。
セッション
セッション ID の長さを長くする
セッション ID の長さを長くすると、攻撃者が推測しにくくなります。 (ブルートフォース攻撃、またはおそらくサイドチャネル攻撃による)。長さは 22 ~ 256 文字にすることができます。デフォルト値は 32 です。sed -i -e "s/session.sid_length = 26/session.sid_length = 42/" /etc/php7/php.ini(なぜ Alpine Linux では 26 なのかは聞かないでください...)session.sid_bits_per_character も確認してください。
アクセス許可が制限されたカスタム セッション保存パスを使用する
セッションにアクセスする必要があるのは nginx/php のみなので、アクセス許可が制限された特別なセッション フォルダーにそれらを配置しましょう。sed -i -e "s:;session.save_path = \"/tmp\":session.save_path = \"/sessions\":" /etc/php7/php.ini mkdir -p /sessions chown nginx:nginx /sessions chmod 700 /sessionsもちろん、Redis を使用してセッションを処理する場合は、この部分を気にする必要はありません;)
セキュア セッション Cookie
#session .cookie_httponly を使用して、JavaScript がアクセスできないようにします。 ###詳しくは###。 sed -i -e "s/session.cookie_httponly.*/session.cookie_httponly = true/" /etc/php7/php.ini
sed -i -e "s/;session.cookie_secure.*/session.cookie_secure = true/" /etc/php7/php.ini
session.cookie_secure Cookie がクリア テキスト HTTP 経由で送信されるのを防ぎます。
session.cookie_samesite を使用して、クロスサイト攻撃を防ぎます。最新の PHP/ブラウザでのみ動作します。
Cookie の仕様により、攻撃者は Cookie データベースをローカルに設定するか、JavaScript インジェクションを介して、削除不可能なセッション ID Cookie を配置することができます。 。 session.use_strict_mode 攻撃者が開始したセッション ID の使用を防止します。
セッションはブラウザで閉じる必要があります。したがって、session.cookie_lifetime を 0 に設定します。
open_basedir は、PHP が実行するファイル/ディレクトリを制限できる php.ini
構成オプションです。にアクセスできます。sed -i -e "s#;open_basedir =#open_basedir = /elabftw/:/tmp/:/usr/bin/unzip#" /etc/php7/php.iniここでは、Composer で使用される unzip を追加しました。 /elabftw
は、すべてのソース php ファイルが配置される場所です。なぜ
/tmp がここにあるのかは覚えていませんが、何か理由があるはずです。 機能を無効にする
shell_exec も無効になり、同様に無効になるため、Web シェルは実際には機能しません。 elabftw で機能するリストを提供しましたが、100% 完全ではありません。
sed -i -e "s/disable_functions =/disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abort, shell_exec, dl, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, phpinfo/" /etc/php7/php.ini
url_fopen を無効にする
allow_url_fopen このオプションは非常に危険です。無効にしてください。詳細についてはこちら
をご覧ください。sed -i -e "s/allow_url_fopen = On/allow_url_fopen = Off/" /etc/php7/php.inicgi.fix_pathinfo を無効にするPHP 以外のファイルを PHP ファイルとして実行したくないですよね?次に、この機能を無効にします。 ###詳しくは###。
sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php7/php.iniPHP バージョンを非表示にする
sed -i -e "s/expose_php = On/expose_php = Off/g" /etc/php7/php.ini今のところはここまでです。この記事が役に立ち、設定が改善されることを願っています ;)
何か重要な点を見逃した場合は、コメントでお知らせください。
元のアドレス: https://dev.to/elabftw/10-steps-for-securing-a-php-app-5fnp
翻訳アドレス: https://learnku.com /php/t/50851
以上がPHP セキュリティに関する 10 の重要なヒントを共有しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。