ignore_user_abort() 函数的安全隐患

Security implications of ignore_user_abort() function

PHP 的 ignore_user_abort() 函数有任何安全隐患吗?

我正在考虑 DoS。例如,当函数在某些资源昂贵的代码中暴露于匿名流量时。

我没有看到 ignore_user_abort() 函数有任何直接的安全隐患。

DoS攻击方面,考虑包含的脚本是

  • 资源昂贵
  • 暴露于匿名流量

关注的应该是服务器过载,这可能会导致服务暂时或无限期中断或暂停。

如果可能的话,为这种资源昂贵的代码寻找替代品是明智的:

  • 如果包含的脚本用于模拟 cron 任务,则最好使用 crontab 代替。
  • 如果可能的话,明智的做法是将编程限制 运行 只有一个此类资源昂贵代码的实例,而不管包含的脚本会获得多少页面点击。

希望这对您有所帮助。

作为对之前回答的补充,我想补充一点,风险并没有变大,而是在一点点转移。

如果目标是通过多次调用昂贵的脚本使服务器过载,显然调用 ignore_user_abort(true); 可以使攻击者无需保持连接打开。尽管如此,脚本仍会继续执行连接状态并消耗资源。
相反,如果没有 ignore_user_abort(true);,脚本将在第一个输出 上结束执行 (如果没有输出,脚本将与第一个变体 [1 一样消耗) ]).

在 DoS 攻击(尤其是 DDoS 攻击)的情况下,攻击者打开(并保持打开)大量连接可能完全没有问题。因此从这个角度来看ignore_user_abort没有区别。

我想不出使用此功能有任何进一步的安全相关影响。

我什至会声称大多数 PHP 开发人员并不真正知道他们的脚本的执行可能会因为连接丢失而在中间某处停止。我想大多数人会猜测他们的脚本在所有情况下都会执行到最后,尽管这不是默认设置。