禁用了传说中的PHP危险函数之后,Laravel的定时任务不能执行了?
虽然已是 2018 年,但网上依然流传着一些「高危 PHP 函数,请一定要禁用!」的标题党文章(搜索关键字:一些需要禁用的PHP危险函数)。
这些文章的内容简单直接,给出 php.ini
的 disable_functions
的配置(包含一大堆函数),说这些函数十分危险,一定要禁用,有的内容甚至和7、8年前一模一样,被开发者们奉为秘籍,薪火相传。
禁用危险函数在理论上是可以加强安全性,但这种做法就好比做饭时害怕用菜刀切菜伤到自己而改用手撕。搞安全一定要重视对入口的控制,而不是自废武功,因为禁用某些函数会导致某些需求很难、甚至不能实现。
举个例子。
比如 Laravel
中定时任务功能的底层使用了 Symfony/Process
,其中就依赖 proc_open
函数来执行命令(及其一系列函数),如果被禁用,定时任务就没法用了。
这里还有个小坑。
朋友本来有一个稳定运行的 Laravel
项目,但某天为了加强安全性,就在 php.ini
里禁用了一堆函数(网上找来的),其中就包含 proc_open
这些。后来他突然发现所有的定时任务都没有跑了,Laravel
日志和 PHP
错误日志也没有任何异常。后来他猜测应该和函数禁用行为有关,于是还原了配置,可是此时定时任务还是没有运行。
这里的坑就在于他的所有定时任务都设置了 withoutOverlapping
。当开启这个设置之后,Laravel
在运行任务时会设置排他锁:开始的时候检查有没有上锁,有锁则忽略执行,否则就上锁,执行命令,执行结束之后解锁。上锁当然没问题,可是执行挂了(这里应该是静默失败,普通异常是会被捕捉然后解锁的),后面就自然没有解锁,所以配置恢复之后,开始执行时发现锁依然存在,是不会实际执行的。
怎么解决呢?Laravel
的锁使用的系统默认 Cache
,所以只需要去对应 Cache
的 driver 中删掉锁的缓存文件就好了,或者等待锁过期之后也行(5.5
默认是 24 小时)。
禁用了传说中的PHP危险函数之后,Laravel的定时任务不能执行了?的更多相关文章
- 一些需要被禁用的php危险函数
phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 危险等级 ...
- 一些需要禁用的PHP危险函数
phpinfo()功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息.危险等级:中 passthru()功能描述:允许执行一个外部程序并回显输出,类似于 exec().危险等级:高 e ...
- 有些需要禁用的PHP危险函数(disable_functions)
phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息. 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec(). 危险等级 ...
- 一些需要禁用的PHP危险函数(disable_functions)
一些需要禁用的PHP危险函数(disable_functions) 有时候为了安全我们需要禁掉一些PHP危险函数,整理如下需要的朋友可以参考下 phpinfo() 功能描述:输出 PHP 环境信息 ...
- Apache降权和禁用PHP危险函数
测试环境: Windows Server 2003 + phpstudy 首先在win2003里运行phpstudy,这里注意需要选择应用系统服务模式,应用之后重启phpstudy. 打开系统服务(开 ...
- 【随笔】Apache降权和禁用PHP危险函数
测试环境: Windows Server 2003 + phpstudy 首先在win2003里运行phpstudy,这里注意需要选择应用系统服务模式,应用之后重启phpstudy. 打开系统服务(开 ...
- php常见的危险函数
代码执行的危险函数 eval() 把字符串作为php代码执行 早期php一句话木马都用这个 <?php @eval($_POST['shell']);?> assert() 检查一个断言是 ...
- 【干货】PHP常见危险函数
passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec(). 危险等级:高 exec() 功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等). 危 ...
- PHP危险函数总结学习
1.PHP中代码执行的危险函数 call_user_func() 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数. 传入call_user_func()的参数不能为引用传递 ...
随机推荐
- Spark学习之在集群上运行Spark
一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...
- KnockoutJS知识规整目录
对于Web开发来讲,前端接触是避免不了的,特别是对于中小公司,没有严格的职位区分,前后端人员互相身兼是常有的事情,使用一些好的框架,能够帮助我们快速开发并完成需要的功能,对于前端的JS框架来讲MVVM ...
- Windows中使用Mysql-Proxy实现Mysql读写分离
1.简介 读写分离:当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈.简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读. ...
- 小米手机Usb之studio安装不了解决办法
近段时间刚学习完安卓基础,在一家小公司入职,昨天晚上翻出了几年前买的小米Note手机,打算用来真机调试Studio,结果运行一直安装不了. 忘记截图了,大概页面差不多这样. 网上看了好多贴子,开发者选 ...
- 使用 HttpRequester 更方便的发起 HTTP 请求
使用 HttpRequester 更方便的发起 HTTP 请求 Intro 一直感觉 .net 里面(这里主要说的是 .net framework 下)发送 HTTP 请求的方式用着不是特别好用,而且 ...
- Git常用简介
Git是什么 git是目前最先进的分布式版本控制系统,它的核心架构如下图所示,分为四个核心区域.git的常用命令主要是关于这四个区域. 本地工作区-work 本地工作区就是我们实际电脑中的文件夹以及文 ...
- Windows系统ping本地虚拟机~
虚拟机左上角[编辑]>>>[虚拟网络编辑器] [VMnet1]>>>子网ip:192.168.124.0 子网掩码:255.255.255.0 [VMnet8]&g ...
- Android Gradle 学习笔记(一):Gradle 入门
官网地址:https://gradle.org/. 一.配置 Gradle 环境 安装Gradle之前必须要配置好Java环境,要求JDK 6 以上,并且在环境变量配置好JAVA_HOME.查看Jav ...
- select * 和 select 所有字段的区别
阅读本文大概需要 1 分钟. 之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解. MySQL 5.1.37 表记录数 41,547, ...
- 让你用 Chrome 上网快到想哭:Vimium
Chrome 已经成了很多人的主力浏览器,你可能被它的简洁快速所吸引,但它日益丰富的「扩展」,你可能从来都没有接触过,而事实上,很多扩展可以挖掘出 Chrome 的潜能,让它变得前所未有的强大.有哪些 ...