虽然已是 2018 年,但网上依然流传着一些「高危 PHP 函数,请一定要禁用!」的标题党文章(搜索关键字:一些需要禁用的PHP危险函数)。

这些文章的内容简单直接,给出 php.inidisable_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的定时任务不能执行了?的更多相关文章

  1. 一些需要被禁用的php危险函数

    phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 危险等级 ...

  2. 一些需要禁用的PHP危险函数

    phpinfo()功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息.危险等级:中 passthru()功能描述:允许执行一个外部程序并回显输出,类似于 exec().危险等级:高 e ...

  3. 有些需要禁用的PHP危险函数(disable_functions)

    phpinfo() 功能描述:输出 PHP 环境信息以及相关的模块.WEB 环境等信息. 危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec(). 危险等级 ...

  4. 一些需要禁用的PHP危险函数(disable_functions)

    一些需要禁用的PHP危险函数(disable_functions)   有时候为了安全我们需要禁掉一些PHP危险函数,整理如下需要的朋友可以参考下 phpinfo() 功能描述:输出 PHP 环境信息 ...

  5. Apache降权和禁用PHP危险函数

    测试环境: Windows Server 2003 + phpstudy 首先在win2003里运行phpstudy,这里注意需要选择应用系统服务模式,应用之后重启phpstudy. 打开系统服务(开 ...

  6. 【随笔】Apache降权和禁用PHP危险函数

    测试环境: Windows Server 2003 + phpstudy 首先在win2003里运行phpstudy,这里注意需要选择应用系统服务模式,应用之后重启phpstudy. 打开系统服务(开 ...

  7. php常见的危险函数

    代码执行的危险函数 eval() 把字符串作为php代码执行 早期php一句话木马都用这个 <?php @eval($_POST['shell']);?> assert() 检查一个断言是 ...

  8. 【干货】PHP常见危险函数

    passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec(). 危险等级:高 exec() 功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等). 危 ...

  9. PHP危险函数总结学习

    1.PHP中代码执行的危险函数 call_user_func() 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数. 传入call_user_func()的参数不能为引用传递 ...

随机推荐

  1. 使用vue开发项目需要注意的问题和可能踩到的坑

    最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ...

  2. FreeSql 与 SqlSugar 性能测试(增EFCore测试结果)

    这篇文章受大家邀请,与 SqlSugar 做一次简单的性能测试对比.主要针对插入.批量插入.批量更新.读取性能的测试: 测试环境 .net core 2.2 FreeSql 0.3.17 sqlSug ...

  3. FreeSql 新查询功能介绍

    FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...

  4. C#工具:WebAPI常见问题及解决方案

    Web.config中连接字符串配置问题解决方法:<ConnectionStrings>中<add>的providerName写错正确写法:providerName=" ...

  5. Challenges-XSS

    https://alf.nu/alert1 warmup adobe JSON

  6. 景观指数分析 - 初识FragStats4.2

    引 言 FragStats景观格局分析软件 ,简单扼要地说就是景观指数的集成分析环境,不用自己编写相关的算法和读/取文件的开发.根据了解,FragStats(Fragment Statistic)官方 ...

  7. PHP面向对象特性

    目录 创建对象 成员属性 成员方法 构造方法 析构方法 垃圾回收机制 访问修饰符 魔术方法 对象比较 继承 重载 属性重载 方法重写 属性重写 静态属性 静态方法 多态 类型约束 抽象类 接口 fin ...

  8. python-memcached学习笔记

    介绍: memcached是免费.开源.高性能.分布式内存对象的缓存系统(键/值字典),旨在通过减轻数据库负载加快动态web应用程序的使用. 数据类型:只用一种字符串类型 1:安装 sudo apt- ...

  9. vue cli 3.x 项目部署到 github pages

    github pages 是 github 免费为用户提供的服务,写博客,或者部署一些纯静态项目. 最近将 vue cli 3.x 初始化项目部署到 github pages,踩了一些坑,记录如下. ...

  10. SQLI LABS Basic Part(1-22) WriteUp

    好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...