una solucionar solucion sitio seguro seguras segura puedo paginas pagina hacer google este entrar ejemplos cómo conexión conexion con como chrome php apache ssl https

php - solucionar - tu conexion con este sitio web no es segura solucion chrome



¿Cómo puedo obligar a los usuarios a acceder a mi página a través de HTTPS en lugar de HTTP? (19)

Solo tengo una página a la que quiero forzar para acceder como página HTTPS (PHP en Apache). ¿Cómo hago esto sin hacer que todo el directorio requiera HTTPS? O bien, si envía un formulario a una página HTTPS desde una página HTTP, ¿lo envía mediante HTTPS en lugar de HTTP?

Aquí está mi ejemplo:

http://www.example.com/some-page.php

Quiero que solo se pueda acceder a través de:

https://www.example.com/some-page.php

Claro, puedo poner todos los enlaces a esta página apuntando a la versión HTTPS, pero eso no impide que algunos tontos accedan a él a través de HTTP a propósito ...

Una cosa que pensé fue colocar un redireccionamiento 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 ese no puede ser el camino correcto, ¿verdad?

Por cierto, no preste atención a la URL. Sé que si fuera en realidad una página donde hubiera un carrito de compras, etc., lo haría de otra manera. Piénselo como una página de un sitio que vende un artículo por un precio en el que escribe la información de su tarjeta de crédito para enviarla a un portal de pago en un sitio externo con el propósito expreso de cargar su tarjeta una vez.


Acabo de crear un archivo .htaccess y agregué:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Sencillo !


Debe obligar al cliente a solicitar HTTPS siempre con los encabezados de Seguridad de transporte estricta de HTTP (HSTS):

// Use HTTP Strict Transport Security to force client to use secure connections only $use_sts = true; // iis sets HTTPS to ''off'' for non-SSL requests if ($use_sts && isset($_SERVER[''HTTPS'']) && $_SERVER[''HTTPS''] != ''off'') { header(''Strict-Transport-Security: max-age=31536000''); } elseif ($use_sts) { header(''Location: https://''.$_SERVER[''HTTP_HOST''].$_SERVER[''REQUEST_URI''], true, 301); // we are in cleartext at the moment, prevent further execution and output die(); }

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 de la compatibilidad si termina en HTTP, y luego establece el encabezado HSTS para que el navegador pueda redireccionar las solicitudes de los clientes si es posible.


He pasado por muchas soluciones con la comprobación del estado de $ _SERVER [HTTPS] pero parece que no es confiable porque a veces no se establece o no se activa, desactiva, etc., lo que hace que el script redirija el bucle interno.

Esta es la solución más confiable si su servidor admite $ _SERVER [SCRIPT_URI]

if (stripos(substr($_SERVER[SCRIPT_URI], 0, 5), "https") === false) { header("location:https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"); echo "<meta http-equiv=''refresh'' content=''0; url=https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]''>"; exit; }

Tenga en cuenta que, dependiendo de su instalación, es posible que su servidor no admita $ _SERVER [SCRIPT_URI], pero si lo hace, este es el mejor script que debe usar.

Puede verificar aquí: ¿Por qué algunas instalaciones de PHP tienen $ _SERVER [''SCRIPT_URI''] y otras no


He usado este script y funciona bien a través del sitio.

if(empty($_SERVER[''HTTPS'']) || $_SERVER[''HTTPS''] == "off"){ $redirect = ''https://'' . $_SERVER[''HTTP_HOST''] . $_SERVER[''REQUEST_URI'']; enter code hereheader(''HTTP/1.1 301 Moved Permanently''); header(''Location: '' . $redirect); exit(); }


La forma en que lo hice antes es básicamente como lo que escribiste, pero no tiene ningún valor codificado:

if($_SERVER["HTTPS"] != "on") { header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); exit(); }


No deberías por razones de seguridad. Especialmente si las cookies están en juego aquí. Te deja abierto a los ataques de repetición basados ​​en cookies.

De cualquier manera, debe usar las reglas de control de Apache para sintonizarlo.

Luego puede probar que se habilite HTTPS y redireccionar según sea necesario cuando sea necesario.

