提问人:Code Lover 提问时间:4/6/2020 最后编辑:PhilCode Lover 更新时间:12/13/2022 访问量:150356
PHP 7.4 已弃用 get_magic_quotes_gpc 函数替代方案
PHP 7.4 deprecated get_magic_quotes_gpc function alternative
问:
我遇到了这样的情况:我的一个旧代码正在使用,该代码在最新的 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()
答:
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
感谢您对如何最好地处理此弃用的简单说明。
评论
get_magic_quotes_gpc()
false
addslashes()