Usando URLs seguros com base no contexto

9

Estou familiarizado com o uso de vários métodos para gerar uma URL segura com base no contexto, ou seja:

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

Isso funciona muito bem para criar links que direcionam para uma página segura enquanto você estiver no modo seguro (ou apenas direcionam para a página não segura se não estiver usando o modo seguro).

O problema que estou vendo é que o Magento trata apenas algumas páginas especiais como precisando ser seguro (conta de cliente, pagamento, etc). O que eu preferiria é que o Magento sempre use um link seguro se o usuário estiver atualmente no modo seguro ou use o link não seguro se o usuário estiver no modo não seguro.

Pelo que sei, minhas únicas opções reais são:

  1. Modifique todas as instâncias $this->getUrl()para serem semelhantes ao snippet acima.
  2. Defina não seguro base_urlpara usar HTTPS, forçando a segurança de todas as páginas.

Existe um método melhor que não envolva a necessidade de alterar todas as chamadas $this->getUrl()ou forçar todas as páginas para HTTPS, independentemente do contexto do usuário?

- editar -

Estou ciente de que posso modificar o /app/code/core/Mage/Core/Model/Url.php->setRouteParams()método, mas espero que exista uma maneira mais limpa.

pspahn
fonte

Respostas:

5

O fato de o Magento sempre corresponder ao protocolo em que o usuário está atualmente causaria problemas, como não cuspir URLs seguros na página de login do cliente quando em um URL não seguro como a página inicial do site.

O que eu sugeriria fazer é adicionar um pouco de XML de configuração ao arquivo de configuração de um módulo personalizado para declarar as rotas adicionais necessárias para a sua segurança. Você faz isso mantendo isso em seu arquivo config.xml (substituindo module_or_route_idpor algo único:

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

Se você der uma olhada no config.xml do módulo Mage_Customer, verá um exemplo disso em que o caminho "/ customer /" foi definido como seguro.

Nota: se a module_or_route_idparte do exemplo acima não for exclusiva, apenas uma definição será usada, levando a que algo não esteja sendo devidamente protegido. Verifique se o nome do nó é exclusivo. :)

Como esse caminho é baseado, não tenho certeza de como isso se aplicaria diretamente a URLs de páginas de conteúdo individuais do CMS, por exemplo, pois todos ainda compartilharão uma rota / caminho, pois é uma reescrita que os envia para o mesmo CMS. controlador.

Se você realmente precisar de todo o site para executar HTTPS, precisará usar https: // URLs para configurações de URL base seguras e não seguras.

davidalger
fonte
Eu preferiria apenas modificar o modelo principal de URL em vez de incluir rotas seguras adicionais para todas as rotas possíveis de front-end (especialmente as rotas 'não visíveis', como catalogsearch / ajax / sugestão, etc.). Sim, é uma alteração fundamental, mas são três linhas de código adicionais versus quantas seriam necessárias para cobrir todas as rotas de front-end. Em uma situação em que você deseja alterar apenas algumas rotas, sua sugestão faz muito mais sentido.
Pspahn 27/09/13
No passado, modificamos Mage_Core_Model_Store::getBaseUrlpara tornar nossa loja sempre segura quando incorporada em uma guia do Facebook. Porém, há outras coisas a considerar, como o armazenamento em cache de blocos, o que ocorrer primeiro (você precisará adicionar algo à chave do cache). Você também terá, como diz David, links não seguros para fazer login / checkout ou, finalmente, todos os clientes do seu site acabarão no modo seguro, se algum dia fizerem login ou fizerem o checkout.
Peter O'Callaghan
11
@pspahn Você considerou que definir o /catalogsearch/caminho como seguro deve incluir algo que corresponda /catalogsearch/*/*/? Ou seja, seria necessária apenas uma regra para tornar tudo catalogsearchseguro.
Davidalger # 27/13
O @Cags apontou algo que eu perdi, incluindo a minha resposta, e essa é a observação sobre as chaves de cache ... se os URLs não forem consistentemente um ou outro, você terá blocos em cache que atrapalham os links resultantes.
davidalger 27/09
Esse é um bom argumento sobre chaves de cache. Parece que o melhor caminho a seguir seria apenas executar tudo HTTPS.
Pspahn 27/09/13
2

Defina o seguinte no seu app/etc/config.xmlarquivo:

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

Isso funciona no Magento 1.9.1

Se o usuário estiver usando https, isso deve forçar todos os URLs a reescreverem para https.

Artistan
fonte
Ainda melhor: não use config.xml mas local.xml
Michael
1

Há uma opção discreta, mas importante no System | Configuração | Web ~, onde você deve dizer "usar URL seguro no front-end" - se você definir isso como sim, uma página carregada por https usará links https,

não há necessidade de escrever código ou fornecer configuração adicional na maioria dos casos

dancl
fonte