ご協力いただきありがとうございます。スタック オーバーフローに関する同様の記事と、次の記事を確認しました。
- http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html
- これは SQL インジェクションの傾向がありますか?
- http://www.codeproject.com/Articles/16994/Use-SQL-Parameters-to-Overcome-Ad-Hoc-Performance
ただし、私は MySQL を初めて使用し、別の開発者チームによって作成された Ruby on Rails Web サイトで作業しています。自分の状況に合わせてさまざまな記事をつなぎ合わせるのに苦労しています。
コードに SQL インジェクションの脆弱性があり、パラメーターを使用する必要があることを知っています。MYコードでそれを行う方法がわかりません。以下にその一部を含めました。
私の search.html.erb から、SELECT ステートメントは次のようになります。
@office_matches = Masterlocation.paginate_by_sql("select * from mylocations where # {search_string} order by nickname asc", :page => params[:page], :per_page => 20)
次に、search_controller.rb に次のように記述します。
def results
@search_string = ""
@first_term = 'y'
params[:search_terms_new] = "something in here so loop works"
if params[:search_terms_new] != ""
# debugger
if params[:city] != ""
@search_string << "and city like '%#{params[:city]}%' "
if @first_term == 'y'
@search_string = @search_string.gsub('and ', " ")
@first_term = 'n'
end
end
if params[:search][:state] != ""
@search_string << "and state = '#{params[:search][:state]}' "
if @first_term == 'y'
@search_string = @search_string.gsub('and ', " ")
@first_term = 'n'
end
end
SQL インジェクション攻撃を防ぐには、このコードをどのように変更すればよいですか?