PHP 7.4 已弃用 get_magic_quotes_gpc 函数替代方案

PHP 7.4 deprecated get_magic_quotes_gpc function alternative

提问人:Code Lover 提问时间:4/6/2020 最后编辑:PhilCode Lover 更新时间:12/13/2022 访问量:150356

问:

我遇到了这样的情况:我的一个旧代码正在使用,该代码在最新的 PHP 版本 7.4 中已弃用。get_magic_quotes_gpc()

目前,我有这样的东西。

添加斜杠

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 已弃用 php-7.4

评论

23赞 Phil 4/6/2020
由于 PHP 不再向请求参数添加斜杠(在 PHP 5.4 中删除),因此始终返回 .考虑到这一点,您不必对琴弦做任何事情,它们应该始终是干净的。get_magic_quotes_gpc()false
1赞 Phil 4/6/2020
我也想不出任何正当的理由来使用 .我不明白为什么你会有像你的第一个代码片段这样的代码,甚至在 PHP 5.4 之前addslashes()
0赞 Code Lover 4/6/2020
@Phil 你的意思是PHP可以自己处理所有这些易受攻击的注入吗?
3赞 Phil 4/6/2020
不,恰恰相反。PHP 现在不再妨碍开发人员,而是将保护您的应用程序交给您
7赞 Phil 4/6/2020
保护什么,防止什么漏洞?您的问题未显示此代码的用途。如果依赖此代码来清理 SQL 查询参数,请改用预准备语句。

答:

105赞 Dharman 4/17/2020 #1

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

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

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

相反,请依赖良好的安全准则。

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

评论

9赞 Zefiro 3/15/2021
我不同意你笼统的说法,即(所有)投入卫生都是不必要的,甚至是荒谬的。相反,您需要知道可以安全地处理哪种输入,并确保输入匹配。我确实同意,尽管认为一旦消毒一次,每次使用都是安全的,这是一种误解。仅供参考,get_magic_quotes在脚本可能发生魔术的时代,对安全和理智的代码提出了要求。准备好的语句更好,但它也应该看起来不错,不是吗?;)
0赞 Dharman 3/15/2021
@Zefiro 你不考虑输入验证吗?验证收到的输入,以确保它是应用程序所期望的,但这与安全性无关。
2赞 Zefiro 3/15/2021
你是对的,我做到了。虽然我真的看不出这里有什么区别。在魔术引号的情况下,它是“将输入置于已知状态以进行进一步处理”,即您知道是否自动添加了转义斜杠。(在预制声明之前,至少与安全有关)
12赞 MarkusK 12/13/2022 #2

get_magic_quotes_gpc() 替换为 。false

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

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

变得简单

return $string;

评论

0赞 Zig Shanklin 6/6/2023
感谢您对如何最好地处理此弃用的简单说明。