PHP セキュリティに関する 10 の重要なヒントを共有します

藏色散人
リリース: 2023-04-09 16:06:01
転載
5418 人が閲覧しました

おすすめ: 「PHP ビデオ チュートリアル

PHP セキュリティに関する 10 の重要なヒントを共有します

##こんにちは、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 がアクセスできないようにします。 ###詳しくは###。

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

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

がここにあるのかは覚えていませんが、何か理由があるはずです。

機能を無効にする

これにより、アプリが簡単に台無しになる可能性があるため、注意してください。しかし、それは間違いなく調査する価値があります。攻撃者が何らかの方法で Web シェルをアップロードしたと仮定すると、Web シェルが正しく無効にされた場合、

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.ini
ログイン後にコピー
cgi.fix_pathinfo を無効にする

PHP 以外のファイルを PHP ファイルとして実行したくないですよね?次に、この機能を無効にします。 ###詳しくは###。

sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php7/php.ini
ログイン後にコピー
PHP バージョンを非表示にする

最後に、何も考えずに:

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 サイトの他の関連記事を参照してください。

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