2008-08-31 21 views
78

Làm cách nào để đặt cookie trong số PHP appsHttpOnly cookies?Làm cách nào để bạn thiết lập cookie HttpOnly trong PHP

+0

http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies Có thông tin hỗ trợ trình duyệt – Kzqai

+2

@Tchalvak Không, câu trả lời hiện tại vẫn có thẩm quyền Không có gì thay đổi kể từ năm 2008 về cài đặt cookie chỉ HTTP trong PHP. Các trình duyệt hỗ trợ cookie chỉ có HTTP là khác nhau câu hỏi, với một câu trả lời khác. – lanzz

+0

Bạn có thể sử dụng '$ cookie-> setHttpOnly (true);' với https://github.com/delight-im/PHP-Cookie – caw

Trả lời

75
  • Đối cookie, xem câu trả lời này.
  • Đối với Cookie PHP riêng phiên (PHPSESSID, theo mặc định), xem @richie's answer

Các setcookie()setrawcookie() chức năng, giới thiệu các thông số httponly, trở lại trong lứa tuổi tối tăm của PHP 5.2.0, làm cho này đẹp và dễ dàng. Đơn giản chỉ cần đặt tham số 7 là true, theo cú pháp

cú pháp Chức năng đơn giản hóa cho ngắn gọn

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

Nhập NULL cho các thông số bạn muốn vẫn là mặc định. Bạn cũng có thể cân nhắc xem có nên đặt thông số secure hay không.

Nó cũng có thể sử dụng cũ, cấp dưới header() chức năng:

header("Set-Cookie: name=value; httpOnly"); 
5

Giải thích ở đây từ Ilia ... 5.2 chỉ dù

httpOnly cookie flag support in PHP 5.2

Như đã trình bày trong bài viết đó, bạn có thể đặt tiêu đề cho mình trong các phiên bản trước của PHP

header("Set-Cookie: hidden=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

Bạn có thể chỉ định nó trong hàm bộ Cookie see the php manual

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

Hãy nhận biết rằng HttpOnly không chỉ dừng lại cross-site scripting; thay vào đó, nó trung hòa một cuộc tấn công có thể xảy ra, và hiện tại chỉ có trên IE (FireFox trưng ra các cookie HttpOnly trong XmlHttpRequest, và Safari không tôn trọng nó). Bằng mọi cách, hãy bật HttpOnly, nhưng đừng bỏ qua cả một giờ lọc đầu ra và kiểm tra mờ trong giao dịch cho nó.

+12

Tình huống này có thể đã thay đổi kể từ '08, bây giờ. Đây là danh sách hiện tại/cập nhật hơn: http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies – Kzqai

+0

Tôi thực sự muốn xóa bỏ phiếu giảm giá của mình. –

9

Lưu ý rằng cookie phiên PHP không sử dụng httponly theo mặc định.

Để làm điều đó:

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

Một vài mặt hàng đáng chú ý ở đây:

  • Bạn phải gọi session_name() trước session_start()
  • này cũng đặt đường dẫn mặc định để '/ ', cần cho Opera nhưng PHP cookie phiên nào không thực hiện theo mặc định .
+11

http://php.net/manual/en/function.session-set-cookie-params.php Nó có thể được thực hiện tự động thông qua hàm PHP ở trên thay vì mã hóa tùy chỉnh. – Ryaner

87

Đối với cookie phiên riêng của PHP trên Apache:
thêm video này vào cấu hình Apache của bạn hoặc .htaccess

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

này cũng có thể được đặt trong một kịch bản, miễn là nó được gọi trước khi session_start().

ini_set('session.cookie_httponly', 1); 
+9

+1 vì đây là một điều tốt (để bảo mật) có sẵn trên toàn bộ máy chủ của bạn nhưng thay vào đó được thêm vào 'php.ini'. –

+8

Xin lưu ý php_flag nên được sử dụng thay thế: "Không sử dụng php_value để đặt giá trị boolean. Php_flag nên được sử dụng thay thế." http://php.net/manual/en/configuration.changes.php –

+0

@OndrejMachulda Thay đổi 'php_value' thành' php_flag' không hoạt động. Tôi chỉ thử nó trên máy chủ của tôi .. – Nate

3

Bạn có thể sử dụng điều này trong tệp tiêu đề.

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

Bằng cách này, tất cả các cookie trong tương lai sẽ sử dụng httponly.

+0

Chỉ cần FYI session.use_only_cookies được bật theo mặc định trong PHP> 5.3 –

+0

và đúng là "tất cả các cookie ** phiên ** trong tương lai" sẽ sử dụng httponly, chứ không phải tùy chỉnh ... – qdev

1

Cú pháp đúng của lệnh php_flag là

php_flag session.cookie_httponly On 

Và được nhận thức, câu trả lời chỉ là lần đầu tiên từ máy chủ thiết lập các cookie và ở đây (ví dụ Bạn có thể xem "HttpOnly" chỉ thị. Vì vậy, để thử nghiệm xóa cookie từ trình duyệt sau mỗi yêu cầu thử nghiệm.