【问题标题】:How to avoid SQL Injection in Rails with Ransack如何使用 Ransack 避免 Rails 中的 SQL 注入
【发布时间】:2020-12-26 20:35:20
【问题描述】:

下面的方法如何去除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

我尝试了多种方法,但都没有奏效。

谁能帮我解决这个问题?

【问题讨论】:

  • 什么是self class,是指型号名称?
  • 您在执行第二种方法时遇到的错误是什么?看起来没问题(除了 language_id 之前缺少逗号)
  • “它不起作用”是什么意思?有错误吗?错误说明了什么?如果没有错误,那么你得到什么结果?你期待什么结果?
  • 我没有发现您的代码有任何问题,除了缺少逗号。或者,作为 lazy (!!) 解决方案,您可能会坚持使用原始实现,但将 language_id 替换为 language_id.to_i - 您不能使用整数进行 SQL 注入 :)
  • 它不起作用意味着值没有得到清理。是的,我试过language_id.to_i,但效果不佳。

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord ransack


【解决方案1】:

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

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

【讨论】:

  • 糟糕,抱歉,添加问题时输入错误。但我尝试使用 ','
  • 你能试试上面的吗?
  • 是的,我尝试了上述方法,但它很容易受到盲 SQL 注入。
  • 不,它不容易受到 SQL 注入的影响,因为我们将 language_id 作为参数传递。如果我们在双引号中传递language_id,那么它很容易被SQL注入
  • 1 and NULL IS NULL 我们正在尝试清理此值。或者当这个值作为language_id 传递时,我们可以获取记录。我们尝试注入多个东西并成功获取所有记录。
猜你喜欢
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 2011-01-13
  • 2017-12-02
  • 2011-06-28
  • 2018-10-14
  • 2016-09-16
  • 2010-11-01
相关资源
最近更新 更多