บังคับใช้ HTTPS ในทุกหน้าในส่วนหน้าไม่ใช่แค่เพียงชำระเงิน / บัญชี


10

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

ฉันต้องการบังคับให้ URL ที่ปลอดภัยในทุกหน้า สิ่งที่ฉันทำตอนนี้คือเปลี่ยน URL ฐานที่ไม่ปลอดภัยเป็น "https: // .... "

ดูเหมือนว่าจะทำงาน หากผู้ใช้ใช้ HTTP พวกเขาจะถูกเปลี่ยนเส้นทางไปยัง https แต่ฉันสงสัยว่านี่เป็นวิธีที่ถูกต้องหรือไม่ ผลข้างเคียงใด ๆ


ive ได้ยินว่าวิธีที่ถูกต้องคือการแทนที่เส้นทางที่ปลอดภัยใน config.xml

คำตอบ:


16

คำตอบเริ่มต้นคือตั้ง url ฐานที่ไม่ปลอดภัยเป็น https: // ขึ้นอยู่กับการตั้งค่าของคุณสิ่งนี้ก็เพียงพอแล้วสำหรับการเปลี่ยนเส้นทางหากผู้ใช้ลองใช้ http: //

บางทีการเปลี่ยนเส้นทางในระดับเว็บเซิร์ฟเวอร์อาจดีกว่าเพราะหลีกเลี่ยงการร้องขอผ่าน PHP ก่อน

และถ้าคุณต้องการการแก้ปัญหาที่แท้จริงของการรักษาความปลอดภัยที่ดีที่สุดที่คุณควรเพิ่มเว็บไซต์ของคุณบนhttps://hstspreload.appspot.com/ แต่ระวังด้วยหากคุณต้องการเปลี่ยนใบรับรองของคุณอาจทำให้เกิดปัญหาใหญ่ ให้ Hoster ของคุณห่วงใยในส่วนนี้


ทำไมต้องเปลี่ยนใบรับรอง HSTS ทำให้ "เท่านั้น" ทำให้เบราว์เซอร์สามารถเข้าถึงหน้าต่อจากนี้ผ่านทาง HTTPS เท่านั้น ฉันทำโมดูลสำหรับสิ่งนี้: github.com/ikonoshirt/StrictTransportSecurity
Fabian Blechschmidt

1
บางทีฉันอาจรวมกันนี้กับการปักหมุดใบรับรอง คิดว่าการโหลดล่วงหน้านั้นจะมีลายนิ้วมือสำหรับใบรับรองด้วย
Flyingmana

2
@Fliesmana: หากคุณดูรายการโหลด HSTS จริงในแหล่ง Chromiumรายการส่วนใหญ่ไม่มีลายนิ้วมือใบรับรองหรือการเรียงลำดับเพียงแค่ชื่อโดเมน
Leigh Brenecki

4

คุณสามารถทำได้ด้วย. htaccess ใน apache ใช้บรรทัดเหล่านี้:

############################ Force SSL ############################
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
############################ Force SSL ############################

4

สำหรับใครก็ตามที่เจอสิ่งนี้ (เหมือนที่ฉันเคยทำ)

อย่าใช้ htaccess ภายใต้ผู้ดูแลระบบไปStores -> General -> Web and change -> Use Secure URLs on Storefront -> Yes and Use Secure URLs in Admin -> Yes

ไม่จำเป็นต้องแก้ไขไฟล์ใด ๆ


1
เดี๋ยวก่อนเวลาที่ดี ตอบเมื่อวานนี้ ฉันเชื่อว่านี่ควรเป็นคำตอบ ... อย่างน้อยก็บังคับให้ https ที่ส่วนหน้าและจัดการให้ฉันโดยไม่ต้องแตะ apache คำตอบที่เลือกในปัจจุบันเปิดใช้งาน HTTPS แต่คำตอบนี้ "บังคับ" https
Joe Fletcher

1
ตรงนี้เป็นสิ่งที่ผู้ถามกล่าวว่าพยายามของพวกเขาและที่มันไม่ได้ทำงาน
Dom

2

ฉันได้ลองใช้วิธีแก้ไขปัญหาก่อนหน้านี้แล้วและแม้ว่าพวกเขาจะทำงานได้ แต่ปิดกั้นฉันไว้จากแผงควบคุม (ไม่เข้าใจเหตุผลทั้งหมด)

เมื่อต้องการเข้าสู่แผงการดูแลระบบอีกครั้งฉันต้องเข้า phpmyadmin และเข้าสู่ตารางฐานข้อมูลcore_config_dataและเปลี่ยนเส้นทางทั้งสอง: web / secure / use_in_adminhtmlและweb / unsecure / base_urlกลับไปที่แผง admin อีกครั้ง และอย่าลืมลบแคชโฟลเดอร์ถ้าคุณต้องทำการแก้ไขในฐานข้อมูล ...

ดังนั้นฉันจึงใช้โซลูชัน. htaccess ต่อไปนี้แทนซึ่งให้ฉันเข้าสู่ระบบด้วยเช่นกัน

# AFTER THIS SECTION
############################################
## workaround for HTTP authorization
## in CGI environment
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# PUT THIS 
############# ALL PAGES HTTPS #################
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !/admin/
RewriteCond %{REQUEST_URI} !/downloader/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
############# ALL PAGES HTTPS #################

หวังว่าจะช่วยใครซักคน


0

แนวทางส่วนใหญ่ใน. htaccess จะเปลี่ยนเส้นทางหน้าเว็บส่วนใหญ่ไปที่บ้านเมื่อเข้าถึงผ่าน http

ตัวอย่าง: http://www.mystore.com/productA.html => http://www.mystore.com/

แทนhttps://www.mystore.com/productA.html

ฉันแก้ไขด้วยการเขียน. htaccess ต่อไปนี้ (แน่นอนว่า Apache เท่านั้น):

#Force SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ดูแหล่งที่มา

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