レール/ Rackアプリケーションが接続をドロップするようにWebサーバーを伝える作るためにとにかくそこにあります
-
24-09-2019 - |
質問
1が無応答とのHTTP接続をドロップする理由多くのセキュリティ上の理由は、(存在する例。<のhref =「http://www.owasp.org/index.php/SSL_Best_Practices」のrel =「nofollowをnoreferrer」 > OWASPのSSLベストプラクティスを)。これらは、サーバーレベルで検出することができたとき、それは大したことありません。しかし、あなたが唯一のアプリケーション・レベルでこの状態を検出することができますか?
んRailsの、またはより一般的には応答せずに接続を切断するためにサーバーを伝えるのいずれかの標準的な方法を持って、ラック?ない場合は、(私はnginxのまたはApache思っています)一般的なWebサーバでそれを達成することに渡すためのいくつかの標準的なヘッダがあるのですか?標準ヘッダーが存在しない場合でも、その動作を設定するための合理的な方法は何ですか?これは無駄足ですか?
解決
nginxのは、このための機構を有しています。あなたが(それは非標準です)特別なステータスコード444を返している場合は、nginxのは、静かに接続を切断します。あなたは、nginxの設定ファイルから、このコードを返すときにのみ発生し、すなわちのような
location = /drop {
return 444;
}
と、あなたのアプリケーションからこのステータスコードを返すことはできません。この問題を回避するには、この要求のnginxの使用X-Accel-Redirect: /drop
場所を伝えるためにアプリから/drop
ヘッダを返すことである。
他のヒント
私が間違っている可能性が、私は接続を切断する方法を提供し、ラックまたはレールとは思いません。私は、最も近い「:真の何=>をレンダリングしない」のようなものかもしれないと思います。しかし、たとえそれが皮肉にも、何か(シングルスペース、明らかに... Safariのバグを回避するため)が、少なくとも、その要求を終了するのではなくOWASPはに対して警告して(クライアントが新しい要求を開始した)リダイレクトを送信します。
class TestController < ApplicationController
def nothing
render :nothing => true
end
end
>> app.get('test/nothing')
=> 200
>> app.response.body
=> " "
私はそれが役に立てば幸い。
でしょうが、あなたは「接続を落とす」ことで何を意味するかについて詳しく説明してください?どんな応答コードとバックヘッダを送信する場合は(不正移動、見つかりません)したい大丈夫です - あなたはすでに答えを得た(レンダリング:注意すること、または:頭)。あなたは追加することができます。状態=> some_statusを
。
あなたはTCP / IPレベルでの接続を落とす意味場合は、ファイアウォールなどの操作を行い、うまくそれはまた別のことです。私はこれが可能である疑い。そして、私は(可能であれば)得策とは思わない。
そして、ページには、接続HTTPS拒否する同義語として使用される「ドロップ接続」へのリンクを掲載 - 手段はそのような状況の不正か何かでいくつかのレスポンスをレンダリング