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.

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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.