somepostsは、SQLインジェクションの脆弱性があるActiveRecord Parameterizedステートメントに検索ボックスからのユーザー入力を翻訳していますが、解決策があると思います。Rails:まだSQLインジェクションについて混乱しています
検索の仕組みは次のとおりです。ユーザーは、検索ボックスに、このような何かを入力:ため
query = ["name LIKE ? AND address.town NOT LIKE ?", "hello", "villa"]
:
name="hello" AND NOT address.town="Villa"
は内部的には、私はそれを変換し
if search
query = convert_search_to_query search
begin
includes(:address).where(query)
# rescue Exception ...
...
...
ここに私の考えです:単にUSER-をチェックユーザー属性の受け入れ可能なリストのためにという完全一致がであることを確認するために、入力された属性(この例では "name"、 "address.town")を入力します。
私がこれを行う場合、ユーザー入力の唯一の部分を処理するためにパラメータ化された文( '?')を使用しているため、SQLインジェクションは使用できないと思います。各属性に対して入力した値。
ここで私が他の記事から読んだところによると、このコードが通常のパラメータ化された検索よりも脆弱である可能性はありませんが、SQLインジェクションに関する多くの経験はありません。それは脆弱ですか?また
:
私は助けることができるかもしれプラグインがあることを理解し、しかし、私がやりたいことは、実際には非常に簡単で、すでに働いている、と私はむしろのように軽量で私のアプリを保つだろう可能。
レールへの注入を防ぐには、アクティブレコードを使用します。レールで直接SQLクエリを実行する必要はありません。 –
これは、ユーザーが動的な数のクエリを入力できるときに機能しますか? – ineedahero
ActiveRecordはどこでも動作します。そのドキュメントを読んでください。 SQLを使用し、注入について心配する必要がなくなり、生活が楽になります。 –