exakat.0.12.16 review
exakat.0.12.16 review

exakat.0.12.16 review

exakat.0.12.16是Zend Con周之前的版本!我们’下周,在Zend Con,于10月底到PhpQuébec。来吧,让’S聊天与代码评论!本周,我们升级了Zend Framework 3’S分析了所有最新的组件版本。我们还添加了几个恶性分析:零,表达过于复杂,无条件的循环中断。归功于Peter Breuls推动我们‘表达过于复杂’和尼古拉斯格卡斯为‘会话处理程序必须实现sessionupdatetimestamphandlerInterface’,有关会话处理程序的有点了解PHP接口。让‘我一起审查!

无条件休息循环

可以在循环中发生断裂,以防止其在以后的循环上浪费时间。但是,当休息是无条件的时,这导致了一个非常奇怪的循环。

<?php

function foo($array) {
	foreach($array as $item) {
		return $item;
	}
}
?>

在上面的例子中,‘break’ made actually with ‘return’,作为返回跳出功能和循环。因此,突破真的意味着休息,继续,返回或转到。

此外,foo()函数实际上是array_values($ array)[0]的长版本。

条件休息是有效的,可能是编写这些循环的预期方法。

<?php

function foo($array) {
	foreach($array as $item) {
		// Check $item
		if (bar($item)) {
			return $item;
		}
		continue; // Actually, continue is superfluous here.
	}
}
?>

在戳了各种代码之后,似乎此分析报告了至少10%的代码中的问题,因此这不是特殊的编码。

是零

‘Is zero’斑点添加包括+ $ a和–$ a。在阅读简单的代码时,这看起来很明显,但是当添加更长时可能会变得棘手。

<?php

// This is quite obvious
$a = 2 - 2;

// This is less obvious
$a = $b[3] - $c + $d->foo(1,2,3) + $c + $b[3];

// This is obvious too but may be a typo
$diff = $fx[9][4] - $fx[9][4];

?>

如果第一个示例是显而易见的,那么它可能很容易被遗忘在代码中:它是一些开发工件躺在代码中。这是非常无害的,但有点荒谬。

第二个例子是典型的复杂表达式,其与代码成熟度越来越多,并且应该审查。

第三个例子是最重要的。可以是真实代码比较[4]和[5](或[3]和[4]),但是拼写错误使它相等,导致常量。这是一个真正的错误。

最后,我们也可以建立一个‘Is One’,这适用于乘法的相同概念:每当大型产品具有乘法和划分时,可能会简化。然而,大型产品非常罕见,所以这可能是矫枉过正。

表达过于复杂

聊天时 彼得布雷尔斯 期间 010 PHP. about the ‘is zero’分析,他指出,无论如何都很难以阅读。我们在可以发现复杂表达的工作中已经进行了分析:这是它。

<?php
fwrite($fp, 'HEAD ' . @$url['path'] . @$url['query'] . ' HTTP/1.0' . "\r\n" . 'Host: ' . @$url['host'] . "\r\n\r\n");
?>

在上面的例子中,‘complex expression’是第二个参数,其中有阵列,文字,noScreams和级联。总共为该表达的15个元素,这是实际下限。 NoScream和文字计数为一个,但阵列(或属性,方法调用)计数为两个元素:一个用于变量,一个用于索引。

首先,可以使用多个检查升级表达式,而不是使用@作为转到数据过滤。请记住,@实际上比使用ISSET()和默认值慢。

复杂的表达式出现在参数,条件和分配中。他们需要15个元素或更多。他们肯定会吸引对代码的重要部分的关注。

会话处理程序必须实现sessionupdatetimestamphandlerInterface

谢谢 Nicolas Grekas., from Blackfire, a little known interface will improve your session handler security: //github.com/symfony/symfony/pull/24523. Since PHP 7.0, it is possible to provide methods to handle ‘lazy reading’ from userland handler.

<?php

class mySessionHandler implements SessionHandlerInterface, SessionUpdateTimestampHandlerInterface{
	// Don't forget the  SessionHandlerInterface methods
	function validateId($sessionId){}
	function updateTimestamp($key, $value)  {}
}
?>

updateTimeStamp被调用读取会话变量,因此可以更新上次访问的时间戳。这样,会议可以跟踪实际使用情况,即使没有任何内容而是数据读取。

validateId($ sessionID)赋予会话ID,并报告是否找到匹配会话。这可以防止会话固定:攻击者生成ID,并为受害者使用它,在他已经知道的服务器上创建会话。 ValidateId()是您更新的机会。

文件是 仍然稀缺 在PHP.NET上有关此接口,从PHP 7.0以来已获得。所以,看看Symfony的是什么,并更新你的安全!

快乐的PHP代码评论

下周,我们’ll在Zend Con 2017上谈论‘查看未知的PHP代码’ and ‘静态分析今晚保存了我的代码’。 exakat具有Zend-Framework的特定报告,包括审阅所有已使用的组件,以及版本升级的建议。什么看?平美国@exakat,让’s meet !

所有320多个分析仪都介绍在文档中,包括共同‘没有noscream‘,它建议通过删除所有@使用来加速代码。在exakat.io尝试exakat。将它下载 //github.com/exakat/exakat 或升级它‘exakat.phar升级-u’.