【问题标题】:PHP 7.4 deprecated get_magic_quotes_gpc function alternativePHP 7.4 已弃用 get_magic_quotes_gpc 函数替代
【发布时间】:2020-07-18 03:12:20
【问题描述】:

我遇到的情况是,我的一个旧代码正在使用 get_magic_quotes_gpc(),它在最新的 PHP 版本 7.4.*

中已被弃用

目前,我有这样的东西。

添加斜线

return get_magic_quotes_gpc() ? addslashes($string) : $string;

删除斜线

return get_magic_quotes_gpc() ? stripslashes($string) : $string;

这显然是错误的

已弃用:函数 get_magic_quotes_gpc() 已弃用

问题:

我该如何解决?那么不使用get_magic_quotes_gpc()函数也能正常工作吗?

【问题讨论】:

  • 由于 PHP 不再为请求参数添加斜杠 (removed in PHP 5.4),get_magic_quotes_gpc() 总是 返回 false。考虑到这一点,您不必对您的字符串做任何事情,它们应该始终是干净的。
  • 我也想不出任何使用addslashes()的正当理由。我不知道为什么你会有像你的第一个 sn-p 这样的代码,即使在 PHP 5.4 之前
  • @Phil 你的意思是 PHP 自己处理所有这些易受攻击的注入吗?
  • 不,恰恰相反。 PHP 现在不再妨碍开发人员,而是由您来保护您的应用程序
  • 保护什么以及防范什么漏洞?您的问题显示此代码没有任何用途。如果您依赖此代码来清理 SQL 查询参数,请改用准备好的语句。

标签: php deprecated php-7.4


【解决方案1】:

您需要从代码中删除所有提及此函数的内容,并且不要将其替换为其他任何内容。

get_magic_quotes_gpc() 从 PHP 5.4.0 开始就没有用了。它会告诉您是否在配置中打开了魔术引号。魔术引号是一个糟糕的主意,出于安全原因,此功能已被删除(PHP 开发人员相信魔术和迷信并编写了不安全的代码)。

很可能连您自己都不知道为什么您的项目中有这行代码。我知道我在学习 PHP 时被它愚弄了。现实是你根本不需要它。此功能与安全无关,输入净化的概念很荒谬。

相反,请依靠良好的安全指南。

  • 使用参数化的预处理语句与数据库交互。 PHP 有一个非常好的库叫做 PDO,它可以与包括 MySQL 在内的许多 DB 驱动程序一起使用。
  • 如果您产生输出,则转义输出,同时考虑到该媒体的规则。例如,当输出到 HTML 时,使用htmlspecialchars() 来防止 XSS。
  • 永远不要清理输入。没有神奇的解决方案可以保护您免受一切侵害。相反,作为开发人员,您必须意识到危险,并且您需要知道如何保护您的代码。 Don’t try to sanitize input. Escape output.

【讨论】:

  • 我不同意你的笼统说法,即(所有)输入卫生都是不必要的,甚至是荒谬的。相反,您需要知道可以安全处理的输入类型,并确保输入匹配。我确实同意,认为一旦消毒一次,以后每次使用都是安全的,这是一种误解。 FYI get_magic_quotes 是在您的脚本可能发生魔法的时代对安全和理智的代码的要求。准备好的语句更好,但它也应该看起来不错,不是吗? ;)
  • @Zefiro 你不考虑输入验证吗?您验证收到的输入以确保它是应用程序所期望的,但这与安全性无关。
  • 你说得对,我做到了。虽然我在这里真的看不出有什么不同。在魔术引号的情况下,它是“以已知状态获取输入以进行进一步处理”,即您知道是否自动添加了转义斜杠。 (以及在准备好的声明之前至少与安全相关的时代)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
相关资源
最近更新 更多