2011-07-19 15 views
0

私は実行したいカスタムSQLクエリを持っていますが、ユーザーはそれぞれ<または>を前日の値のリストドロップダウンから選択することができます。私はRailsでパラメータ化されたSQL < >

[searchSQL,value1,value2] 

にしてこれをサニタイズした場合に最初のものは、HTMLから渡され<または>記号である

searchSQL += " AND a.date_acquired #{params[:asset][:date_range]} '#{params[:asset][:date_acquired]}'" 

:日付のためのシステムの現在のSQLは次のようになります最後に、どうすれば<または> SQLクエリを台無しにすることなくsanatizedことができますか?

答えて

0

短い回答:できません。少なくともあなたは考えている。

長い答え: あなたは本当のSQL演算子の中に選択メニューからオペレータを変換する必要があります:

def sql_operator_from_param(operation) 
    return operation if ['<', '>', '='].include?(operation) 
    raise "unknown operation" 
end 

そして、paramsハッシュの代わりに、SQL文ではそれを使用。

文字列リテラルの解読を避けるより良い方法は、インデックス値をセレクトメニューに割り当てることです。これを使用して、演算子を保持する文字列の配列にインデックスを付けることができます。

+0

ありがとう、私はあなたにアレイの使用についての提案をしました。それは賢明だと思います。この方法では、誰かがこのフィールドにSQLを注入しようとすると、SQLクエリではなく配列にエラーがスローされます。 –

関連する問題