Làm cách nào tôi có thể đặt cookie trong của tôi PHP apps
là HttpOnly cookies
?
$cookie->setHttpOnly(true);
với github.com/delight-im/PHP-Cookie
Làm cách nào tôi có thể đặt cookie trong của tôi PHP apps
là HttpOnly cookies
?
$cookie->setHttpOnly(true);
với github.com/delight-im/PHP-Cookie
Câu trả lời:
PHPSESSID
theo mặc định), hãy xem câu trả lời của @ richieCác setcookie()
và setrawcookie()
chức năng, đã giới thiệu httponly
tham số, trở lại thời kỳ đen tối của PHP 5.2.0, làm cho việc này trở nên dễ dàng và đẹp mắt. Chỉ cần đặt tham số thứ 7 thành true, theo cú pháp
Cú pháp hàm được đơn giản hóa để ngắn gọn
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Nhập NULL
các thông số bạn muốn giữ nguyên như mặc định. Bạn cũng có thể muốn xem xét xem bạn có nên thiết lập secure
tham số hay không.
Cũng có thể sử dụng header()
hàm cấp thấp hơn, cũ hơn :
header( "Set-Cookie: name=value; httpOnly" );
set_cookie
cuộc gọi ít dài dòng hơn nếu chúng ta không cần đặt các tham số khác. Ví dụ set_cookie($name, $value, httponly: true)
.
Đối với cookie phiên riêng của PHP trên Apache:
thêm cái 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>
Điều này cũng có thể được đặt trong một tập lệnh, miễn là nó được gọi trước đó session_start()
.
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
thành php_flag
không hoạt động. Tôi vừa thử nó trên máy chủ của mình ..
php_flag
, bạn cũng phải thay đổi giá trị - thành một trong hai on
hoặc off
- xem hướng dẫn.
Lưu ý rằng cookie phiên PHP không sử dụng httponly
theo mặc định.
Để làm việc đó:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Một số mục cần lưu ý ở đây:
session_name()
trướcsession_start()
Hãy lưu ý rằng HttpOnly không ngừng tạo tập lệnh trên nhiều trang web; thay vào đó, nó vô hiệu hóa một cuộc tấn công có thể xảy ra và hiện chỉ thực hiện điều đó trên IE (FireFox để lộ cookie HttpOnly trong XmlHttpRequest và Safari hoàn toàn không thực hiện điều đó). Bằng mọi cách, hãy bật HttpOnly, nhưng đừng bỏ qua dù chỉ một giờ lọc đầu ra và thử nghiệm lông tơ để đổi lấy nó.
Giải thích ở đây từ Ilia ... chỉ 5.2
httpOn chỉ hỗ trợ cờ cookie trong PHP 5.2
Như đã nêu trong bài viết đó, bạn có thể tự đặt tiêu đề trong các phiên bản PHP trước
header("Set-Cookie: hidden=value; httpOnly");
Bạn có thể chỉ định nó trong hàm đặt cookie xem hướng dẫn sử dụng php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
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ả cookie phiên trong tương lai sẽ chỉ sử dụng http.
Một giải pháp thanh lịch hơn vì PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);