https URL พร้อมพารามิเตอร์โทเค็น: ปลอดภัยแค่ไหน?


91

บนไซต์ของเราเราจัดเตรียมการจำลองให้กับผู้ใช้ตามข้อมูลส่วนตัวของพวกเขา (มอบให้ผ่านแบบฟอร์ม) เราต้องการอนุญาตให้พวกเขากลับไปที่ผลการจำลองในภายหลัง แต่ไม่ต้องบังคับให้สร้างบัญชีล็อกอิน / รหัสผ่าน

เราคิดว่าจะส่งอีเมลพร้อมลิงก์ให้พวกเขาเพื่อให้พวกเขาได้รับผลลัพธ์กลับมา แต่โดยปกติแล้วเราต้องรักษาความปลอดภัย URL นี้เนื่องจากข้อมูลส่วนตัวเป็นอันตราย

ดังนั้นเราจึงตั้งใจที่จะส่งโทเค็น (เช่นตัวอักษรและตัวเลขผสมกัน 40 อักขระหรือแฮช MD5) ใน URL และใช้ SSL

สุดท้ายพวกเขาจะได้รับอีเมลในลักษณะนี้:

สวัสดีรับ
ผลลัพธ์ของคุณกลับมาที่ https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn

คุณคิดอย่างไรกับมัน? มีความปลอดภัยเพียงพอหรือไม่ คุณจะแนะนำอะไรฉันสำหรับการสร้างโทเค็น สิ่งที่เกี่ยวกับการส่งพารามิเตอร์ URL ในคำขอ https


คำตอบ:


101

SSL จะปกป้องพารามิเตอร์การค้นหาระหว่างการส่ง อย่างไรก็ตามอีเมลนั้นไม่ปลอดภัยและอีเมลอาจตีกลับไปตามเซิร์ฟเวอร์จำนวนเท่าใดก็ได้ก่อนที่จะไปถึงปลายทาง

ขึ้นอยู่กับเว็บเซิร์ฟเวอร์ของคุณ URL แบบเต็มอาจถูกบันทึกในไฟล์บันทึก ขึ้นอยู่กับความอ่อนไหวของข้อมูลที่คุณอาจไม่ต้องการให้คนไอทีของคุณเข้าถึงโทเค็นทั้งหมด

นอกจากนี้ URL ที่มีสตริงข้อความค้นหาจะถูกบันทึกไว้ในประวัติของผู้ใช้ของคุณทำให้ผู้ใช้รายอื่นในเครื่องเดียวกันสามารถเข้าถึง URL ได้

สุดท้ายและสิ่งที่ทำให้สิ่งนี้ไม่ปลอดภัยมากคือ URL จะถูกส่งไปในส่วนหัวของผู้อ้างอิงของคำขอทั้งหมดสำหรับทรัพยากรใด ๆ แม้แต่ทรัพยากรของบุคคลที่สาม ตัวอย่างเช่นหากคุณใช้ Google Analytics คุณจะส่งโทเค็น URL ให้ Google และทั้งหมดไปให้พวกเขา

ในความคิดของฉันนี่เป็นความคิดที่ไม่ดี


1
ฉันไม่ได้คิดเกี่ยวกับปัญหาผู้อ้างอิง HTTP แต่ลิงก์ url จะเปลี่ยนเส้นทางไปยังหน้าผลลัพธ์มันจะไม่ใช่หน้าที่ถูกต้อง (ไม่มีการวิเคราะห์ของ Google หรือสคริปต์ของบุคคลที่สามอื่น ๆ )
Flackou

6
เบราว์เซอร์ส่วนใหญ่ไม่ลบผู้อ้างอิงเมื่อเปลี่ยนจาก HTTPS เป็น HTTP ใช่หรือไม่
Kevin Mark

2
นี่คล้ายกับลิงค์การเปิดใช้งานผู้ใช้ (หรือรีเซ็ตรหัสผ่าน) ใช่ไหม กรณีนั้นควรจะจัดการอย่างไร? เว็บไซต์จำนวนมากส่ง URL รีเซ็ตไปยังอีเมล POST ไม่ใช่ตัวเลือกเนื่องจากควรคลิกได้ ขอขอบคุณ.
pinkpanther

