Làm cách nào để đặt cookie trong số PHP apps
là HttpOnly cookies
?Làm cách nào để bạn thiết lập cookie HttpOnly trong PHP
Trả lời
- Đố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()
và 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");
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");
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
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);
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ó.
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
Tôi thực sự muốn xóa bỏ phiếu giảm giá của mình. –
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ướcsession_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 .
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
Đố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);
+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'. –
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 –
@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
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.
Chỉ cần FYI session.use_only_cookies được bật theo mặc định trong PHP> 5.3 –
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
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.
http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies Có thông tin hỗ trợ trình duyệt – Kzqai
@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
Bạn có thể sử dụng '$ cookie-> setHttpOnly (true);' với https://github.com/delight-im/PHP-Cookie – caw