บังคับให้ https ทั้งไซต์โดยไม่เปลี่ยนเส้นทาง http ไปยัง https


14

มีการพูดคุยกันมากมายในขณะที่ฉันกำลังค้นคว้าวิธีทำให้ทั้งไซต์ https คำตอบส่วนใหญ่คือการเปลี่ยนเส้นทาง http ไปยัง https (.htaccess ไฟล์) ซึ่งไม่ดีเพราะมันไม่ดีในการทำงานเดียวกันสองครั้ง (คำขอสองครั้ง) นอกจากนี้ "คนที่อยู่ตรงกลาง" เป็นคนแรกที่ใช้ http และฉันต้องการให้เว็บไซต์ของฉันไปที่ https โดยตรง มีวิธีอื่นที่จะทำให้ทั้งเว็บไซต์ของคุณ https และวิธีการทำเช่นนี้? ตัวอย่างเช่นเมื่อผู้ใช้พิมพ์ใน example.com นั้น example.com จะไปที่ https โดยอัตโนมัติโดยไม่เปลี่ยนเส้นทางจาก http หรืออย่างอื่นก่อน


หากคุณไม่ต้องการให้ผู้อื่นถูกเปลี่ยนเส้นทางไปยัง https คุณต้องการเกิดอะไรขึ้นแทน
Michael Hampton

@MichaelHampton บางทีฉันอาจถามคำถามเกี่ยวกับมือใหม่ แต่ฉันต้องการ "ลบ" http จริงและสิ่งเดียวที่มีอยู่ก็คือ https หรือหากไม่สามารถทำได้ฉันสามารถใช้การเปลี่ยนเส้นทางถ้ามันดีพอสำหรับความปลอดภัย ฉันได้ยินมาว่าการเปลี่ยนเส้นทาง http-> https นั้นไม่ค่อยดีนักเพราะมันยังเป็น http และการรับส่งข้อมูลสามารถถูกดักจับระหว่างการเปลี่ยนเส้นทาง
Marko Tamburic

HTTP 301 การเปลี่ยนเส้นทางถาวรเป็นเพื่อนของคุณอย่าลืมกำหนดเวลาหมดอายุ
Marcel

คุณสามารถลบ http ได้ แต่แล้วผู้ใช้จะได้รับเพียงข้อความปฏิเสธการเชื่อมต่อถ้าเธอไม่ได้เข้าสู่ https: // สำหรับบางเว็บไซต์นี่จะดีกว่าเพราะความปลอดภัยสูงกว่า หากมีรุ่น http ให้ใช้งานได้อาจเกิดขึ้นได้ว่าคุกกี้ถูกส่งไปพร้อมกับคำขอแรกที่ไม่ได้เข้ารหัส สำหรับสิ่งต่าง ๆ เช่นระบบจดหมาย บริษัท https เท่านั้น + การฝึกอบรมผู้ใช้ก็โอเคสำหรับเว็บไซต์ทั่วไปคุณอาจสูญเสียผู้เข้าชมจำนวนมาก
Josef พูดว่า Reinstate Monica

Afaik สามารถใช้ HTTP2 ได้ แต่ก็ยังไม่สามารถหลีกเลี่ยงการโจมตีด้วย ssl (อธิบายในคำตอบด้านล่าง)
peterh - Reinstate Monica

คำตอบ:


20

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


1
หากต้องการขยายคำตอบนี้ให้พิจารณาใช้การเขียน URL ใหม่และรหัสสถานะ 301 ตามที่ Mark Henderson ชี้ไปที่นี่: serverfault.com/questions/570288/…
Ryan Ries


22

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Securityอนุญาตให้เซิร์ฟเวอร์ของคุณระบุว่าโดเมนควรเข้าถึงได้ผ่าน HTTPS เท่านั้น สิ่งนี้ใช้ได้กับคำขอที่ตามมาเท่านั้นดังนั้นจึงมีการโหลด HTTP เริ่มต้น แต่คำขอในอนาคตจะโหลด HTTPS แม้ว่าจะมีคนพิมพ์ HTTP อย่างชัดเจน

