2013-12-20 349 views
2

在我的情况下,我应该使用!=如下所示,还是更合适!有什么区别。!=和!之间的区别==

private function authenticateApi($ip,$sentKey) { 

    $mediaServerIp = '62.80.198.226'; 
    $mediaServerKey = '45d6ft7y8u8rf';   

    if ($ip != $mediaServerIp) { 
     return false 
    } 
    elseif ($sentKey != $mediaServerKey) { 
     return false 
    } 
    else { 
     return true; 
    } 
} 

public function setVideoDeletedAction(Request $request) 
{ 
    //Authenticate sender 
    if ($this->authenticateApi($request->server->get("REMOTE_ADDR"),$request->headers->get('keyFile')) != true) { 
     new response("Din IP [$ip] eller nyckel [********] är inte godkänd för denna åtgärd."); 
    } 
+1

松散的平等是你的一个安全漏洞:http://codepad.org/0j4T3iCl。 – Blender

+0

@Blender你是错的,你能不能至少为自己测试一下代码?链接的页面很蠢 –

+0

因此,由于我完全控制了返回值(来自authenticateApi()),它对我来说不是一个安全漏洞?但可能是authenticateApi()内部的问题,因为我从请求对象中提取值? –

回答

2

!=检查看重

if($a != 'true') 

!==检查值和类型都

if($a !== 'true') 
+1

也许在第二种情况下,你的意思是'if($ a!=='true')'? – briosheje

+0

是的,我已经更新了它。 –

0

!==更严格。 '1'==1返回true,但'1'===1 - false,因为不同的类型。

0

===!==来比较,可能是不同类型的对象。如果类型AND值相等,则===将返回TRUE;如果OR值的类型不同,则!==将返回TRUE。它有时被称为'一致性'操作符。

如果你比较了两件你知道的东西总是相同的类型,请使用!=。

下面是一个使用!==的例子。假设你有一个函数在失败的情况下返回一个整数或值FALSE0 == FALSE,但是0 !== FALSE,因为它们是不同的类型。因此,您可以测试FALSE并知道发生了错误,但是测试0并知道您得到了零但没有错误。