PHP 7.4 不推荐使用 get_magic_quotes_gpc 函数替代

Cod*_*ver 32 php deprecated php-7.4

我遇到的情况是,我的旧代码之一正在使用get_magic_quotes_gpc(),但在最新的PHP 版本 7.4 中已弃用。*

目前,我有这样的事情。

添加斜线

return get_magic_quotes_gpc() ? addslashes($string) : $string;
Run Code Online (Sandbox Code Playgroud)

删除斜线

return get_magic_quotes_gpc() ? stripslashes($string) : $string;
Run Code Online (Sandbox Code Playgroud)

这显然是在给出错误

已弃用:不推荐使用函数 get_magic_quotes_gpc()

题:

我该如何解决?那么可以在不使用get_magic_quotes_gpc()函数的情况下工作吗?

Dha*_*man 51

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

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

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

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

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

  • 我不同意你的笼统声明,即(所有)输入卫生都是不必要的,甚至是荒谬的。相反,您需要知道可以安全处理哪种输入,并确保输入与之匹配。我确实同意,认为一旦消毒一次,以后的每次使用都是安全的,这是一种误解。仅供参考,在脚本可能发生魔法的时代,get_magic_quotes 是安全、理智的代码的要求。准备好的语句更好,但它也应该看起来不错,不是吗?;) (9认同)
  • 你说得对,我就是这么做的。虽然我在这里并没有真正看到区别。在魔术引号的情况下,它是“以已知状态获取输入以进行进一步处理”,即您知道转义斜杠是否已自动添加。(以及在至少与安全相关的准备好的声明之前的时代) (2认同)

小智 13

get_magic_quotes_gpc()用。。。来代替false

然后通过删除无法到达的分支来简化复杂的表达式。例如

return get_magic_quotes_gpc() ? addslashes($string) : $string;
Run Code Online (Sandbox Code Playgroud)

变得简单

return $string;
Run Code Online (Sandbox Code Playgroud)