3
แล้วทางออกคืออะไร?
RT

1
จะเกิดอะไรขึ้นถ้าโทเค็นใน url ไม่เหมือนกับโทเค็นที่ใช้สำหรับการร้องขอ api และใช้เวลาเพียงหนึ่งชั่วโมงอันตรายจะเป็นอย่างไร?
user1709076

14

ฉันจะใช้คุกกี้สำหรับสิ่งนั้น ขั้นตอนการทำงานควรเป็นดังนี้:

  1. ผู้ใช้มาที่ไซต์ของคุณเป็นครั้งแรก
  2. ไซต์ตั้งค่าคุกกี้
  3. ผู้ใช้ป้อนข้อมูล ข้อมูลจะถูกเก็บไว้ในฐานข้อมูลโดยใช้คีย์บางส่วนที่เก็บไว้ในคุกกี้
  4. เมื่อผู้ใช้ออกคุณจะส่งอีเมลพร้อมลิงก์ https: ถึงพวกเขา
  5. เมื่อผู้ใช้กลับมาไซต์จะค้นพบคุกกี้และสามารถนำเสนอข้อมูลเก่าแก่ผู้ใช้

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


4

SSL รักษาความปลอดภัยเนื้อหาของข้อมูลระหว่างการส่ง แต่ฉันไม่แน่ใจเกี่ยวกับ URL

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

หากอีเมลของผู้ใช้ถูกบุกรุกและผู้โจมตีได้รับลิงก์ก่อนแสดงว่าคุณถูกแฮ็ก แต่ผู้ใช้ก็มีปัญหาใหญ่เช่นกัน


11
การเชื่อมต่อ SSL ปลอดภัยก่อนที่จะส่ง URL
David

1

อีเมลไม่ปลอดภัยโดยเนื้อแท้ หากใครสามารถคลิกที่ลิงค์นั้นและเข้าถึงข้อมูลได้แสดงว่าคุณไม่ได้ปกป้องมันจริงๆ


แน่นอน แต่หลาย ๆ ไซต์ไม่กังวลเกี่ยวกับเรื่องนี้และส่งล็อกอิน / รหัสผ่านทางไปรษณีย์ แต่มันไม่ใช่เหตุผลที่จะเลียนแบบพวกมัน ...
Flackou

ฉันยอมรับว่าไม่มีเหตุผลที่จะเลียนแบบพวกเขา แต่โดยปกติแล้วพวกเขาจะบอกให้คุณเปลี่ยนรหัสผ่านหลังจากที่คุณเข้าสู่ระบบครั้งแรก
Jason Punyon

1

โทเค็นมีความปลอดภัยเมื่อส่งผ่าน SSL ปัญหาที่คุณจะพบก็คือผู้คนสามารถเข้าถึงได้ (ผู้ที่ไม่ได้ตั้งใจ) โดยสามารถดู URL ได้

หากเป็นข้อมูลส่วนตัวเช่น SSN ฉันไม่คิดว่าจะส่ง URL ทางอีเมล ฉันอยากให้พวกเขาสร้างชื่อผู้ใช้และรหัสผ่านสำหรับไซต์ เป็นเรื่องง่ายเกินไปที่จะประนีประนอมอีเมลที่มีข้อมูลประเภทนั้นเป็นอันตรายต่อคุณและสำหรับพวกเขา หากบัญชีของใครบางคนถูกรวมเข้าด้วยกันมันจะเข้าสู่การสอบถามซึ่งเป็นความผิดจริง ยิ่งปลอดภัยมากเท่าไหร่คุณก็ยิ่งดีขึ้นเท่านั้นจากจุดยืน CYA ที่เคร่งครัด


1
คุณพูดถูก: URL จะยังคงอยู่ในประวัติของเบราว์เซอร์เช่น
Flackou

0

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

ไม่มีปัญหาใด ๆ กับพารามิเตอร์ในคำขอ https โดยบังเอิญ


