ฉันจะตั้งค่าคุกกี้PHP apps
เป็นของฉันได้HttpOnly cookies
อย่างไร?
$cookie->setHttpOnly(true);
กับgithub.com/delight-im/PHP-Cookie
ฉันจะตั้งค่าคุกกี้PHP apps
เป็นของฉันได้HttpOnly cookies
อย่างไร?
$cookie->setHttpOnly(true);
กับgithub.com/delight-im/PHP-Cookie
คำตอบ:
PHPSESSID
โดยค่าเริ่มต้น) โปรดดูคำตอบของ @ richiesetcookie()
และsetrawcookie()
ฟังก์ชั่นแนะนำhttponly
พารามิเตอร์กลับมาอยู่ในยุคมืดของ PHP 5.2.0 ทำให้นี้ดีและใช้งานง่าย เพียงตั้งค่าพารามิเตอร์ที่ 7 เป็นจริงตามไวยากรณ์
ไวยากรณ์ของฟังก์ชันง่ายขึ้นสำหรับความกะทัดรัด
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" );
set_cookie
โทรให้ละเอียดน้อยลงหากเราไม่จำเป็นต้องตั้งค่าพารามิเตอร์อื่น ๆ ตัวอย่างเช่นset_cookie($name, $value, httponly: true)
.
สำหรับคุกกี้เซสชันของ PHP บน Apache:
เพิ่มสิ่งนี้ในการกำหนดค่า Apache ของคุณหรือ.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
นอกจากนี้ยังสามารถตั้งค่าภายในสคริปต์ได้ตราบเท่าที่มีการเรียกใช้ก่อนหน้าsession_start()
นี้
ini_set( 'session.cookie_httponly', 1 );
php.ini
.
php_value
เป็นใช้php_flag
ไม่ได้ เพิ่งลองใช้งานบนเซิร์ฟเวอร์ ..
php_flag
คุณต้องเปลี่ยนค่าด้วย - เป็นอย่างใดอย่างหนึ่งon
หรือoff
- ดูคู่มือ
โปรดทราบว่าคุกกี้เซสชัน PHP ไม่ได้ใช้httponly
โดยค่าเริ่มต้น
ในการทำเช่นนั้น:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
หมายเหตุสองสามข้อที่นี่:
session_name()
มาก่อนsession_start()
โปรดทราบว่า HttpOnly ไม่ได้หยุดการเขียนสคริปต์ข้ามไซต์ แต่จะทำให้การโจมตีที่เป็นไปได้นั้นเป็นกลางแทนและในปัจจุบันทำได้เฉพาะบน IE (FireFox เปิดเผยคุกกี้ HttpOnly ใน XmlHttpRequest และ Safari ไม่ให้เกียรติเลย) โดยทั้งหมดให้เปิด HttpOnly แต่อย่าทิ้งการกรองเอาต์พุตและทดสอบฟัซซ์แม้แต่ชั่วโมงเดียวในการแลกเปลี่ยน
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
คำอธิบายที่นี่จาก Ilia ... 5.2 เท่านั้น
http สนับสนุนเฉพาะคุกกี้แฟล็กใน PHP 5.2
ตามที่ระบุไว้ในบทความนั้นคุณสามารถตั้งค่าส่วนหัวด้วยตัวคุณเองใน PHP เวอร์ชันก่อนหน้า
header("Set-Cookie: hidden=value; httpOnly");
คุณสามารถระบุได้ในฟังก์ชัน set cookies โปรดดูคู่มือ php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
คุณสามารถใช้สิ่งนี้ในไฟล์ส่วนหัว
// setup session enviroment
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
วิธีนี้คุกกี้เซสชันในอนาคตทั้งหมดจะใช้ httponly
ไวยากรณ์ที่ถูกต้องของคำสั่ง php_flag คือ
php_flag session.cookie_httponly On
และโปรดทราบเพียงคำตอบแรกจากเซิร์ฟเวอร์ตั้งค่าคุกกี้และที่นี่ (ตัวอย่างเช่นคุณสามารถดูคำสั่ง "HttpOnly" ดังนั้นสำหรับการทดสอบการลบคุกกี้ออกจากเบราว์เซอร์หลังจากการร้องขอการทดสอบทุกครั้ง
โซลูชันที่สวยงามยิ่งขึ้นตั้งแต่PHP> = 7.0
session_start(['cookie_lifetime' => 43200,'cookie_secure' => true,'cookie_httponly' => true]);