Solo tengo una página que quiero forzar para que se acceda como una página HTTPS (PHP en Apache). ¿Cómo hago esto sin hacer que todo el directorio requiera HTTPS? O, si envía un formulario a una página HTTPS desde una página HTTP, ¿lo envía por HTTPS en lugar de HTTP?
Aquí está mi ejemplo:
http://www.example.com/some-page.php
Quiero que solo se acceda a través de:
https://www.example.com/some-page.php
Claro, puedo poner todos los enlaces a esta página apuntados a la versión HTTPS, pero eso no impide que algún tonto acceda a través de HTTP a propósito ...
Una cosa que pensé fue poner una redirección en el encabezado del archivo PHP para verificar que estén accediendo a la versión HTTPS:
if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
header('Location: https://www.example.com/some-page.php');
}
Pero esa no puede ser la forma correcta, ¿verdad?
Respuestas:
La forma en que lo hice antes es básicamente como lo que escribió, pero no tiene ningún valor codificado:
fuente
(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on")
para arreglar avisos PHP.$_SERVER[]
variables no son cambiables / vulnerables a la intervención de los usuarios?HTTP_X_FORWARDED
, y pueden manipularse, pero a otros les gustaHTTPS
oSERVER_PORT
se configuran directamente desde el servidor web y, por lo general, deben ser seguros.Podrías hacerlo con una directiva y mod_rewrite en Apache:
Puede hacer que la ubicación sea más inteligente con el tiempo utilizando expresiones regulares si lo desea.
fuente
Debe obligar al cliente a solicitar HTTPS siempre con encabezados HTTP Strict Transport Security (HSTS):
Tenga en cuenta que HSTS es compatible con la mayoría de los navegadores modernos, pero no es universal. Por lo tanto, la lógica anterior redirige manualmente al usuario independientemente del soporte si terminan en HTTP, y luego establece el encabezado HSTS para que el navegador pueda redirigir más solicitudes del cliente si es posible.
fuente
Acabo de crear un archivo .htaccess y agregué:
Sencillo !
fuente
fuente
Tenía que hacer algo como esto cuando se ejecuta detrás de un equilibrador de carga. Punta de sombrero https://stackoverflow.com/a/16076965/766172
fuente
La forma PHP:
La forma de Apache mod_rewrite:
fuente
http://www.besthostratings.com/articles/force-ssl-htaccess.html
A veces es posible que deba asegurarse de que el usuario esté navegando por su sitio a través de una conexión segura. Una manera fácil de redirigir siempre al usuario a una conexión segura (https: //) se puede lograr con un archivo .htaccess que contenga las siguientes líneas:
Tenga en cuenta que .htaccess debe ubicarse en la carpeta principal del sitio web.
En caso de que desee forzar HTTPS para una carpeta en particular, puede usar:
El archivo .htaccess debe colocarse en la carpeta donde necesita forzar HTTPS.
fuente
Ok .. Ahora hay toneladas de cosas sobre esto ahora, pero nadie realmente completa la pregunta "segura". Para mí es ridículo usar algo inseguro.
A menos que lo use como cebo.
La propagación de $ _SERVER se puede cambiar a voluntad de alguien que sepa cómo hacerlo.
Además, como Sazzad Tushar Khan y thebigjc declararon, también puedes usar httaccess para hacer esto y aquí hay muchas respuestas que lo contienen.
Solo agrega:
hasta el final de lo que tienes en tu .httaccess y eso es todo.
Aún así, no estamos tan seguros como posiblemente podamos estar con estas 2 herramientas.
El resto es simple. Si faltan atributos, es decir ...
También diga que ha actualizado su archivo httaccess y verifica:
Hay muchas más variables que puede verificar, es decir ...
HOST_URI
(Si hay atributos estáticos al respecto para verificar)HTTP_USER_AGENT
(Misma sesión diferentes valores)Entonces, todo lo que estoy diciendo es que no te conformes con uno u otro cuando la respuesta está en una combinación.
Para obtener más información sobre la reescritura de httaccess, consulte los documentos-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
Algunas pilas aquí -> Fuerce SSL / https usando .htaccess y mod_rewrite
y
obtenga la URL completa del página actual (PHP)
para nombrar una pareja.
fuente
ERR_TOO_MANY_REDIRECTS
. ¿Cómo puedo solucionar esto?Úselo
$_SERVER['HTTPS']
para saber si es SSL y, de lo contrario , redirija al lugar correcto.Y recuerde, la página que muestra el formulario no necesita ser alimentada a través de HTTPS, es la URL de publicación que más lo necesita.
Editar : sí, como se señala a continuación, es mejor tener todo el proceso en HTTPS. Es mucho más tranquilizador: estaba señalando que la publicación es la parte más crítica. Además, debe asegurarse de que las cookies estén configuradas para ser seguras, por lo que solo se enviarán a través de SSL. La solución mod_rewrite también es muy ingeniosa, la he usado para asegurar muchas aplicaciones en mi propio sitio web.
fuente
uso
htaccess
:fuente
No mezcle HTTP y HTTPS en la misma página. Si tiene una página de formulario que se sirve a través de HTTP, voy a estar nervioso por el envío de datos: no puedo ver si el envío supera HTTPS o HTTP sin hacer un código fuente de vista y buscarlo.
Servir el formulario a través de HTTPS junto con el enlace de envío no es un gran cambio para la ventaja.
fuente
Si usa Apache o algo así como LiteSpeed, que admite archivos .htaccess, puede hacer lo siguiente. Si aún no tiene un archivo .htaccess, debe crear un nuevo archivo .htaccess en su directorio raíz (generalmente donde se encuentra su index.php). Ahora agregue estas líneas como las primeras reglas de reescritura en su .htaccess:
Solo necesita la instrucción "RewriteEngine On" una vez en su .htaccess para todas las reglas de reescritura, así que si ya la tiene, simplemente copie la segunda y tercera línea.
Espero que esto ayude.
fuente
Usar esto NO es suficiente:
Si tiene contenido http (como una fuente de imagen http externa), el navegador detectará una posible amenaza. Así que asegúrese de que todos sus ref y src dentro de su código sean https
fuente
He pasado por muchas soluciones comprobando el estado de $ _SERVER [HTTPS] pero parece que no es confiable porque a veces no se establece o se activa, desactiva, etc., lo que hace que el script redirija al bucle interno.
Aquí está la solución más confiable si su servidor admite $ _SERVER [SCRIPT_URI]
Tenga en cuenta que dependiendo de su instalación, su servidor podría no ser compatible con $ _SERVER [SCRIPT_URI], pero si lo hace, este es el mejor script para usar.
Puede verificar aquí: ¿Por qué algunas instalaciones PHP tienen $ _SERVER ['SCRIPT_URI'] y otras no?
fuente
Para aquellos que usan IIS, agregar esta línea en web.config ayudará:
Un archivo de ejemplo completo
fuente
No deberías por razones de seguridad. Especialmente si las cookies están en juego aquí. Te deja completamente abierto a ataques de repetición basados en cookies.
De cualquier manera, debe usar las reglas de control de Apache para ajustarlo.
Luego puede probar si HTTPS está habilitado y redirigir según sea necesario donde sea necesario.
Debe redirigir a la página de pago solo con un FORM POST (no get), y los accesos a la página sin un POST deben dirigirse nuevamente a las otras páginas. (Esto atrapará a las personas simplemente saltando en caliente).
http://joseph.randomnetworks.com/archives/2004/07/22/redirect-to-ssl-using-apaches-htaccess/
Es un buen lugar para comenzar, disculpas por no proporcionar más. Pero realmente deberías empujar todo a través de SSL.
Es sobreprotector, pero al menos tienes menos preocupaciones.
fuente
tal vez esto pueda ayudar, así es como lo hice para mi sitio web, funciona de maravilla:
fuente
Si quieres usar PHP para hacer esto, esta manera me funcionó muy bien:
Comprueba la variable HTTPS en la matriz superglobal $ _SERVER para ver si es igual a "on". Si la variable no es igual a on.
fuente
He usado este script y funciona bien a través del sitio.
fuente
Así de fácil.
fuente