Bağlama dayalı Güvenli URL'leri kullanma


9

Bağlama dayalı güvenli bir URL oluşturmak için çeşitli yöntemler kullanarak tanıdık, yani:

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

Bu , güvenli moddayken güvenli bir sayfaya yönlendirecek bağlantılar oluşturmak için harika çalışır (veya güvenli mod kullanılmıyorsa güvenli olmayan sayfaya bağlanır ).

Baktığım sorun Magento'nun sadece birkaç özel sayfayı güvenli olması gerektiği gibi (müşteri hesabı, ödeme vb.) Ele almasıdır. Ne tercih ediyorum kullanıcı şu anda güvenli modunda ise Magento her zaman güvenli bir bağlantı kullanmak ya da kullanıcı güvenli olmayan modunda ise güvenli olmayan bağlantı kullanmak olacaktır.

Söyleyebileceğim kadarıyla, tek gerçek seçeneklerim:

  1. Her bir örneğini $this->getUrl()yukarıdaki snippet'e benzer olacak şekilde değiştirin.
  2. base_urlHTTPS'yi kullanmak için güvenli olmayan olarak ayarlayın , tüm sayfaları güven altına almaya zorlayın.

$this->getUrl()Kullanıcının bağlamından bağımsız olarak her sayfayı değiştirmek veya tüm sayfaları HTTPS'ye zorlamak zorunda kalmayacak daha iyi bir yöntem var mı ?

-- Düzenle --

/app/code/core/Mage/Core/Model/Url.php->setRouteParams()Yöntemi değiştirebileceğimin farkındayım , ancak daha temiz bir yol olduğunu umuyorum.

Yanıtlar:


5

Magento'nun her zaman kullanıcının üzerinde bulunduğu protokolle eşleşmesi , sitenin ana sayfası gibi güvenli olmayan bir URL'deyken müşteri giriş sayfasına güvenli URL'ler vermemek gibi sorunlara neden olur .

Ne yapmayı öneririm, güvenli olarak güvenli olmanız gereken ek yolları bildirmek için özel bir modülün yapılandırma dosyasına bazı yapılandırma XML eklemektir. Bunu config.xml dosyanızda ( module_or_route_idbenzersiz bir şeyle değiştirerek) yapabilirsiniz :

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

Mage_Customer modülü için config.xml dosyasına göz atarsanız, "/ customer /" yolunun güvenli olarak tanımlandığı bir örnek görürsünüz.

Not: module_or_route_idYukarıdaki örneğin bir kısmı benzersiz değilse, yalnızca bir tanım kullanılır ve bu da düzgün bir şekilde güvence altına alınmayan bir şey sağlar . Düğüm adının benzersiz olduğundan emin olun. :)

Bu yol tabanlı olsa da, bunun tek tek CMS içerik sayfalarının URL'lerine doğrudan nasıl uygulanacağından emin değilim, örneğin, hepsini aynı CMS'ye gönderen bir yeniden yazma olduğu için hepsi bir rotayı / yolu paylaşacaklarından kontrol ünitesi.

HTTPS'yi çalıştırmak için gerçekten tüm siteye ihtiyacınız varsa, hem güvenli hem de güvenli olmayan temel URL ayarları için https: // URL'lerini kullanmanız gerekir.


Her olası ön uç rotası (özellikle de katalog arama / ajax / öner, vb. Gibi 'görünür olmayan' yollar) için ek güvenli yollar eklemek yerine sadece temel URL modelini değiştirmeyi tercih ederim. Evet, bu temel bir değişiklik, ancak ek bir kod satırı, ancak tüm ön uç rotalarını kapsamak için gereken birçoğu. Değiştirmek istediğiniz birkaç rotanın olduğu bir durumda, öneriniz çok daha mantıklı.
pspahn

Geçmişte Mage_Core_Model_Store::getBaseUrl, bir Facebook sekmesine gömüldüğünde mağazamızı her zaman güvenli hale getirmek için değiştirdik . Yine de dikkate alınması gereken başka şeyler de var, örneğin hangisinin önce isabet ederse blok önbellek depolaması (önbellek anahtarına bir şeyler eklemeniz gerekecek). Ayrıca David'in söylediği gibi, giriş / ödeme için güvenli olmayan bağlantılar veya sitenize gelen her müşteri, giriş yaptıkları veya ödeme yaptıkları takdirde güvenli modda olurlar.
Peter O'Callaghan

1
@pspahn /catalogsearch/Yolu güvenli olarak ayarlamanın eşleşen herhangi bir şey içermesi gerektiğini düşündünüz mü /catalogsearch/*/*/? Yani her şeyi catalogsearchgüvende tutmak sadece bir kural gerektirir .
davidalger

@Cags, yanıtıma dahil edemediğim bir şeye dikkat çekti ve bu önbellek anahtarları hakkında bir not ... URL'ler tutarlı bir şekilde yoksa diğeri, ortaya çıkan bağlantıları karıştıran önbellek bloklarına sahip olacaksınız.
davidalger

Bu önbellek tuşları hakkında iyi bir nokta. Gitmek için en iyi yol, her şeyi HTTPS çalıştırmak olacak gibi görünüyor.
pspahn

2

app/etc/config.xmlDosyanızda aşağıdakileri ayarlayın :

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

Bu Magento 1.9.1 çalışır

Kullanıcı https kullanıyorsa, bu tüm URL'leri https'ye yeniden yazmaya zorlar.


Daha da iyisi: config.xml değil, local.xml kullanmayın
Michael

1

System'de sade ama önemli bir seçenek var | Yapılandırma | Web ~ "ön uçta güvenli url kullan" demek zorundasınız - bunu evet olarak ayarlarsanız https tarafından yüklenen bir sayfa https bağlantılarını kullanır,

çoğu durumda kod yazmaya veya ek yapılandırma sağlamaya gerek yoktur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.