3

応答なしでHTTP接続をドロップしたい理由は多くのセキュリティ上の理由があります(たとえば、OWASPのSSLのベストプラクティス)。これらがサーバーレベルで検出できる場合、それは大したことではありません。ただし、この状態をアプリケーションレベルでしか検出できない場合はどうなるでしょうか。

Rails、またはより一般的にはRackには、応答なしで接続を切断するようにサーバーに指示する標準的な方法がありますか?そうでない場合は、一般的なWebサーバー(NginxまたはApacheを考えています)でそれを実現するために渡す標準ヘッダーはありますか?標準ヘッダーがない場合でも、その動作を構成するための合理的な方法はありますか?これはばか者の用事ですか?

4

3 に答える 3

8

Nginxにはこのためのメカニズムがあります。特別なステータスコード444(非標準)を返す場合、Nginxはサイレントに接続を切断します。これは、Nginx構成からこのコードを返す場合にのみ発生します。

location = /drop {
  return 444;
}

また、アプリケーションからこのステータスコードを返すことはできません。回避策は、アプリからヘッダーを返しX-Accel-Redirect: /drop、Nginx/dropにこのリクエストの使用場所を通知することです。

于 2010-04-04T08:26:04.023 に答える
2

私は間違っている可能性がありますが、RackまたはRailsが接続を切断する方法を提供するとは思いません。最も近いのは「render:nothing=>true」のようなものかもしれないと思います。しかし、皮肉なことに、それでも何か(Safariのバグを回避するための単一のスペース...)を送信しますが、OWASPが警告するように、リダイレクト(クライアントに新しい要求を開始させる)ではなく、少なくとも要求を終了します。

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

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

それがお役に立てば幸いです。

于 2010-04-03T10:48:52.790 に答える
0

「接続を切断する」とはどういう意味か詳しく説明していただけますか?必要な応答コード(移動、未承認、見つかりません)を含むヘッダーを返送しても問題がない場合は、すでに回答が得られています(render:noting、または:head)。:status=>some_statusを追加できます。
ファイアウォールのように、TCP / IPレベルで接続を切断することを意味する場合、それは別のことです。私はこれが可能だとは思わない。そして、私は(可能であれば)お勧めできないと思います。
また、投稿したページで「接続の切断」へのリンクは、HTTPS接続を拒否する同義語として使用されます。つまり、ステータスが「未承認」などの応答をレンダリングすることを意味します。

于 2010-04-03T17:11:26.217 に答える