Come posso limitare HTTP 1.0 o meno usando .htaccess?

0

Voglio usare qualche restrizione con SSL per ora il mio .htacess è

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]

Modifica

Ci sono molte richieste che posso ottenere come HTTP1.0 e quelle sono le richieste che cercano di giocare con i miei moduli, quindi voglio limitare quelli che ho letto in un blog " c'è più spazio per errori con HTTP 1.0, principalmente perché il protocollo non richiede un'intestazione Host. Pertanto, un'altra strategia per gestire richieste POST indesiderate (e altri tipi di richieste, per quella materia) richiede il protocollo HTTP 1.1. "

Voglio che l'URL sia sempre utilizzato SSL e voglia anche limitare le richieste da HTTP < 1.1. Perché ho cercato di spiegare qui sotto, per favore fai più domande se tenterò di descrivere il mio problema in modo migliore.

Concettualmente vorrei anche capire in tempo reale quali richieste HTTP di versione dovremmo aspettarci e come possiamo mantenere le richieste di post come previsto (vogliamo bloccare gli attacchi).

    
posta Prafulla Kumar Sahu 18.05.2017 - 22:50
fonte

2 risposte

2

How can I restrict HTTP 1.0 or less using .htaccess?

Non risponderò a questa domanda, ma sto cercando di spiegare perché penso che l'idea di tale restrizione sia sbagliata.

but there is more room for mischief with HTTP 1.0, primarily because the protocol does not require a Host header.

Dubito molto di questa affermazione. Innanzitutto, nel caso molto comune in cui si utilizza VirtualHost non si otterranno richieste senza intestazione Host al di fuori del VirtualHost predefinito, semplicemente perché il server non può utilizzare l'intestazione Host per trovare quale VirtualHost utilizzare.

Oltre a ciò una richiesta HTTP / 1.0 è per lo più uguale a una richiesta HTTP / 1.1. In effetti è HTTP / 1.1 che ha più capacità perché potresti usare anche Transfer-Encoding chunked nella richiesta con HTTP / 1.1, a patto che il web server possa gestirlo.

Più dubbi sulla competenza dell'autore riguardo al protocollo HTTP è anche la seguente affermazione suggerita nel blog:

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

In questo modo l'autore prova ad abbinare la richiesta HTTP / 1.0 e HTTP / 0.9. Ma con HTTP 0.9 (non c'è HTTP / 0.9, solo HTTP 0.9) una richiesta non ha alcun tipo di numero di versione, quindi questa affermazione non corrisponderà mai alle richieste HTTP 0.9 reali. Vedi HTTP originale come definito nel 1991 .

Più utili sono in realtà i suggerimenti sull'elenco bianco solo le richieste che ti aspetti e negando tutto il resto. E vorrei davvero raccomandare di negare quelli inaspettati, non importa se questi venissero con HTTP o HTTPS invece di inoltrare solo quelli "buoni" a HTTPS come si tenta attualmente di fare.

    
risposta data 19.05.2017 - 17:05
fonte
1

Ci sono diversi requisiti mescolati insieme, e non sono del tutto convinto che sia necessario complicarlo così tanto.

In primo luogo, si desidera che l'URL sia sempre HTTPS: questo è lo scopo dell'intestazione HTTP Strict Transport Security (HSTS). Se inviato come intestazione a una pagina pubblicata su HTTPS, tutte le richieste successive al sito da parte dei client conformi saranno su HTTPS. Se non ricevi mai traffico HTTP sul tuo sito, puoi anche semplicemente disabilitare l'ascolto sulla porta 80 (o qualsiasi altra cosa su cui hai ascoltato il tuo server HTTP). Se ricevi traffico HTTP legittimo, ma desideri passare tutto a HTTPS, puoi utilizzare le regole di riscrittura o i reindirizzamenti semplici per spostare il traffico su, e quindi sarà interessato dall'intestazione HSTS per le richieste future. Dovrai anche assicurarti di aver corretto eventuali collegamenti e moduli inviati all'interno del tuo sito in modo relativo, o di utilizzare gli indirizzi relativi al protocollo.

Un esempio di regola adatta, che potrebbe essere inclusa nell'ascolto di VirtualHost sulla porta 80, per farlo sarebbe:

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

Ora hai ordinato il requisito HTTPS, quindi puoi eliminare il controllo .htaccess e smettere di provare a riscrivere le richieste potenzialmente malevoli - rendendo il tuo .htaccess regole una semplice lista nera, restituendo un codice di stato Proibito 403 (preso direttamente dal blog collegato, senza alcun tentativo di verificare o validare l'integrità mentale:

<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>

Se si desidera impostare l'intestazione HSTS in .htaccess, è possibile utilizzare:

Header always set Strict-Transport-Security "max-age=31536000"
    
risposta data 19.05.2017 - 17:07
fonte

Leggi altre domande sui tag