Menggunakan URL Aman berdasarkan konteks

9

Saya terbiasa menggunakan berbagai metode untuk menghasilkan URL aman berdasarkan konteks, yaitu:

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

Ini berfungsi baik untuk membangun tautan yang akan mengarahkan ke halaman aman saat Anda berada dalam mode aman (atau hanya akan menautkan ke halaman tidak aman jika tidak menggunakan mode aman).

Masalah yang saya lihat adalah Magento hanya memperlakukan beberapa halaman khusus karena harus aman (akun pelanggan, checkout, dll). Apa yang saya inginkan adalah agar Magento selalu menggunakan tautan aman jika pengguna saat ini dalam mode aman , atau menggunakan tautan tidak aman jika pengguna berada dalam mode tidak aman.

Dari apa yang bisa saya katakan, satu-satunya pilihan nyata saya adalah:

  1. Ubah setiap instance $this->getUrl()agar mirip dengan cuplikan di atas.
  2. Setel non-aman base_urluntuk menggunakan HTTPS, memaksa semua halaman untuk mengamankan.

Apakah ada metode yang lebih baik yang tidak perlu harus mengubah setiap panggilan $this->getUrl()atau memaksa semua halaman ke HTTPS terlepas dari konteks pengguna?

- edit -

Saya sadar saya dapat memodifikasi /app/code/core/Mage/Core/Model/Url.php->setRouteParams()metode, meskipun saya berharap ada cara yang lebih bersih.

pspahn
sumber

Jawaban:

5

Memiliki Magento selalu cocok dengan protokol yang digunakan pengguna saat ini akan menimbulkan masalah, seperti tidak memuntahkan URL aman ke halaman login pelanggan ketika pada URL yang tidak diamankan seperti halaman beranda situs.

Apa yang saya sarankan lakukan adalah menambahkan beberapa konfigurasi XML ke file konfigurasi modul khusus untuk mendeklarasikan rute tambahan yang Anda harus amankan. Anda melakukan ini dengan memiliki ini di file config.xml Anda (menggantikan module_or_route_iddengan sesuatu yang unik:

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

Jika Anda mengintip config.xml untuk modul Mage_Customer Anda akan melihat contoh ini di mana jalur "/ pelanggan /" telah didefinisikan sebagai aman.

Catatan: jika module_or_route_idbagian dari contoh di atas tidak unik, hanya satu definisi yang akan digunakan, sehingga sesuatu tidak diamankan dengan benar. Pastikan nama simpul itu unik. :)

Karena ini berdasarkan jalur, saya tidak yakin bagaimana ini akan langsung berlaku untuk URL setiap halaman konten CMS, misalnya, karena mereka semua masih akan berbagi rute / jalur karena ini adalah penulisan ulang yang mengirim semuanya ke CMS yang sama pengontrol.

Jika Anda benar-benar membutuhkan seluruh situs untuk menjalankan HTTPS, maka Anda harus menggunakan https: // URL untuk pengaturan URL dasar aman dan tidak aman.

davidalger
sumber
Saya lebih suka hanya memodifikasi model URL inti daripada menyertakan rute aman tambahan untuk setiap rute frontend yang mungkin (terutama rute 'tidak terlihat' seperti catalogsearch / ajax / sarankan, dll). Ya itu adalah perubahan inti, tetapi ini merupakan tambahan tiga baris kode vs berapa banyak yang diperlukan untuk mencakup semua rute frontend. Dalam situasi di mana itu hanya beberapa rute yang ingin Anda ubah, saran Anda jauh lebih masuk akal.
pspahn
Di masa lalu kami telah memodifikasi Mage_Core_Model_Store::getBaseUrluntuk membuat toko kami selalu aman ketika disematkan di tab Facebook. Ada beberapa hal lain yang perlu dipertimbangkan, seperti memblok penyimpanan cache yang mana yang lebih dulu menjadi hit (Anda harus menambahkan sesuatu ke kunci cache). Anda juga akan memiliki seperti yang dikatakan David, tautan yang tidak aman untuk masuk / keluar, atau pada akhirnya setiap pelanggan di situs Anda akan berakhir dalam mode aman jika mereka pernah masuk atau menekan kasir.
Peter O'Callaghan
1
@ pspahn Sudahkah Anda menganggap bahwa menyetel /catalogsearch/jalur sebagai aman harus mencakup apa pun yang cocok /catalogsearch/*/*/? Yaitu hanya perlu satu aturan untuk membuat semuanya catalogsearchaman.
davidalger
@Cags menunjukkan sesuatu yang saya lewatkan termasuk dalam jawaban saya, dan itu adalah catatan tentang kunci cache ... jika URL tidak konsisten satu atau yang lain, Anda akan memiliki blok cache mengacaukan tautan yang dihasilkan.
davidalger
Itu poin bagus tentang kunci cache. Sepertinya cara terbaik untuk pergi adalah menjalankan semua HTTPS.
pspahn
2

Tetapkan berikut ini di app/etc/config.xmlfile Anda :

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

Ini berfungsi di Magento 1.9.1

Jika pengguna menggunakan https, ini akan memaksa semua url untuk menulis ulang ke https.

Artistan
sumber
Bahkan lebih baik: Jangan gunakan config.xml tetapi local.xml
Michael
1

Ada opsi yang sederhana namun penting dalam Sistem | Konfigurasi | Web ~ di mana Anda harus mengatakan "gunakan url aman di frontend" - jika Anda setel ke ya, maka halaman yang dimuat oleh https akan menggunakan tautan https,

tidak perlu menulis kode atau memberikan konfigurasi tambahan dalam banyak kasus

dancl
sumber