確認する必要があることはさまざまです。最初はrequest.referer
で、あなたのサイトへのリンクを参照したページが表示されます。それがあなたのサイトでない場合、それを拒否する必要があります。
if URI(request.referer).host != my_host
raise ArgumentError.new, "Invalid request from external domain"
end
しかし、これが唯一の正確HTTPヘッダーreferer
を移入Webクライアント(ブラウザ)からあなたを守ります。それはウェブページからのものであると仮定しています。たとえば、誰かが電子メールでリンクを送信する可能性があり、電子メールクライアントがリファラーをまったく提供しない可能性があります。ノーリファラーの場合は
、あなたにも、それをチェックすることができます
if request.referer.blank?
raise ArgumentError.new, "Invalid request from unknown domain"
elsif URI(request.referer).host != my_host
raise ArgumentError.new, "Invalid request from external domain"
end
をそれはHTTP「リファラ」を偽装することも簡単なスクリプトと非常に簡単ですので、あなたは、有効な取得する場合でも正当なPOSTであることを確認するためには、他のチェックが必要になります。スクリプトキディーは常にこのようなことをしています。そして、Ruby、Python、Perl、カール、さらにはVBAのダースラインで、「実ユーザ」による対話をシミュレートすることができます。
リクエスト/レスポンスキーメカニズムのようなものを使用することができます。この方法では、サイトから提供されるリンクには、ページへの訪問ごとに一意のキー(追跡する)が含まれており、そのキーを持つ人だけが投票できます。
投票者を特定する方法も重要です。受動的識別技術は、広告の提供や勧告のような重要でない活動には適しています。しかし、このアプローチは、一般の人口で使用された場合に、測定可能な割合の時間に定期的に失敗します。あなたが実際に人々がが投票活動を破壊するためにを望んでいるという事実を考慮する場合、良いコンセプトの「システムを打ち負かす」と空いている時間を誰もが突然ターゲットにすることは非常に簡単です。
早急にできるだけ多くのセキュリティを構築してください。予想よりもはるかに多くのセキュリティが必要になるためです。 2012年の大統領選挙では、41のオンライン投票サイトを事前テストするように求められ、最初の24時間(うち1時間以内に6人)で39人を破棄できました。過度に慎重にしてください。 「通常の」メカニズムを使用するだけでなく、攻撃者がどのように侵入できるかを理解する。コード内でも、使用しているテクノロジに関する情報を公開しないでください。 HTMLまたはJavascriptコード(またはURLパス名)のどこにでも "Rails-isms"があると、攻撃者は安全機構を破ることに直面します。あなたの利益にあいまいさを使用し、可能な限りあらゆる場所でセキュリティを使用してください。
注:request.referer
を確認するには、銀行の金庫に南京錠をかけるようなものです:それは簡単に思いとどまらされているものを出しておこう、それでも決定した個人を遅くはありません。
あなたの素晴らしい答えをありがとう!私があなたが言及したリクエスト/レスポンスキーメカニズムについてもっと知るために使用できるソースを知っていますか? –
@DaSourcererが指摘しているように、RailsにはCSRF保護が含まれています。これは、あるWebサイトが別のWebサイトへの投稿を防止するのに役立ちます。 (その素晴らしい情報のために彼の答えをupvoteしてください!)。しかし、それはあなたのサイトを動かすためのスクリプトを書くことができる攻撃者にはあまり役立つことはない、カジュアルなサイト間ハッカーを排除します。私はいくつかの良い参考文献を掘り起こすことができるかどうかを見ます。その間に、 '機械化'宝石が何をすることができるのかを見るかもしれません - 人々が実際に投票を自動的に行うために使用する重大なウェブサイトのハッキングツールの代表です。 –