>  기사  >  백엔드 개발  >  PHP 보안을 위한 10가지 필수 팁 공유

PHP 보안을 위한 10가지 필수 팁 공유

藏色散人
藏色散人앞으로
2020-10-26 13:53:455446검색
"

안녕하세요, PHP 개발자. 이 기사에서는 PHP 애플리케이션의 보안을 향상시키기 위해 취할 수 있는 몇 가지 구체적인 단계를 제공하려고 합니다. 저는 PHP 구성 자체에 초점을 맞추고 있으므로 SQL 주입, HTTPS 또는 기타 PHP와 관련되지 않은 문제에 대해서는 논의하지 않겠습니다. PHP 보안을 위한 10가지 필수 팁 공유

docker-entrypoint.sh 스크립트의 bash 라인을 사용하여 예제를 설명하겠지만 물론 이것을 Docker가 아닌 환경에도 적용할 수 있습니다.

Sessionsdocker-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

더 긴 세션 ID 길이 사용

세션 ID 길이를 늘리면 공격자가 추측하기가 더 어려워집니다(무차별 대입 공격이나 부채널 공격 가능성이 더 높음). 길이는 22~256자 사이일 수 있습니다. 기본값은 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
(Alpine Linux에서 왜 26인지 묻지 마세요...)session.sid_bits_per_character를 확인하실 수도 있습니다.

제한된 권한이 있는 사용자 정의 세션 저장 경로를 사용하세요

nginx/php만 세션에 액세스해야 하므로 제한된 권한이 있는 특수 폴더에 넣겠습니다.

sed -i -e "s/allow_url_fopen = On/allow_url_fopen = Off/" /etc/php7/php.ini
물론 Redis를 사용하여 세션을 처리한다면 이 부분은 신경쓰실 필요가 없습니다;)

Secure Session Cookie

session.cookie_httponly

자바스크립트가 쿠키에 액세스하는 것을 방지합니다. 추가 정보

.

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

session.cookie_secure

쿠키가 일반 텍스트 HTTP를 통해 전송되는 것을 방지하세요. 🎜🎜session.cookie_samesite🎜 사이트 간 공격을 방지합니다. 최신 PHP/브라우저에서만 작동합니다. 🎜🎜🎜엄격 모드 사용🎜🎜🎜쿠키 사양으로 인해 공격자는 쿠키 데이터베이스를 로컬로 설정하거나 JavaScript 주입을 통해 제거할 수 없는 세션 ID 쿠키를 배치할 수 있습니다. session.use_strict_mode🎜 공격자가 시작한 세션 ID의 사용을 방지합니다. 🎜🎜🎜수명 제한🎜🎜🎜세션은 브라우저와 함께 종료되어야 합니다. 따라서 session.cookie_lifetime🎜을 설정하세요. 0입니다. 🎜🎜🎜Open_basedir🎜🎜🎜open_basedir 🎜는 PHP가 액세스할 수 있는 파일/디렉터리를 제한할 수 있는 php.ini 구성 옵션입니다. 🎜
sed -i -e "s/expose_php = On/expose_php = Off/g" /etc/php7/php.ini
🎜여기서 unzip은 Composer에서 사용하기 때문에 추가했습니다. /elabftw는 모든 소스 PHP 파일이 있는 위치입니다. /tmp가 왜 여기에 있는지 기억이 나지 않지만 이유가 있을 것입니다. 🎜🎜🎜기능 비활성화🎜🎜🎜앱을 쉽게 망칠 수 있으므로 주의하세요. 하지만 확실히 조사해 볼 가치가 있습니다. 공격자가 어떻게든 웹셸을 업로드한다고 가정하고 올바르게 비활성화하면 웹셸은 실제로 작동하지 않습니다. shell_exec도 비활성화되고 마찬가지이기 때문입니다. elabftw에서 작동하는 목록을 제공했지만 100% 완전하지는 않습니다. 🎜rrreee🎜🎜Disable url_fopen🎜🎜🎜🎜allow_url_fopen🎜 이 옵션은 위험합니다. 비활성화하십시오. 자세한 내용은 🎜여기🎜를 참조하세요. 🎜rrreee🎜🎜Disable cgi.fix_pathinfo🎜🎜🎜PHP가 아닌 파일이 PHP 파일로 실행되는 것을 원하지 않으시죠? 그런 다음 이 기능을 비활성화하십시오. 🎜자세한 정보🎜. 🎜rrreee🎜🎜PHP 버전 숨기기🎜🎜🎜마지막으로 아무 생각 없이 🎜rrreee🎜지금은 그게 다입니다. 이 기사가 도움이 되기를 바라며 구성을 개선하시기 바랍니다 ;) 🎜🎜 중요한 내용을 놓친 경우 댓글로 알려주시기 바랍니다! 🎜

원본 주소: https://dev.to/elabftw/10-steps-for-securing-a-php-app-5fnp

번역 주소: https://learnku.com/php/t/50851

위 내용은 PHP 보안을 위한 10가지 필수 팁 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제