首页 > 后端开发 > php教程 > PHP 的 FILTER_SANITIZE_STRING 弃用:最佳替代选项是什么?

PHP 的 FILTER_SANITIZE_STRING 弃用:最佳替代选项是什么?

Linda Hamilton
发布: 2024-12-01 11:14:10
原创
273 人浏览过

PHP's FILTER_SANITIZE_STRING Deprecation: What Are the Best Replacement Options?

FILTER_SANITIZE_STRING 弃用:混乱和意外后果的故事

最近弃用 FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED 常量引起了依赖它们进行输入的 PHP 开发人员的担忧

不推荐使用什么以及为什么?

FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED 以前用于从输入字符串中删除潜在的 XSS 漏洞。然而,这些过滤器表现出令人困惑和不直观的行为。 FILTER_SANITIZE_STRING 删除了“<”之间的所有字符以及字符串的末尾,删除了 NUL 字节,并对单引号和双引号进行了编码。

PHP 社区确定这些过滤器造成的混乱比它们解决的问题还要多,因为开发人员经常误解它们的预期用途。其他过滤器(例如 FILTER_UNSAFE_RAW)已充分处理输入清理。

替换选项

有多种选项可以替换这些已弃用的内容filters:

  • FILTER_UNSAFE_RAW: 此默认字符串过滤器不执行任何过滤。如果您想要不进行任何修改的原始字符串值,请使用此函数。
  • htmlspecialchars(): 使用此函数对可被 XSS 漏洞利用的特殊字符进行编码。但是,请记住将其应用于输出,而不是输入。
  • 自定义 Polyfill: 对于那些需要 FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED 特定过滤行为的人,可以创建基于正则表达式的 Polyfill作为如下:
function filter_string_polyfill(string $string): string
{
    $str = preg_replace('/\x00|<[^>]*>?/', '', $string);
    return str_replace(["'", '"'], ['&#39;', '&#34;'], $str);
}

记住黄金法则

重要的是要强调输入清理不应被视为针对 XSS 攻击的可靠防御。相反,开发人员应该专注于转义输出,以防止潜在危险的内容被注入到页面中。

以上是PHP 的 FILTER_SANITIZE_STRING 弃用:最佳替代选项是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板