问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PHP代码保护方法

发布网友 发布时间:2022-04-05 23:49

我来回答

4个回答

懂视网 时间:2022-04-06 04:11

推荐:《PHP视频教程》

PHP

你好,PHP 开发人员。 在这篇文章中,我将尝试为你提供一些可以提高 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

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

如果我错过了什么重要的东西,请在评论中告诉我!

原文地址:https://dev.to/elabftw/10-steps-for-securing-a-php-app-5fnp

译文地址:https://learnku.com/php/t/50851

热心网友 时间:2022-04-06 01:19

不要把USB口破坏掉,只要删除USB驱动程序,什么盘都木有用了,只要你再次安装驱动,USB口又有用了。另外不用加密PHP代码,虽然Zend加密能做到这一点,但会占用一定的资源。第三,修改服务器密码或创建其他帐户,把Web目录权限设置成拒绝原管理员访问。

热心网友 时间:2022-04-06 02:37

你把电脑砸了不就行了.
保护安全,让他们登录非管理员帐户.把你的文件夹设置权限.
写个软件,随时备份PHP目录文件.
磁盘,文件夹隐藏都可以,隐藏文件夹别用普通的方式,用点稀奇古怪的办法.
PHP代码有混淆工具,百度一下

热心网友 时间:2022-04-06 04:11

zend 加密,LINUX服务器的话 不同的帐号设置好权限就可以*用户的活动范围了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 如何实现php的安全最大化?怎样避免sql注入漏洞和xss跨站脚本攻击漏洞 laravel5.2,做定时任务是用服务的crontab还是用队列 laravel queue队列怎样实现监听 PHP使用Beanstalkd做任务队列,是不是代表需要有一个PHP常驻进程 laravel能不能同时使用两个队列驱动 laravel队列出错怎么继续执行程序 Supervisor管理Laravel队列进程报错 php将数组的键值快速输出成字符串呢? php 如何将数组转换成字符串 php,怎么将把数字传换成字符串? php中怎么把数字转成字符串 php怎样把数组本身转为字符串 php中有没有将数组的值转换为字符串的函数 PHP数组如何转换为字符串 php怎么把元素对象转换字符串处理 php 怎样把数组转换成字符串 怎么吧php数组的键值对里的值变成字符串 把执行的PHP代码转为字符串。 PHP如何把数组转换为字符串? PHP如何将变量转成字符集 自己用PHP开发的网站怎样才能安全些 PHP程序优化有什么好用的技巧吗? 我想用php建立一个加钱的功能,如何才能保证他的安全性呢 PHP数据如何安全的输入输出 如何预防PHP MYSQL注入【攻击】 php通过session防url攻击方法 macOSpython一回车就运行 python怎么换行,我的换行就是执行啊 Python3.5.2怎么换行啊!按了回车变成执行了? pycharm回车不换行解决方法 Python编程中,按回车实现换行的疑惑。 pythonend=换行怎么换不了 为什么Python的回车不能换行,用\换行又出来报错,求指点 python shell中如何换行而不执行 python换行后代码输入完怎么执行 ipython notebook为什么使用shift+enter无法运行而是换行 python shell中如何换行 python中的换行问题,一直处理不好 cmd python换行,我第一行输入 ‘\’是可以换,但是从第二行开始就不行了 。 python,return 使用和%运算符对输出字符串进行格式化的方法