2013-12-20 71 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並知道您得到了零但沒有錯誤。