คุณถูกต้องเกี่ยวกับความเสี่ยงของการโจมตีด้วยกำลังดุร้าย ฉันไม่เห็นว่าเราจะป้องกันบอทจากการโจมตีประเภทนี้ได้อย่างไร การแบน IP "ยืนยัน" จะไม่เป็นการป้องกันที่เพียงพอ คุณมีความคิดเกี่ยวกับเรื่องนี้หรือไม่?
Flackou

อันที่จริงด้วยประเภทของช่องว่างสำคัญที่เรากำลังพูดถึงการใส่ if (this_ip_number_has_requested_an_invalid_token_today ()) sleep (5); ในสคริปต์ load_simulation ของคุณจะมีการป้องกันที่เพียงพออย่างสมบูรณ์แบบ (การ จำกัด อัตราเป็นหนึ่งในคุณสมบัติของกลไกการตรวจสอบสิทธิ์ที่ดี)
วุ่นวาย

ขอบคุณสำหรับคำตอบ. แต่ฉันคิดว่าบอทเดียวกันสามารถใช้ IP ที่แตกต่างกันได้อย่างง่ายดายซึ่งทำให้การ จำกัด อัตรา IP ไม่เพียงพอ ฉันผิดเหรอ?
Flackou

สิ่งที่ได้รับคือความพยายามที่ไม่ล่าช้าเพียงครั้งเดียวต่อ IP พื้นที่ที่อยู่ IP ไม่สามารถใช้ได้อย่างง่ายดายซึ่งเป็นประโยชน์
วุ่นวาย

0

มันเป็นความคิดที่ไม่ดี คุณจะลดความปลอดภัยด้วยการใช้งานที่ง่าย ตามที่กล่าวไว้ก่อนหน้า SSL จะปกป้องการถ่ายโอนข้อมูลระหว่างเซิร์ฟเวอร์และเบราว์เซอร์ไคลเอนต์เท่านั้นและจะป้องกันการโจมตีจากคนกลางเท่านั้น อีเมลมีความเสี่ยงและไม่ปลอดภัยมาก

ที่ดีที่สุดคือการตรวจสอบชื่อผู้ใช้และรหัสผ่านเพื่อเข้าถึงข้อมูล

ชอบไอเดียคุกกี้ไม่มากก็น้อย คุณควรเข้ารหัสข้อมูลคุกกี้ด้วย คุณควรสร้างโทเค็นด้วยเกลือและวลีสำคัญบวก $ _SERVER ['HTTP_USER_AGENT'] เพื่อจำกัดความน่าจะเป็นของการโจมตี เก็บข้อมูลที่ไร้สาระเกี่ยวกับไคลเอนต์ไว้ในคุกกี้เพื่อใช้ในการตรวจสอบ

คำสำคัญสามารถเก็บไว้ในคุกกี้เพื่อให้ใช้งานง่าย แต่โปรดทราบว่าคุกกี้สามารถขโมยได้ = (.

ดีกว่าให้ลูกค้าพิมพ์คำสำคัญที่เขาให้มาซึ่งจะถูกเก็บไว้ในฐานข้อมูลพร้อมกับข้อมูลของเขาด้วย

หรือสามารถใช้คีย์ได้ในกรณีที่บุคคลใช้เครื่องอื่นซึ่งแตกต่างจากพารามิเตอร์ $ _SERVER ['HTTP_USER_AGENT'] หรือเพียงแค่พลาดคุกกี้ ดังนั้นจึงสามารถโอนหรือตั้งค่าคุกกี้ได้

ตรวจสอบให้แน่ใจว่าข้อมูลที่ละเอียดอ่อนได้รับการเข้ารหัสในฐานข้อมูล คุณไม่เคยรู้ ;)


-1

คุณทราบดีว่าหากแฮ็กเกอร์คนใดสามารถเข้าถึงฐานข้อมูลของคุณได้จะมีการให้ข้อมูลส่วนตัวจำนวนมากอย่างอิสระ

