2015-09-09 8 views
5

SQLインジェクション攻撃が確実に行われないように私が取っている措置では、すべてのSQLクエリ値はアクティブレコードプリペアドステートメントを介して実行され、ハードコーディングされていない場合はすべての演算子が数値ホワイトリストのシステムによって行われます。ユーザーが「ILIKE」で検索したい場合は6を渡し、「=」で検索する場合は1などを返します。RegexがSQLインジェクションを検出する手段ではないが、SQLインジェクションを防止する手段ではない

また、BrakemanRails SQL Injection guideを定期的に使用してコードを確認します。

SQLインジェクタの試行をブロックする理由は3つあります。

  1. 私たちは、私たちをハックしようとしている多くのスクリプトの児童がいる。これらのほとんどは が既にブロックされています。ファイル拡張子が のホワイトリストシステムであるため、 がphpファイルをリクエストしようとすると、これらのほとんどをブロックします。一度はブラックリストに登録されていますが、第二ラウンドで初めて の注射ブックを投げようとします。だから私は早くこれらの児童を 帯域幅を節約するためにフラグを立てたいと思うし、実際の俳優が私たちを攻撃する場合は、 すべてのスクリプトキディからそれらを並べ替えるのは簡単だろう。
  2. 私たちの防衛を探究する試みをスローダウンします。これは実際には洗練されていない分散攻撃には効果がありませんが、スクリプトキディーとスーパーハッカーの間にある アクターの速度が遅くなる可能性があります。
  3. すべてのブロックされたリクエストにフラグを立てて、 のセキュリティ意識を高めるために、私たちのログサービスによって に通知されるログ通知を設定します。現時点で

私の考えは、要求パスに対する簡単な正規表現マッチを実行することで、フラグに順にパラメータ最も目に余るSQLインジェクションの試みとそれらのIPをブラックリストに載せるので、このような何か、rack-attackを使用。

injection_regex = /SOMEREGEXHERE/ 

Rack::Attack.blacklist('sql injection blacklist') do |req| 
    Rack::Attack::Fail2Ban.filter(req.ip, :maxretry => 5, :findtime => 10.minutes, :bantime => 24.hours) do 
    CGI.unescape(req.query_string).match(injection_regex) || req.path.match(injection_regex) 
    end 
end 

私の問題は、単純なSQLインジェクションの試行に正しくフラグを立てる正規表現を作成していますが、通常のユーザーには問題を引き起こしません。私はいくつかの偽陽性は大丈夫だと思っています。それが上記のブラックリストシステムが最初の試合後にブラックリストに載っていない理由です。

私はこの件に関して多くの質問を見つけましたが、それらはすべてlike this oneのように見えますが、人はSQLインジェクションを検出するために正規表現を使用する質問をします。 、質問をした人は、正規表現を使用して停止するのではなく、単に検出すると答えた場合、役に立つ有益なコメントが続きます。

したがって、このような正規表現が検出の手段としてのみ、誤認を最小限に抑えて働く可能性はありますか、それともこのようなウサギ全体は努力する価値がないでしょうか?

+1

。しかし、始める場所は、探したいもののリストをまとめることです。そのリストを取得したら、パターンを作成して見つけることができます。 –

+1

[this](http://www.symantec.com/connect/articles/detection-sql-injection-and-cross-site-scripting-attacks)を見ましたか?あなたの問題に対する1つの解決方法は、入力が渡されるこれらの正規表現でいくつかのレベルを作成することです。レベルが一致すると警告が表示されます。 –

答えて

関連する問題