Esiste un modo per fare un / applicazione Rack Rails dire al web server per interrompere la connessione

StackOverflow https://stackoverflow.com/questions/2570489

Domanda

Ci sono molte ragioni di sicurezza per cui si vorrebbe far cadere una connessione HTTP con nessuna risposta (ad es. best practice SSL di OWASP ). Quando questi possono essere rilevati a livello del server quindi non è un grosso problema. Tuttavia, quello che se si può rilevare solo questa condizione a livello di applicazione?

La Rails, o più in generale Rack, avere alcun modo standard di raccontare il server per interrompere la connessione senza una risposta? In caso contrario, ci sono alcune intestazioni standard per passare in quella che compirà nel server web comuni (sto pensando Nginx o Apache)? Anche se non v'è un colpo di testa di serie c'è un modo ragionevole per configurare tale comportamento? È questo prendono in giro?

È stato utile?

Soluzione

Nginx ha un meccanismo per questo. Quando si restituisce un codice di stato 444 speciale (è non standard), Nginx scende in silenzio la connessione. Questo accade solo quando si torna questo codice dalla configurazione Nginx, vale a dire come

location = /drop {
  return 444;
}

e non si può restituire il codice di stato dalla vostra applicazione. La soluzione è tornare intestazione X-Accel-Redirect: /drop dalla app per dire Nginx luogo uso /drop per questa richiesta.

Altri suggerimenti

potrei sbagliarmi, ma non credo rack o Rails fornire un modo per eliminare una connessione. Credo che la più vicina potrebbe essere qualcosa di simile a "render: nulla => true". Ma anche che manda ironicamente qualcosa (un unico spazio, a quanto pare per evitare un bug di Safari ...), ma almeno il suo che chiude la richiesta invece di reindirizzare (avendo il cliente avvia una nuova richiesta) come OWASP mette in guardia contro.

class TestController < ApplicationController
  def nothing
    render :nothing => true
  end
end

>> app.get('test/nothing')
=> 200
>> app.response.body
=> " "

Mi auguro che aiuta.

La prego quindi di elaborare su ciò che si intende per "far cadere una connessione"? Se l'invio di intestazioni schiena con qualsiasi codice che si desidera risposta (Mosso, non autorizzato, non trovato) va bene - hai già avuto la risposta (rendering: notando, oppure: testa). È possibile aggiungere: status => some_status
. Se vuoi dire far cadere la connessione a livello TCP / IP, così come i firewall, beh questa è un'altra cosa. Dubito che questo è possibile. E non credo consigliabile (se possibile).
E sulla pagina che hai postato puntano a "connessione cadere" è usato come sinonimo di rifiutare connessione HTTPS - mezzi rendono un po 'di risposta con stato non autorizzato o qualcosa del genere

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top