ホームページ  >  記事  >  バックエンド開発  >  PHP セキュリティに関する 10 の重要なヒントを共有します

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

藏色散人
藏色散人転載
2020-10-26 13:53:455435ブラウズ

おすすめ: 「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 がアクセスできないようにします。 ###詳しくは###。

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

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

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。