¿Cómo puedo restringir HTTP 1.0 o menos usando .htaccess?

0

Quiero usar alguna restricción con SSL por ahora mi .htacess es

RewriteEngine On 
RewriteCond %{HTTPS} !=on [OR] 
RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC,OR]
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC,OR]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R,L]

Editar

Hay muchas solicitudes que puedo enviar como HTTP1.0 y esas son las solicitudes que intentan jugar con mis formularios, así que quiero restringirlos mientras leo en blog " hay más espacio para hacer travesuras con HTTP 1.0, principalmente porque el protocolo no requiere un encabezado de Host. Por lo tanto, otra estrategia para tratar las solicitudes POST no deseadas (y otros tipos de solicitudes, para el caso) es requerir el protocolo HTTP 1.1 ".

Quiero que la URL siempre use SSL y también quiero restringir las solicitudes de HTTP < 1.1. ¿Por qué he tratado de explicar a continuación, por favor haga más preguntas si trataré de describir mi problema de una manera mejor?

Desde el punto de vista conceptual, también me gustaría entender en qué momento actual de la versión de las solicitudes HTTP debemos esperar y cómo podemos mantener las solicitudes de publicación para que sean como se espera (quiero bloquear los ataques).

    
pregunta Prafulla Kumar Sahu 18.05.2017 - 22:50
fuente

2 respuestas

2
  

¿Cómo puedo restringir HTTP 1.0 o menos usando .htaccess?

No responderé esta pregunta, pero estoy tratando de explicar por qué creo que la idea de dicha restricción es incorrecta.

  

pero hay más espacio para hacer travesuras con HTTP 1.0, principalmente porque el protocolo no requiere un encabezado de Host.

Dudo mucho esa afirmación. Primero, en el caso muy común de que esté utilizando VirtualHost, no recibirá ninguna solicitud sin el encabezado del Host fuera del VirtualHost predeterminado, simplemente porque el servidor no puede usar el encabezado del Host para encontrar qué VirtualHost utilizar.

Aparte de eso, una solicitud HTTP / 1.0 es casi lo mismo que una solicitud HTTP / 1.1. De hecho, es HTTP / 1.1 que tiene más capacidades porque también podría usar la codificación de transferencia fragmentada en la solicitud con HTTP / 1.1, siempre que el servidor web pueda lidiar con eso.

Más dudas sobre la competencia del autor con respecto al protocolo HTTP también es la siguiente declaración sugerida en el blog:

RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC]

De esta manera, el autor intenta hacer coincidir las solicitudes HTTP / 1.0 y HTTP / 0.9. Pero, con HTTP 0.9 (no hay HTTP / 0.9, solo HTTP 0.9) una solicitud no tiene ningún tipo de número de versión, por lo que esta declaración nunca coincidirá con las solicitudes reales de HTTP 0.9. Consulte El HTTP original definido en 1991 .

Más útiles son en realidad los consejos sobre la lista blanca solo de las solicitudes que realmente espera y negando todo lo demás. Y realmente recomendaría rechazar los inesperados, sin importar si estos vinieron con HTTP o HTTPS en lugar de solo reenviar los "buenos" a HTTPS como usted trata de hacer actualmente.

    
respondido por el Steffen Ullrich 19.05.2017 - 17:05
fuente
1

Tienes algunos requisitos diferentes mezclados allí, y no estoy del todo convencido de que necesites complicarlo tanto.

Primero, desea que la URL siempre sea HTTPS: este es el propósito del encabezado HTTP Strict Transport Security (HSTS). Si se envía como encabezado a una página servida a través de HTTPS, todas las solicitudes subsiguientes al sitio de los clientes compatibles serán a través de HTTPS. Si nunca recibe tráfico HTTP en su sitio, también puede simplemente deshabilitar la escucha en el puerto 80 (o lo que sea que su servidor HTTP esté escuchando). Si obtiene tráfico HTTP legítimo, pero desea pasarlo todo a HTTPS, puede usar reglas de reescritura o redirecciones simples para cambiar el tráfico, y luego se verá afectado por el encabezado HSTS para futuras solicitudes. También querrá asegurarse de haber ajustado los enlaces y los envíos de formularios dentro de su sitio para que sean relativos, o para usar direcciones relativas al protocolo.

Un ejemplo de una regla adecuada, que podría incluirse en la escucha de VirtualHost en el puerto 80, sería:

Redirect permanent / https://secure.example.com/

Ahora ya tiene ordenado el requisito de HTTPS, por lo que puede cancelar la comprobación de .htaccess y dejar de intentar volver a escribir las solicitudes potencialmente maliciosas. directamente desde el blog vinculado, sin ningún intento de validar o validar):

<IfModule mod_rewrite.c>
    RewriteCond %{THE_REQUEST} ^POST(.*)HTTP/(0\.9|1\.0)$ [NC,OR]
    RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
    RewriteRule .* - [F,L]
</IfModule>

Si desea establecer el encabezado HSTS en .htaccess, puede usar:

Header always set Strict-Transport-Security "max-age=31536000"
    
respondido por el Matthew 19.05.2017 - 17:07
fuente

Lea otras preguntas en las etiquetas