在这篇文章中,我将尝试为你提供一些可以提高 PHP 应用程序安全性的具体步骤。我关注的是 PHP 配置本身,所以我们不会讨论 SQL 注入、HTTPS 或其他与 PHP 无关的问题。

我将使用我的 docker-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将被禁用,同类也将被禁用。我提供了一个适用于elabftw的列表,但并不是百分之百完成。

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

现在就这样。我希望你会发现这篇文章很有用,并改进你的配置;)

很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了迷茫没方向,不知道该从哪儿入手去提升自己。→→管理整理了一些资料,有 腾讯 等一线大厂进阶知识体系 可供参考(相关学习资料以及笔面试题)

覆盖各个技术栈:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货欢迎加入我的官方群啊点击此处

php隐藏webshell_PHP 安全的十个必备技巧相关推荐

  1. 响应式设计的十个基本技巧

    为什么80%的码农都做不了架构师?>>>    Responsive Design对于我来说一点都不陌生,从他在这个互联网出现的时候,就一直在观注他的成长,而且在w3cplus站上也 ...

  2. delphi十个小技巧

    delphi十个小技巧.... 1.判断一个字符串是否包含于另外一个字符串的方法 例如:if pos('ab','abcd')<>0 then messagedlg('ab是包含于abcd ...

  3. 计算机vlookup函数,表格必备技巧:VLOOKUP函数常用套路大全

    小伙伴们好啊,今天和大家来说说VLOOKUP的那些事儿,深入了解一下VLOOKUP函数的各种用法,看看这位大众情人还藏着多少不为人知的秘密. 函数的语法为: VLOOKUP(要找谁,在哪儿找,返回第几 ...

  4. java拦截器_Java工程师年底跳槽高潮即将到来,斩获满意offer的必备技巧(二)

    哈喽,大家好,相信看过小编Java工程师年底跳槽高潮即将到来,斩获满意offer的必备技巧(一)文章的朋友应该就比较的了解这里都是干货,希望这些干货能够助大家在这2019-2020年关跳槽季斩获满意的 ...

  5. android studio导出apk_Android 应用构建速度提升的十个小技巧

    应用的构建速度会直接影响开发效率,本文将带您通过改造一个 Android 应用: "Google 追踪圣诞老人 (Google Santa Tracker)" 来为大家提供十个小技 ...

  6. 整样运用计算机考试,计算机一级考试Word的十个应用技巧

    计算机一级考试Word的十个应用技巧 全国计算机考试分为四个等级,不同等级的内容不同,一级主要考核微型计算机基础知识和使用办公软件及因特网的基本技能.下面百分网小编为大家搜索整理了关于计算机一级考试W ...

  7. Oracle 查询的十个小技巧

    Oracle数据库查询十个小技巧 数据查询,是数据库操作中最主要的功能之一:有时候数据库查询性能的好坏,直接关系到数据库的运行效率,关系到数据库的选型.下面笔者不谈大道理,只是对其中对一些平时大家容易 ...

  8. 用win7系统如何登录ftp服务器,必备技巧之最详细win7系统登陆ftp服务器的图文教程...

    FTP服务器是什么呢?FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. 那么如何在win7系统登陆ft ...

  9. 如何追踪计算机IP位置,网管必备技巧:如何跟踪IP地址

    网管必备技巧:如何跟踪IP地址 作为网管员,在我们解决Windows 操作系统的DHCP故障时,有时要找出某个地址范围内有哪些地址没有被使用.本人以前介绍过一种方法:打开命令提示窗口,在For-in- ...

最新文章

  1. 【modbus】libmodbus库的移植与使用
  2. 在javascript中判断类型
  3. 在MasterPage下FindControl的使用方法
  4. Python爬取网站用户手机号_设计师的福利,python爬取素材网站
  5. 和平健康粮食安全谋定联合国和平音乐会-林啟樵:民族复兴
  6. 【资源】媲美搜索神器everything,超过1秒出结果算我输!
  7. 浅蓝色设计类网站模板
  8. BeanFactory与FactoryBean的区别
  9. JAVA多线程和并发面试问题
  10. 关于Apache Tomcat解决localhost was unable to start within 45 seconds
  11. poj 3680 Intervals
  12. 主人的C++桌上也没有这么好看的花朵了
  13. 郭明錤:iPhone 13 Pro系列将有1TB储存空间
  14. MySQL中的datetime对应Java类型
  15. java输出两个整数的积_如何检查Java中的两个数字相乘是否会导致溢出?
  16. 《你的知识需要管理》序:五步打造个人知识力
  17. Python使用Reportlab处理PDF数据 - 页面布局
  18. 新西兰梅西大学有计算机专业吗,新西兰梅西大学世界排名|怎么样|入学条件_海外院校库-柳橙网...
  19. Java包装类 学习
  20. 个人知识管理PKM:收集、消化、应用、创新

热门文章

  1. 根据select不同的选项实现相应input框添加项的显示
  2. C++ Editbox换行问题
  3. hadoop loadBalance源码分析
  4. js矢量图类库:Raphaël—JavaScript Library
  5. [Leedcode][JAVA][第84题][柱状图中最大的矩形][暴力][单调栈]
  6. CodeForces 799B (B) T-shirt buying
  7. android滑动开关框架,Android之实现滑动开关组件
  8. python封装模块_Python练手,封装日志模块,v2
  9. 电路板上的插头怎么拔下来_空调维修排查电路板内外原因
  10. 用session实现html登录页面跳转页面跳转页面跳转,js判断登录与否并确定跳转页面的方法...