การใช้ URL ที่ปลอดภัยตามบริบท


9

ฉันคุ้นเคยกับการใช้วิธีการต่าง ๆ เพื่อสร้าง URL ที่ปลอดภัยตามบริบทเช่น:

$this->getUrl('my-page', array('_forced_secure' => $this->getRequest()->isSecure()));

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

ปัญหาที่ฉันกำลังมองหาคือวีโอไอพีจะใช้กับหน้าพิเศษบางหน้าเท่านั้นที่จำเป็นต้องมีความปลอดภัย (บัญชีลูกค้าการชำระเงินและอื่น ๆ ) สิ่งที่ฉันต้องการคือให้ Magento ใช้ลิงก์ที่ปลอดภัยเสมอหากผู้ใช้อยู่ในโหมดปลอดภัยหรือใช้ลิงก์ที่ไม่ปลอดภัยหากผู้ใช้อยู่ในโหมดที่ไม่ปลอดภัย

จากสิ่งที่ฉันสามารถบอกได้ตัวเลือกที่แท้จริงของฉันคือ:

  1. แก้ไขทุกอินสแตนซ์ของ$this->getUrl()ให้คล้ายกับตัวอย่างด้านบน
  2. ตั้งค่าไม่ปลอดภัยbase_urlให้ใช้ HTTPS บังคับให้ทุกหน้าปลอดภัย

มีวิธีที่ดีกว่าที่จะไม่ต้องเปลี่ยนการเรียก$this->getUrl()หรือบังคับให้ทุกหน้าเป็น HTTPS โดยไม่คำนึงถึงบริบทของผู้ใช้หรือไม่?

- แก้ไข -

ฉันรู้ว่าฉันสามารถแก้ไข/app/code/core/Mage/Core/Model/Url.php->setRouteParams()วิธีการได้แม้ว่าฉันหวังว่าจะมีวิธีที่สะอาดกว่า

คำตอบ:


5

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

สิ่งที่ฉันขอแนะนำให้ทำคือการเพิ่ม XML การกำหนดค่าบางอย่างลงในไฟล์กำหนดค่าของโมดูลที่กำหนดเองเพื่อประกาศเส้นทางเพิ่มเติมที่คุณต้องมีความปลอดภัย คุณทำได้โดยมีสิ่งนี้ในไฟล์ config.xml ของคุณ (แทนที่module_or_route_idด้วยสิ่งที่ไม่ซ้ำกัน:

<config>
    <frontend>
        <secure_url>
            <module_or_route_id>/route/</module_or_route_id>
        </secure_url>
    </frontend>
</config>

หากคุณมองดูที่ config.xml สำหรับโมดูล Mage_Customer คุณจะเห็นตัวอย่างของสิ่งนี้ซึ่งพา ธ "/ customer /" ถูกกำหนดให้ปลอดภัย

หมายเหตุ: หากmodule_or_route_idส่วนของตัวอย่างข้างต้นไม่ซ้ำกันจะมีการใช้คำจำกัดความเพียงคำเดียวเท่านั้นจึงนำไปสู่สิ่งที่ไม่ปลอดภัยอย่างเหมาะสม ตรวจสอบให้แน่ใจว่าชื่อโหนดไม่ซ้ำกัน :)

เนื่องจากนี่คือเส้นทางที่ใช้ แต่ฉันไม่แน่ใจว่าจะนำไปใช้กับ URL ของหน้าเนื้อหา CMS แต่ละหน้าได้โดยตรงอย่างไรเนื่องจากพวกเขาจะยังคงใช้เส้นทาง / เส้นทางร่วมกันเนื่องจากมันเป็นการเขียนซ้ำซึ่งส่งทั้งหมดไปยัง CMS เดียวกัน ตัวควบคุม

หากคุณต้องการใช้ HTTPS ทั้งไซต์จริงๆคุณจะต้องใช้ https: // URL สำหรับทั้งการตั้งค่า URL พื้นฐานที่ปลอดภัยและไม่ปลอดภัย


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

ในอดีตเราได้ปรับเปลี่ยนMage_Core_Model_Store::getBaseUrlเพื่อให้ร้านค้าของเราปลอดภัยเสมอเมื่อฝังในแท็บ Facebook มีสิ่งอื่น ๆ ที่ควรพิจารณาเช่นบล็อกแคชที่เก็บสิ่งใดก็ตามที่ถูกกดครั้งแรก (คุณจะต้องเพิ่มบางอย่างในคีย์แคช) นอกจากนี้คุณยังจะมีอย่างที่เดวิดพูดลิงก์ที่ไม่ปลอดภัยเพื่อเข้าสู่ระบบ / เช็คเอาต์หรือในที่สุดลูกค้าทุกคนในเว็บไซต์ของคุณก็จบลงด้วยโหมดปลอดภัยหากพวกเขาลงชื่อเข้าใช้หรือกดเช็คเอาต์
Peter O'Callaghan

1
@pspahn คุณเคยคิดไหมว่าการกำหนด/catalogsearch/เส้นทางให้ปลอดภัยควรมีการจับคู่สิ่งใดไว้/catalogsearch/*/*/บ้าง คือมันจะใช้กฎเดียวเท่านั้นที่จะทำให้ทุกอย่างอยู่ภายใต้catalogsearchความปลอดภัย
davidalger

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

นั่นเป็นจุดที่ดีเกี่ยวกับคีย์แคช ดูเหมือนว่าวิธีที่ดีที่สุดที่จะไปคือเพียงเรียกใช้ HTTPS ทุกอย่าง
pspahn

2

ตั้งค่าต่อไปนี้ในapp/etc/config.xmlไฟล์ของคุณ:

<?xml version="1.0"?>
<config>
  <frontend>
    <secure_url>
      <all>/</all>
    </secure_url>
  </frontend>
</config>

งานนี้ใน Magento 1.9.1

หากผู้ใช้ใช้ https สิ่งนี้ควรบังคับให้ URL ทั้งหมดเขียนใหม่เป็น https


ดียิ่งขึ้น: อย่าใช้ config.xml แต่ local.xml
Michael

1

นี่เป็นตัวเลือกที่เข้าใจง่าย แต่สำคัญในระบบ | การกำหนดค่า | เว็บ ~ ที่คุณต้องพูดว่า "ใช้ url ที่ปลอดภัยในส่วนหน้า" - หากคุณตั้งค่านี้เป็นใช่แล้วหน้าเว็บที่โหลดโดย https จะใช้ลิงค์ https

ไม่จำเป็นต้องเขียนรหัสหรือกำหนดค่าเพิ่มเติมในกรณีส่วนใหญ่

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