Uso de URL seguras según el contexto

9

Estoy familiarizado con el uso de varios métodos para generar una URL segura basada en el contexto, es decir:

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

Esto funciona muy bien para crear enlaces que dirijan a una página segura mientras está en modo seguro (o simplemente se vinculará a la página no segura si no está usando el modo seguro).

El problema que estoy viendo es que Magento solo trata algunas páginas especiales como si fueran seguras (cuenta de cliente, pago, etc.). Lo que preferiría sería que Magento siempre use un enlace seguro si el usuario se encuentra actualmente en modo seguro , o use el enlace no seguro si el usuario está en modo no seguro.

Por lo que puedo decir, mis únicas opciones reales son:

  1. Modifique cada instancia de $this->getUrl()para que sea similar al fragmento anterior.
  2. Establecer no seguro base_urlpara usar HTTPS, obligando a todas las páginas a proteger.

¿Existe un método mejor que no implique tener que cambiar todas las llamadas $this->getUrl()o forzar todas las páginas a HTTPS independientemente del contexto del usuario?

- editar -

Soy consciente de que puedo modificar el /app/code/core/Mage/Core/Model/Url.php->setRouteParams()método, aunque espero que haya una forma más limpia.

pspahn
fuente

Respuestas:

5

Hacer que Magento siempre coincida con el protocolo en el que se encuentra actualmente el usuario podría causar problemas, como no escupir URL seguras a la página de inicio de sesión del cliente cuando se encuentra en una URL no segura como la página de inicio del sitio.

Lo que sugeriría hacer es agregar un poco de configuración XML al archivo de configuración de un módulo personalizado para declarar las rutas adicionales que necesita para estar seguro como protegido. Puede hacer esto teniendo esto en su archivo config.xml (reemplazando module_or_route_idcon algo único:

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

Si echa un vistazo a config.xml para el módulo Mage_Customer, verá un ejemplo de esto donde la ruta "/ customer /" se ha definido como segura.

Nota: si la module_or_route_idparte del ejemplo anterior no es única, solo se utilizará una definición, lo que significa que algo no se asegura adecuadamente. Asegúrese de que el nombre del nodo sea único. :)

Sin embargo, debido a que esto se basa en la ruta, no estoy seguro de cómo esto se aplicaría directamente a las URL de páginas de contenido de CMS individuales, por ejemplo, ya que todas compartirán una ruta / ruta ya que es una reescritura que las envía a todas al mismo CMS controlador.

Si realmente necesita todo el sitio para ejecutar HTTPS, deberá usar https: // URL para la configuración de URL base segura y no segura.

davidalger
fuente
Preferiría simplemente modificar el modelo de URL central en lugar de incluir rutas seguras adicionales para cada ruta de interfaz posible (especialmente las rutas 'no visibles' como catalogsearch / ajax / sugerencias, etc.). Sí, es un cambio central, pero son tres líneas de código adicionales en comparación con la cantidad necesaria para cubrir todas las rutas frontend. En una situación en la que solo desea cambiar un par de rutas, su sugerencia tiene mucho más sentido.
pspahn
En el pasado, hemos modificado Mage_Core_Model_Store::getBaseUrlpara hacer que nuestra tienda siempre sea segura cuando está integrada en una pestaña de Facebook. Sin embargo, hay otras cosas a tener en cuenta, como el almacenamiento en caché de bloque cualquiera que sea el primero (deberá agregar algo a la clave de caché). También tendrá, como dice David, enlaces no seguros para iniciar sesión / finalizar la compra, o, en última instancia, todos los clientes de su sitio terminarán en modo seguro si alguna vez inician sesión o presionan para finalizar la compra.
Peter O'Callaghan
1
@pspahn ¿Ha considerado que establecer la /catalogsearch/ruta como segura debería incluir algo que coincida /catalogsearch/*/*/? Es decir, solo se necesitaría una regla para que todo catalogsearchsea ​​seguro.
davidalger
@Cags señaló algo que me perdí, incluido en mi respuesta, y esa es la nota sobre las claves de caché ... si las URL no son consistentemente una u otra, habrá bloques en caché que desordenan los enlaces resultantes.
davidalger
Ese es un buen punto sobre las claves de caché. Parece que la mejor manera de hacerlo sería ejecutar todo HTTPS.
pspahn
2

Establezca lo siguiente en su app/etc/config.xmlarchivo:

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

Esto funciona en Magento 1.9.1

Si el usuario usa https, esto debería obligar a todas las URL a reescribirse en https.

Artistan
fuente
Aún mejor: no use config.xml sino local.xml
Michael
1

Hay una opción discreta pero importante en el sistema | Configuracion | Web ~ donde tiene que decir "use url segura en la interfaz": si configura esto en sí, una página cargada por https usará enlaces https,

no es necesario escribir código ni proporcionar una configuración adicional en la mayoría de los casos

dancl
fuente