หลังจากนั้นบอกเลยว่าไม่เลวร้ายอย่างที่คิด ฉันจะไม่ใช้ MD5 หรือ SHA1 เนื่องจากไม่ปลอดภัยสำหรับการแฮช พวกเขาสามารถ "ถอดรหัส" (ฉันรู้ว่ามันไม่ใช่การเข้ารหัส) ค่อนข้างง่าย

มิฉะนั้นฉันอาจจะใช้ข้อมูลที่สองที่จะไม่ถูกส่งทางอีเมลประเภทรหัสผ่าน เหตุผลนั้นค่อนข้างง่ายหากมีคนเข้าถึงอีเมลของผู้ใช้ (ค่อนข้างง่ายด้วย hotmail ถ้าคุณไม่ฆ่าเซสชันของคุณ) เขาจะสามารถเข้าถึงข้อมูลใด ๆ ที่ผู้ใช้ส่งมาได้

โปรดทราบว่า HTTPS จะรักษาความปลอดภัยและเข้ารหัสข้อมูลที่ส่งจากไซต์ของคุณไปยังผู้ใช้ปลายทาง ไม่มีอะไรอื่นให้ใช้เป็นเครื่องรับสัญญาณที่ปลอดภัย ไม่มีอะไรมากไปกว่านี้อีกแล้ว


แฮช SHA1 แบบเค็มถูกถอดรหัสในความหมายของคำอย่างไร?
Eli

"คุณทราบดีว่าหากแฮ็กเกอร์คนใดสามารถเข้าถึงฐานข้อมูลของคุณได้ ใช่ แต่มันไม่ใช่ปัญหาสำหรับทุกเว็บไซต์ ??
Flackou

@ Flackou ใช่ แต่ถ้าคุณสามารถเข้าถึงฐานข้อมูลของ paypal ได้คุณจะไม่พบข้อมูลบัตรเครดิตที่บันทึกไว้อย่างชัดเจนทุกอย่างถูกเข้ารหัส @Eli: theregister.co.uk/2005/02/17/sha1_hashing_broken
Erick

-1

จากสิ่งที่ฉันเข้าใจในความคิดของคุณในทางทฤษฎีใครบางคนสามารถพิมพ์สตริงอักขระแบบสุ่ม 40 ตัวหรือแฮช MD5 และรับรายละเอียดอื่น ๆ แม้ว่าสิ่งนี้อาจไม่น่าเป็นไปได้สูง แต่จะต้องเกิดขึ้นเพียงครั้งเดียว

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


5
SSN? จริงจังมั้ย? อย่างไรก็ตามฉันขอแนะนำให้คุณคำนวณจำนวนสตริงสุ่ม 40 อักขระที่มี มันเป็นมากกว่าแค่ "ไม่น่าเป็นไปได้สูง"
Eli

คุณถูกต้องเราควรเพิ่มพารามิเตอร์อื่นใน url เช่นอีเมล (แม้ว่า a..z + A..Z + 0..9 = 62 อักขระและ 62 ^ 40 เป็นตัวเลขที่ค่อนข้างใหญ่)
Flackou

ผู้ชาย 62 ^ 40 นั้นมากกว่าจำนวนอะตอมในจักรวาลมาก มันไม่สามารถเข้าใจได้อย่างแท้จริง
Eli

1
ฉันประหลาดใจที่มีคนจำนวนมากไม่สามารถเข้าใจขนาดของตัวเลขเหล่านี้ได้ หากคุณคาดเดาเหรียญเป็นล้านเหรียญในวินาทีเป็นไปได้มากว่าดวงอาทิตย์จะแผดเผาก่อนที่คุณจะได้รับผลกระทบ
เอลี

4
Richard ดูเหมือนว่าคุณกำลังชี้ให้เห็นถึงสิ่งที่มักเรียกว่า Birthday Paradox ... ไม่ใช่แค่จำนวนชุดค่าผสมที่เป็นไปได้ที่มีความสำคัญ แต่มีการใช้กี่ชุด ในกรณีนี้คุณต้องใช้ชุดค่าผสมประมาณ 2 ^ 119 จาก 62 ^ 40 ก่อนที่โอกาสจะมีนัยสำคัญ
erickson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.