วิธีอ่านคุกกี้ HttpOnly โดยใช้ JavaScript


94

มีวิธีใดบ้างในการอ่านคุกกี้ที่ปลอดภัยด้วย JavaScript?
ฉันพยายามทำโดยใช้document.cookieและเท่าที่ฉันเห็นในบทความนี้เกี่ยวกับคุกกี้ที่ปลอดภัยและการตั้งค่าสถานะ HttpOnlyฉันไม่สามารถเข้าถึงคุกกี้ที่ปลอดภัยด้วยวิธีนี้

ใครสามารถแนะนำวิธีแก้ปัญหา?


1
จากwiki : คุกกี้ที่ปลอดภัยจะใช้เฉพาะเมื่อเบราว์เซอร์กำลังเยี่ยมชมเซิร์ฟเวอร์ผ่าน HTTPS
Pavel Hodek

6
@Pavel Hodek นั่นผิดธง การตั้งค่าสถานะคุกกี้ "ปลอดภัย" ไม่มีส่วนเกี่ยวข้องกับค่าสถานะความปลอดภัย HTTPOnly พวกเขามีระบบการตั้งชื่อที่แย่มาก
โกง

1
ควรเปลี่ยนชื่อคำถามนี้เพื่อรวมค่าสถานะ "HttpOnly" ดูเหมือนว่าคำถามจะเกี่ยวกับการตั้งค่าสถานะ "ปลอดภัย"
ทอม

คำตอบ:


130

เบราว์เซอร์ที่แตกต่างกันจะเปิดใช้มาตรการรักษาความปลอดภัยที่แตกต่างกันเมื่อตั้งค่าสถานะHTTPOnly ตัวอย่างเช่น Opera และ Safari ไม่ได้ป้องกันไม่ให้จาวาสคริปต์เขียนลงในคุกกี้ อย่างไรก็ตามการอ่านเป็นสิ่งต้องห้ามเสมอในเวอร์ชันล่าสุดของเบราว์เซอร์หลักทั้งหมด

แต่ที่สำคัญกว่าทำไม คุณถึงต้องการอ่านHTTPOnlyคุกกี้? หากคุณเป็นนักพัฒนาเพียงแค่ปิดการตั้งค่าสถานะและตรวจสอบให้แน่ใจว่าคุณทดสอบโค้ดของคุณสำหรับ xss ฉันขอแนะนำให้คุณหลีกเลี่ยงการปิดใช้งานแฟล็กนี้หากเป็นไปได้ ควรHTTPOnlyตั้งค่าสถานะและ "ค่าสถานะที่ปลอดภัย" (ซึ่งบังคับให้ส่งคุกกี้ผ่าน https) เสมอ

หากคุณเป็นผู้บุกรุกแล้วคุณต้องการที่จะจี้เซสชั่น แต่มีวิธีง่ายๆในการจี้เซสชันแม้จะมีการHTTPOnlyตั้งค่าสถานะ คุณยังสามารถขี่เซสชันได้โดยไม่ต้องรู้รหัสเซสชัน หนอน MySpace Samyทำแบบนั้น ใช้XHRเพื่ออ่านโทเค็นCSRFจากนั้นดำเนินงานที่ได้รับอนุญาต ดังนั้นผู้โจมตีสามารถทำเกือบทุกอย่างที่ผู้ใช้ล็อกอินทำได้

ผู้คนเชื่อมั่นในHTTPOnlyธงมากเกินไปXSSยังสามารถใช้ประโยชน์ได้ คุณควรตั้งค่าอุปสรรคเกี่ยวกับคุณสมบัติที่ละเอียดอ่อน เช่นรหัสผ่านการเปลี่ยนแปลงที่ยื่นควรต้องใช้รหัสผ่านปัจจุบัน ความสามารถในการเป็นผู้ดูแลระบบเพื่อสร้างบัญชีใหม่ควรจะต้องแจ้งลบความคิดเห็นซึ่งเป็นเทคนิคการป้องกัน CSRFที่ไม่สามารถข้ามได้อย่างง่ายดายด้วยการXHR


คุณช่วยอธิบายรายละเอียดเกี่ยวกับหนอนได้ไหม ลิงก์นั้นใช้งานไม่ได้และไม่เข้าใจมากนักจากอินเทอร์เน็ตเช่นกัน ขอขอบคุณ.
Abhishek Jebaraj

@Abhishek Jebaraj หากคุณไม่เข้าใจ sammy worm หรือโทเค็น CSRF ให้ลองทำความเข้าใจข้อ จำกัด ของนโยบายที่มาเดียวกันก่อน
rook

ฉันต้องการรับวันหมดอายุของคุกกี้ http เท่านั้นฉันต้องทำอย่างไร
PirateApp

50

จุดรวมของคุกกี้ HttpOnly คือ JavaScript ไม่สามารถเข้าถึงได้

วิธีเดียว (ยกเว้นการใช้ประโยชน์จากข้อบกพร่องของเบราว์เซอร์) สำหรับสคริปต์ของคุณในการอ่านคือการมีสคริปต์การทำงานร่วมกันบนเซิร์ฟเวอร์ที่จะอ่านค่าคุกกี้และสะท้อนกลับเป็นส่วนหนึ่งของเนื้อหาการตอบกลับ แต่ถ้าคุณทำได้และจะทำเช่นนั้นทำไมต้องใช้คุกกี้ HttpOnly ตั้งแต่แรก?


คุณอาจต้องการทดสอบเพื่อให้ทราบว่าเบราว์เซอร์ของผู้ใช้จัดการกับ HttpOnly สำหรับคุกกี้อย่างเหมาะสมหรือไม่ก่อนที่จะอนุญาตให้ผู้ใช้ใช้ไซต์ของคุณจากเบราว์เซอร์นั้น ๆ ฉันกำลังมองหาตัวอย่างที่สามารถรับรองการรองรับเบราว์เซอร์ของการตั้งค่าสถานะ HttpOnly MS ยังให้คำแนะนำในการทำเช่นนั้น แต่ไม่มีคำแนะนำเพิ่มเติมเกี่ยวกับวิธีการ: การลด XSS ด้วย HttpOnly
Ursegor

ฉันพบว่าพวกเขาแนะนำรายการเบราว์เซอร์เวอร์ชันสีขาว ฉันอาจจะคิดผิด แต่จะเป็นวิธีที่สะดวกในการตรวจสอบการสนับสนุนจากจาวาสคริปต์แทนหรือไม่? คุณช่วยแนะนำสิ่งนี้ได้ไหม
Ursegor

0

วัตถุประสงค์ของคุกกี้ของ Httponly ไม่สามารถเข้าถึงได้โดยสคริปต์ดังนั้นคุณจึงไม่สามารถทำได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.