Ist dies anfällig für SQL-Injection?

In meiner Controller-Aktion habe ich Folgendes:

def index
    @articles = (params[:mine] == "true") ? current_user.articles : Article.search(params[:search])
    @articles = @articles.sort! { |a,b| b.created_at <=> a.created_at }
    @articles = Kaminari.paginate_array(@articles).page(params[:page]).per(25)

    respond_to do |format|
      format.html
      format.json { render json: @articles }
    end
end

Und im Modell:

  def self.search(search)
    if search.present?
      where("category LIKE ? OR article_type LIKE ?", "%#{search}%","%#{search}%")
    else
      find(:all)
    end
  end

Ich verstehe, dass SQL-Injection möglich wäre, wenn Sie params direkt in einer Abfrage verwenden. Hier übergebe ich params direkt an die where-Abfrage durchArticle.search(params[:search]). Ist dies anfällig für SQL-Injection? Wenn ja, wie kann ich es sicherer machen? Ich habe auch meine Zweifel, ob ich den Controller-Code richtig geschrieben habe. Wenn Sie Vorschläge zur Überarbeitung des Controller-Codes haben, lassen Sie es mich bitte wissen, und sie werden sehr geschätzt. Danke vielmals!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage