2008-08-31 133 views
78

如何將我的PHP apps中的Cookie設置爲HttpOnly cookies如何在PHP中設置使用HttpOnly Cookie

+0

http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies有瀏覽器的支持信息。 – Kzqai 2012-11-19 17:00:50

+2

@Tchalvak不,目前的答案仍然權威。自2008年以來,沒有任何改變關於PHP中的僅HTTP cookie設置_哪些瀏覽器支持僅HTTP cookie_是不同的問題,用不同的答案。 – lanzz 2012-11-22 10:11:34

+0

您可以使用`$ cookie-> setHttpOnly(true);`https://github.com/delight-im/PHP-Cookie – caw 2016-07-12 23:44:32

回答

75
  • 對於你的cookies,看到這個答案。
  • 對於PHP自己的會話cookiePHPSESSID,默認情況下),看@richie's answer

setcookie()setrawcookie()功能,推出了httponly參數,早在PHP 5.2.0的黑暗時代,使得這個漂亮並且容易。只需將第七參數設置爲true,按語法

簡化爲簡潔

setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly) 
setrawcookie($name, $value, $expire, $path, $domain, $secure, $httponly) 

功能語法要保留默認設置參數輸入NULL。 您可能還想考慮是否應該設置secure參數。

也可以使用舊的,低級別header()功能:

header("Set-Cookie: name=value; httpOnly"); 
4
<?php 
//None HttpOnly cookie: 
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie: 
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?> 

的早期版本Source

5

您可以指定它在設置cookie的功能see the php manual

setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE); 
13

要知道,僅Http不會停止跨站點腳本;相反,它會中和一種可能的攻擊,並且目前只能在IE上進行攻擊(FireFox在XmlHttpRequest中暴露HttpOnly cookie,而Safari根本沒有遵守)。無論如何,只要打開HttpOnly,但不要放棄一小時的輸出過濾和模糊測試。

+12

自08年以來,這種情況可能已經發生了變化。 這裏是一個更新/更新列表:http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies – Kzqai 2012-11-19 16:59:09

+0

我真的想刪除我的downvote。 – 2016-12-07 19:38:14

9

請注意,PHP會話cookie默認情況下不使用httponly

爲了做到這一點:

$sess_name = session_name(); 
if (session_start()) { 
    setcookie($sess_name, session_id(), null, '/', null, null, true); 
} 

這裏有幾個注意事項:

  • 你有session_start()
  • 之前調用session_name() 這也 設置的默認路徑爲「/ ',其中 是Opera所必需的,但其中的PHP 會話cookie默認不會執行 。
87

有關Apache的PHP自己的會話cookie:
添加到您的Apache配置或.htaccess

<IfModule php5_module> 
    php_flag session.cookie_httponly on 
</IfModule> 

這也可以在腳本中,只要它是session_start()之前稱爲設置。

ini_set('session.cookie_httponly', 1); 
3

您可以在頭文件中使用它。

// setup session enviroment 
ini_set('session.cookie_httponly',1); 
ini_set('session.use_only_cookies',1); 

這樣所有未來的cookies都會使用httponly。

1

的的php_flag命令的正確的語法是

php_flag session.cookie_httponly On 

並且要注意,只是第一個答案從服務器設置cookie並在這裏(例如,你可以看到「僅Http」指令。因此,對於測試中刪除Cookie從瀏覽器的每個測試請求。