发布 Psalm 3.12,PHP 语言的静态分析器。 PHP 8.0 的 Alpha 版本

维梅奥公司 опубликовала 新发布的静态分析器 诗篇3.12中,它允许您识别 PHP 代码中明显和细微的错误,并自动更正某些类型的错误。 该系统适用于识别遗留代码和使用 PHP 新分支中引入的现代功能的代码中的问题。 项目代码是用PHP编写的 分发者 在麻省理工学院的许可下。

诗篇指出了大多数与不正确类型使用相关的问题,以及各种 典型错误。 例如,它支持关于在表达式中混合不同类型变量的警告、不正确的逻辑测试(例如“if ($a && $a) {}”、“if ($a && !$a) {}”和“ if ( $a) {} elseif ($a) {}"),对象属性初始化不完整。 分析器以多线程模式运行。 可以执行增量扫描,仅分析自上次扫描以来已更改的文件。

此外,还提供安全编程工具以允许 使用 格式中的注释 文档块 (“/** @var Type */”) 提供有关变量类型、返回值、函数参数、对象属性的信息。 还支持定义类型使用模式和使用断言语句。 例如:

/** @var string|null */
$a = foo();

/** @var 字符串 $a */
echo strpos($a, '你好');

/** @psalm-assert-if-true B $a */
函数 isValidB(A $a) : bool {
return $a instanceof B && $a->isValid();
}

为了自动消除发现的问题,提供了 Psalter 实用程序,它支持插件和 它允许 解决常见代码问题、添加类型注释以及执行操作,例如将类从一个命名空间移动到另一个命名空间、在类之间移动方法以及重命名类和方法。

在新一期的诗篇中 实施的 “--taint-analysis”选项允许您跟踪从用户接收的输入参数(例如,$_GET['name'])之间的关系及其在需要字符转义的地方的使用(例如,echo " $名称"),包括通过跟踪中间赋值和函数调用链。 使用关联数组 $_GET、$_POST 和 $_COOKIE 被视为潜在危险数据的来源,但也是可能的 决心 自己的来源。 需要转义跟踪的操作包括生成 HTML 内容、添加 HTTP 标头或执行 SQL 查询的输出操作。

使用 echo、exec、include 和 header 等函数时会使用验证。 在分析是否需要转义时,会考虑文本、带有 SQL、HTML 和 Shell 代码的字符串、带有身份验证参数的字符串等数据类型。 建议的模式允许您识别代码中导致跨站点脚本 (XSS) 或 SQL 替换的漏洞。

另外,还可以注意到 开始 新 PHP 8.0 分支的 alpha 测试。 该版本计划于 26 月 XNUMX 日发布。 新分支机构预计将实现以下目标: 创新AS:

  • 包容 即时编译器,使用它可以提高生产力。
  • Поддержка 联合类型,定义两种或多种类型的集合(例如,“public function foo(Foo|Bar $input): int|float;”)。
  • Поддержка 属性 (注释)允许您将元数据(例如类型信息)绑定到类,而无需使用 Docblock 语法。
  • 缩短语法 类定义,允许您组合构造函数和属性的定义。
  • 新的返回类型 - 静止.
  • 新类型- ,可用于判断函数是否接受不同类型的参数。
  • 表达 来处理异常情况。
  • 弱映射 创建可以在垃圾收集期间牺牲的对象(例如,存储不必要的缓存)。
  • 机会 对对象使用表达式“::class”(类似于调用 get_class())。
  • 机会 未绑定到变量的异常的 catch 块中的定义。
  • 机会 在函数参数列表中的最后一个元素后面留下一个逗号。
  • 新界面 可串接 标识任何可以转换为字符串的字符串类型或数据(可以使用 __toString() 方法)。
  • 新功能 海峡包含(),strpos 的简化类似物,用于确定子字符串的出现,以及函数 str_starts_with() 和 str_ends_with() 用于检查字符串开头和结尾的匹配。
  • 新增功能 fdiv(),它执行除法运算,除以零时不会抛出错误。
  • 改变了 字符串连接逻辑。 例如,表达式 'echo "sum:" 。 $a + $b' 之前被解释为 'echo ("sum: " . $a) + $b',在 PHP 8 中将被视为 'echo "sum: " 。 ($a + $b)'。
  • 收紧 检查算术和位运算,例如表达式“[] % [42]”和“$object + 4”将导致错误。
  • 实施的 一种稳定的排序算法,其中相同值的顺序在不同的运行中得以保留。

来源: opennet.ru

添加评论