Utilizzo di URL sicuri in base al contesto


9

Conosco vari metodi per generare un URL sicuro basato sul contesto, ad esempio:

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

Funziona perfettamente per la creazione di collegamenti che indirizzeranno a una pagina protetta mentre si è in modalità protetta (o si collegheranno semplicemente alla pagina non sicura se non si utilizza la modalità protetta).

Il problema che sto esaminando è che Magento considera solo alcune pagine speciali come sicure (account cliente, checkout, ecc.). Quello che preferirei sarebbe che Magento utilizzasse sempre un collegamento sicuro se l'utente è attualmente in modalità protetta , oppure utilizzare il collegamento non sicuro se l'utente è in modalità non sicura.

Da quello che posso dire, le mie uniche opzioni reali sono:

  1. Modifica ogni istanza di $this->getUrl()essere simile allo snippet sopra.
  2. Impostare non sicuro base_urlper utilizzare HTTPS, forzando tutte le pagine a proteggere.

Esiste un metodo migliore che non comporta la necessità di modificare ogni chiamata $this->getUrl()o forzare tutte le pagine in HTTPS indipendentemente dal contesto dell'utente?

-- modificare --

Sono consapevole di poter modificare il /app/code/core/Mage/Core/Model/Url.php->setRouteParams()metodo, anche se spero che ci sia un modo più pulito.

Risposte:


5

Avere Magento sempre corrispondente al protocollo su cui è attualmente l'utente causerebbe problemi, come non sputare URL sicuri alla pagina di accesso del cliente quando si trova su un URL non sicuro come la home page del sito.

Quello che suggerirei di fare è l'aggiunta di alcuni XML di configurazione al file di configurazione di un modulo personalizzato per dichiarare i percorsi aggiuntivi necessari per essere sicuri. Puoi farlo avendo questo nel tuo file config.xml (sostituendolo module_or_route_idcon qualcosa di unico:

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

Se dai un'occhiata a config.xml per il modulo Mage_Customer vedrai un esempio in cui il percorso "/ customer /" è stato definito sicuro.

Nota: se la module_or_route_idparte dell'esempio precedente non è univoca, verrà utilizzata solo una definizione, portando a qualcosa che non viene adeguatamente protetto. Assicurarsi che il nome del nodo sia univoco. :)

Poiché questo è basato sul percorso, tuttavia, non sono sicuro di come si applicherebbe direttamente agli URL delle singole pagine di contenuto CMS, ad esempio, poiché condivideranno comunque un percorso / percorso poiché è una riscrittura che li invia tutti allo stesso CMS controller.

Se hai davvero bisogno dell'intero sito per eseguire HTTPS, dovrai utilizzare https: // URL per le impostazioni di URL di base sia sicure che non protette.


Preferirei semplicemente modificare il modello di URL principale piuttosto che includere percorsi sicuri aggiuntivi per ogni possibile percorso frontend (in particolare i percorsi "non visibili" come catalogsearch / ajax / suggest, ecc.). Sì, è un cambiamento fondamentale, ma sono ulteriori tre righe di codice rispetto a quante ne occorrerebbe per coprire tutte le rotte di frontend. In una situazione in cui è solo un paio di percorsi che vorresti cambiare, il tuo suggerimento ha molto più senso.
pspahn,

In passato abbiamo modificato Mage_Core_Model_Store::getBaseUrlper rendere il nostro negozio sempre sicuro quando incorporato in una scheda di Facebook. Tuttavia, ci sono altre cose da considerare, come l'archiviazione della cache a blocchi, a seconda di quale sia la prima hit (dovrai aggiungere qualcosa alla chiave della cache). Avrai anche, come dice David, collegamenti non sicuri per il login / checkout, o alla fine tutti i clienti del tuo sito finiranno in modalità sicura se accedono o effettuano il checkout.
Peter O'Callaghan,

1
@pspahn Hai considerato che l'impostazione del /catalogsearch/percorso come sicuro dovrebbe includere qualcosa di corrispondente /catalogsearch/*/*/? Cioè ci vorrebbe solo una regola per rendere tutto catalogsearchsicuro.
davidalger,

@Cags ha sottolineato qualcosa che mi mancava, incluso nella mia risposta, e questa è la nota sulle chiavi della cache ... se gli URL non sono coerentemente l'uno o l'altro, avrai blocchi memorizzati nella cache che incasinano i collegamenti risultanti.
davidalger,

Questo è un buon punto sulle chiavi della cache. Sembra che il modo migliore per andare sarebbe semplicemente eseguire tutto HTTPS.
pspahn,

2

Impostare quanto segue nel app/etc/config.xmlfile:

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

Funziona in Magento 1.9.1

Se l'utente utilizza https, questo dovrebbe forzare tutti gli URL a riscrivere in https.


Ancora meglio: non usare config.xml ma local.xml
Michael

1

C'è un'opzione discreta ma importante nel sistema | Configurazione | Web ~ dove devi dire "usa l'URL sicuro in frontend": se imposti questo su sì, una pagina caricata da https utilizzerà i collegamenti https,

non è necessario scrivere codice o fornire ulteriori configurazioni nella maggior parte dei casi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.