IE ยังไม่รองรับ แต่วิชาเอกอื่น ๆ ทำ


มันยังไม่ป้องกันคำขอแรก
Jenny D

3
@ JennyD ฉันพูดตรงๆว่าในคำตอบของฉันแล้ว
ceejayoz

@JennyD คุณหมายถึงอะไรโดย "ป้องกัน"? MiM ไม่สามารถทำอะไรกับการเปลี่ยนเส้นทาง http -> https เว้นแต่ว่าพวกเขาทำกับ dns / การกำหนดเส้นทางในท้องถิ่นและทำให้โดเมนทั้งหมดของคุณปลอม ในกรณีนี้มันไม่สำคัญว่าคุณจะทำอะไรเนื่องจากเซิร์ฟเวอร์ของคุณไม่เคยถูกเข้าถึง
Red Alert

2
@ JennyD ดี HSTS เป็นทางออกที่ดีกว่าการโพสต์ของคุณซึ่งบอกว่า "การเปลี่ยนเส้นทางเป็นวิธีที่ทำได้" การเปลี่ยนเส้นทางสามารถ MITMed ได้ตลอดเวลา การเปลี่ยนเส้นทางด้วย HSTS สามารถทำได้เพียง MITMed ปีละครั้งต่อผู้ใช้ + เบราว์เซอร์ (หรือเวลาหมดอายุใด ๆ ก็ตามที่อยู่ในส่วนหัว) - ทุกครั้งที่ไม่ได้รับการร้องขอ
ceejayoz

1
@MarkoTamburic ไม่มีเหตุผลที่คุณไม่สามารถรวมสองอย่างเข้าด้วยกัน
ceejayoz

7

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

วิธีเดียวที่จะป้องกันได้ว่าจะไม่ให้บริการ HTTPเลย อย่าตอบในพอร์ต 80 ยกเว้นอาจจะให้บริการหน้าข้อความธรรมดาที่บอกให้ผู้ใช้ลองอีกครั้งด้วย HTTPS (แต่ไม่ได้ให้ลิงค์ซึ่งผู้โจมตีสามารถจัดการได้) วิธีนี้จะบังคับให้ผู้ใช้พิมพ์https://ลงในเบราว์เซอร์ดังนั้นพวกเขาจะเริ่มต้นการเชื่อมต่อกับ SSL และป้องกันการโจมตีของ MITM


3
มันเป็นค้าปิด https://แต่เป็นผู้ใช้ส่วนใหญ่จะไม่ได้ไปประเภท แต่พวกเขากำลังจะพูดว่า "ฮะไซต์แตก" แล้วออกไป สถานการณ์กรณีที่ดีที่สุดอาจwww.example.comตอบสนองทั้ง HTTP และ HTTPS แต่การที่แอพนั้นทำงานในบางสิ่งเช่นเดียวadmin.example.comกับ HTTPS เท่านั้น
ceejayoz

ตกลง ในทางปฏิบัติแทบไม่มีใครทำสิ่งนี้
Andrew Schulman

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

แต่ในทางทฤษฎีแล้วหากลูกค้าเริ่มต้นการเชื่อมต่อกับ SSL
Andrew Schulman

3
มันเป็นจริง - แต่ถ้าลูกค้าเริ่มต้นด้วย SSL, OP จะไม่มีปัญหา ปัญหาของเขาคือเมื่อพวกเขาเริ่มต้นโดยไม่มี SSL และไม่มีทางที่จะนำพวกเขาไปยัง SSL ได้อย่างน่าเชื่อถือหากมี MiM ก่อวินาศกรรมอย่างแข็งขัน
Red Alert


1

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

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

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

อ่านเพิ่มเติม: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

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