Debe redirigir a la página de pago solo con un FORMATO POST (no obtener), y los accesos a la página sin un POST deben dirigirse a las otras páginas. (Esto atrapará a la gente 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 deberías empujar todo a través de SSL.

Es sobreprotector, pero al menos tienes menos preocupaciones.


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, me pondrá nervioso el hecho de enviar datos. No puedo ver si el envío pasa por HTTPS o HTTP sin hacer una fuente de visualización y buscarla.

Servir el formulario a través de HTTPS junto con el enlace de envío no es un gran cambio para la ventaja.


Ok ... Ahora hay toneladas de cosas sobre esto ahora pero nadie realmente completa la pregunta "Segura". Para mí es ridículo usar algo que es inseguro.

A menos que lo uses como cebo.

La propagación $ _SERVER se puede cambiar a voluntad de alguien que sepa cómo hacerlo.

También como Sazzad Tushar Khan y thebigjc declararon que también puedes usar httaccess para hacer esto y hay muchas respuestas aquí que lo contienen.

Solo agrega:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://example.com/$1 [R,L]

hasta el final de lo que tienes en tu .httaccess y eso es todo.

Todavía no estamos tan seguros como podemos con estas 2 herramientas.

El resto es simple. Si faltan atributos, es decir ...

if(empty($_SERVER["HTTPS"])){ // SOMETHING IS FISHY } if(strstr($_SERVER[''HTTP_HOST''],"mywebsite.com") === FALSE){// Something is FISHY }


También di que has actualizado tu archivo httaccess y compruebas:

if($_SERVER["HTTPS"] !== "on"){// Something is fishy }

Hay muchas más variables que puedes verificar, es decir ...

HOST_URI (Si hay atributos estáticos para verificar)

HTTP_USER_AGENT (valores diferentes de la misma sesión)

Así que todo lo que estoy diciendo es que no te conformas con uno o el otro cuando la respuesta está en una combinación.

Para obtener más información de reescritura de httaccess, consulte los documentos-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Algunas pilas aquí -> Forzar SSL / https usando .htaccess y mod_rewrite
y
Obtener la URL completa de la página actual (PHP)
para nombrar una pareja.


Para aquellos que usan IIS, agregar esta línea en web.config ayudará:

<httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000"/> </customHeaders> </httpProtocol> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite>

Un archivo de ejemplo completo

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000"/> </customHeaders> </httpProtocol> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>


Puedes hacerlo con una directiva y mod_rewrite en Apache:

<Location /buyCrap.php> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </Location>

Puede hacer que la Ubicación sea más inteligente con el tiempo utilizando expresiones regulares si lo desea.


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:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Solo necesita la instrucción "RewriteEngine On" una vez en su .htaccess para todas las reglas de reescritura, por lo que si ya la tiene, simplemente copie la segunda y la tercera línea.

Espero que esto ayude.


Tuve que hacer algo como esto cuando corría detrás de un equilibrador de carga. Punta de sombrero https://.com/a/16076965/766172

function isSecure() { return ( (!empty($_SERVER[''HTTPS'']) && $_SERVER[''HTTPS''] !== ''off'') || $_SERVER[''SERVER_PORT''] == 443 || ( (!empty($_SERVER[''HTTP_X_FORWARDED_PROTO'']) && $_SERVER[''HTTP_X_FORWARDED_PROTO''] == ''https'') || (!empty($_SERVER[''HTTP_X_FORWARDED_SSL'']) && $_SERVER[''HTTP_X_FORWARDED_SSL''] == ''on'') ) ); } function requireHTTPS() { if (!isSecure()) { header(''Location: https://'' . $_SERVER[''HTTP_HOST''] . $_SERVER[''REQUEST_URI''], TRUE, 301); exit; } }


Usar esto NO es suficiente:

if($_SERVER["HTTPS"] != "on") { header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); exit(); }

Si tiene algún 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


Use $_SERVER[''HTTPS''] para saber si es SSL , y redirija al lugar correcto si no es así.

Y recuerde, la página que muestra el formulario no necesita ser alimentada a través de HTTPS, es la URL posterior de la 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 tener cuidado 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 una gran cantidad de aplicaciones en mi propio sitio web.


tal vez este puede ayudar, usted, así es como lo hice para mi sitio web, funciona como un encanto:

$protocol = $_SERVER["HTTP_CF_VISITOR"]; if (!strstr($protocol, ''https'')){ header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); exit(); }


use htaccess :

#if domain has www. and not https:// RewriteCond %{HTTPS} =off [NC] RewriteCond %{HTTP_HOST} ^(?i:www+/.+[^.]+/.+[^.]+)$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=307] #if domain has not www. RewriteCond %{HTTP_HOST} ^([^.]+/.+[^.]+)$ RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=307]


http://www.besthostratings.com/articles/force-ssl-htaccess.html

En ocasiones, es posible que deba asegurarse de que el usuario esté navegando por su sitio a través de una conexión segura. Un modo 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:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Tenga en cuenta que el .htaccess debe ubicarse en la carpeta principal del sitio web.

En caso de que desee forzar HTTPS para una carpeta en particular, puede usar:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} somefolder RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]

El archivo .htaccess debe colocarse en la carpeta donde necesita forzar HTTPS.


<?php // Require https if ($_SERVER[''HTTPS''] != "on") { $url = "https://". $_SERVER[''SERVER_NAME''] . $_SERVER[''REQUEST_URI'']; header("Location: $url"); exit; } ?>

Así de fácil.


// Force HTTPS for security if($_SERVER["HTTPS"] != "on") { $pageURL = "Location: https://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; } header($pageURL); }