Heim  >  Artikel  >  Backend-Entwicklung  >  Teilen Sie zehn wichtige Tipps für die PHP-Sicherheit

Teilen Sie zehn wichtige Tipps für die PHP-Sicherheit

藏色散人
藏色散人nach vorne
2020-10-26 13:53:455373Durchsuche

Hallo, PHP-Entwickler. In diesem Artikel werde ich versuchen, Ihnen einige konkrete Schritte aufzuzeigen, mit denen Sie die Sicherheit Ihrer PHP-Anwendungen verbessern können. Ich konzentriere mich auf die PHP-Konfiguration selbst, daher werden wir nicht auf SQL-Injection, HTTPS oder andere nicht mit PHP zusammenhängende Probleme eingehen. Teilen Sie zehn wichtige Tipps für die PHP-Sicherheit

Ich werde das Beispiel anhand der Bash-Zeilen aus meinem docker-entrypoint.sh-Skript veranschaulichen, aber Sie können dies natürlich auch auf eine Nicht-Docker-Umgebung anwenden.

Sitzungendocker-entrypoint.sh脚本中的 bash 行来说明示例,但当然你可以将其应用于非 docker 环境。

Sessions

使用较长的 Session 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.ini配置选项,允许你限制 PHP 可以访问的文件/目录。

sed -i -e "s#;open_basedir =#open_basedir = /elabftw/:/tmp/:/usr/bin/unzip#" /etc/php7/php.ini

这里我添加了 unzip,因为它是由 Composer 使用的。 /elabftw是所有源 php 文件所在的位置。我不记得为什么/tmp会在这里,但肯定有原因。

禁用功能

这一点要小心,因为你很容易搞砸一个应用程序。但这绝对值得调查。假设攻击者以某种方式上传了一个 webshell,如果正确禁用了,webshell 将不会真正工作,因为shell_exec

Verwenden Sie eine längere Sitzungs-ID-Länge.

Eine Erhöhung der Sitzungs-ID-Länge macht es für einen Angreifer schwieriger, sie zu erraten (entweder durch Brute-Force oder wahrscheinlicher durch einen Seitenkanalangriff). Die Länge kann zwischen 22 und 256 Zeichen betragen. Der Standardwert ist 32.

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
(Fragen Sie mich nicht, warum es unter Alpine Linux 26 ist…)Vielleicht möchten Sie sich auch session.sid_bits_per_character ansehen.

Verwenden Sie einen benutzerdefinierten Sitzungsspeicherpfad mit eingeschränkten Berechtigungen.

Nur Nginx/PHP benötigt Zugriff auf die Sitzungen. Legen Sie sie daher in einen speziellen Ordner mit eingeschränkten Berechtigungen.

sed -i -e "s/allow_url_fopen = On/allow_url_fopen = Off/" /etc/php7/php.ini
Wenn Sie Redis zum Verwalten von Sitzungen verwenden, müssen Sie sich natürlich nicht um diesen Teil kümmern;)

Sicheres Sitzungscookie

session.cookie_httponly

um zu verhindern, dass Javascript darauf zugreift. Weitere Informationen

.

sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php7/php.ini

session.cookie_secure

Verhindern Sie, dass Ihre Cookies über Klartext-HTTP übertragen werden. 🎜🎜session.cookie_samesite🎜 um standortübergreifende Angriffe zu verhindern. Funktioniert nur mit den neuesten PHP/Browsern. 🎜🎜🎜Verwendung des strengen Modus🎜🎜🎜Aufgrund der Cookie-Spezifikation ist ein Angreifer in der Lage, ein nicht entfernbares Sitzungs-ID-Cookie zu platzieren, indem er die Cookie-Datenbank lokal oder per JavaScript-Injection setzt. session.use_strict_mode🎜 Verhindert die Verwendung von vom Angreifer initiierten Sitzungs-IDs. 🎜🎜🎜Begrenzte Lebensdauer🎜🎜🎜Die Sitzung sollte zusammen mit dem Browser geschlossen werden. Stellen Sie also session.cookie_lifetime🎜 ein ist 0. 🎜🎜🎜Open_basedir🎜🎜🎜open_basedir 🎜 ist eine php.ini-Konfigurationsoption, mit der Sie die Dateien/Verzeichnisse einschränken können, auf die PHP zugreifen kann. 🎜
sed -i -e "s/expose_php = On/expose_php = Off/g" /etc/php7/php.ini
🎜Hier habe ich „unzip“ hinzugefügt, weil es von Composer verwendet wird. /elabftw ist der Speicherort, an dem sich alle Quell-PHP-Dateien befinden. Ich kann mich nicht erinnern, warum /tmp hier ist, aber es muss einen Grund geben. 🎜🎜🎜Funktionen deaktivieren🎜🎜🎜Seien Sie dabei vorsichtig, da Sie eine App leicht vermasseln können. Aber es ist auf jeden Fall eine Untersuchung wert. Angenommen, ein Angreifer lädt auf irgendeine Weise eine Webshell hoch, und wenn sie ordnungsgemäß deaktiviert ist, funktioniert die Webshell nicht wirklich, da shell_exec deaktiviert wird, und dasselbe gilt auch. Ich habe eine Liste bereitgestellt, die für elabftw funktioniert, aber sie ist nicht 100 % vollständig. 🎜rrreee🎜🎜URL_fopen deaktivieren🎜🎜🎜🎜allow_url_fopen🎜 Diese Option ist gefährlich. Deaktivieren Sie es. Weitere Informationen 🎜hier🎜. 🎜rrreee🎜🎜Deaktivieren Sie cgi.fix_pathinfo🎜🎜🎜Sie möchten nicht, dass Nicht-PHP-Dateien als PHP-Dateien ausgeführt werden, oder? Deaktivieren Sie dann diese Funktion. 🎜Weitere Informationen🎜. 🎜rrreee🎜🎜PHP-Version ausblenden🎜🎜🎜Zum Schluss, ohne nachzudenken: 🎜rrreee🎜Das war’s vorerst. Ich hoffe, dass Sie diesen Artikel hilfreich fanden und Ihre Konfiguration verbessern ;) 🎜🎜 Wenn ich etwas Wichtiges verpasst habe, lassen Sie es mich bitte in den Kommentaren wissen! 🎜

Originaladresse: https://dev.to/elabftw/10-steps-for-securing-a-php-app-5fnp

Übersetzungsadresse: https://learnku.com/php/t/50851

Das obige ist der detaillierte Inhalt vonTeilen Sie zehn wichtige Tipps für die PHP-Sicherheit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen