如何使用 Ransack 在 Rails 中避免 SQL 注入

How to avoid SQL Injection in Rails with Ransack

如何去掉下面方法中的SQL盲注?

def self.with_translation_value_of_language_id_eq(language_id)
    joins('LEFT JOIN BOTranslationValue on BOTranslationToken.id = BOTranslationValue.boTranslationTokenID '\
          "AND BOTranslationValue.languageID = #{language_id}")
      .select('BOTranslationToken.*, BOTranslationValue.value as current_language_value')
  end

我试过sanitize_sql_array,但还是不行。

还有下面的方法

def self.with_translation_value_of_language_id_eq(language_id)
    joins('LEFT JOIN BOTranslationValue on BOTranslationToken.id = BOTranslationValue.boTranslationTokenID '\
          "AND BOTranslationValue.languageID = ?" language_id )
      .select('BOTranslationToken.*, BOTranslationValue.value as current_language_value')
  end

我尝试了多种方法,但 none 行得通。

谁能帮我解决这个问题?

您忘记在 ? 后添加逗号 ,,并且您没有传递正确的 where 条件,假设 BOTranslationValueBOTranslationToken 是正确的 table 名称,请尝试以下查询:

def self.with_translation_value_of_language_id_eq(language_id)
  joins('BOTranslationValue on BOTranslationToken.id = BOTranslationValue.boTranslationTokenID ')
 .where("BOTranslationValue.languageID = ?", language_id)
 .select('BOTranslationToken.*, BOTranslationValue.value as current_language_value')
end