Tag: sql injection

Rails SQL注入:这段代码有多脆弱?

我正在尝试理解SQL注入。 看起来人们可以变得非常有创意。 这让我想知道我正在制作的基于搜索的rails webapp。 假设我只是将用户输入的信息直接输入到我的SQL查询的“where”语句中。 允许这样做可以对我的数据库造成多大的伤害? def self.search(search) if search includes(:hobbies, :addresses).where(search) else self.all end 所以基本上,无论用户在主页上的搜索栏中输入什么,都可以直接进入’where’语句。 有效“搜索”的一个例子是: “hobby LIKE ? OR (gender LIKE ? AND hobby LIKE ?)”, “golf”, “male”, “polo” 是否仅限于“where”语句的上下文提供任何forms的辩护? 他们还能以某种方式执行删除或创建操作吗? 编辑: 当我查看本教程时,我没有看到一种直接的方法来执行where子句中的删除或创建操作。 如果我的数据库中没有我不愿意从有效的搜索结果中显示的信息,并且没有用户帐户或管理员权限这样的东西,那么这里真正的危险是什么?

Rails ActiveRecord:如何在jsonb上使用带双引号的绑定变量

我有一个postgres jsonb查询如下: Blog.where(“upload_data @> ‘[ { \”name\”: \”#{name}\” }]'”) 哪个有效,但打破了构建,因为优秀的制动员指出了可能的SQL注入风险。 如果我使用绑定变量: Blog.where(“upload_data @> ‘[ { \”name\”: ? }]'”, name) 它创建一个SQL查询,如: WHERE upload_data @> ‘[ { “name”: ‘name’ }]’ 请注意单引号 – 这是一个无效的查询 如果我使用单引号,我得到: WHERE upload_data @> “[ { ‘name’: ‘name’ }]” 这是无效的 我尝试了一些其他的东西,但我想要的是绑定变量计算为双引号的字符串: WHERE upload_data @> ‘[ { “name”: “name” }]’ 或者一个不同的解决方案 – 除了让刹车手跳过文件。

Rails ActiveRecord – 在多个属性上搜索

我正在实现一个简单的搜索function,它应检查username,last_name和first_name中的字符串。 我在旧的RailsCast上看过这个ActiveRecord方法: http://railscasts.com/episodes/37-simple-search-form find(:all, :conditions => [‘name LIKE ?’, “%#{search}%”]) 但是我如何设置它以便在name,last_name和first name中搜索关键字并返回记录,如果其中一个字段与该术语匹配? 我也想知道RailsCast上的代码是否容易出现SQL注入? 非常感谢!

用于rails控制器中create方法的sql注入预防

如comment_controller.rb中所示: def create @comment = Comment.new(params[:comment]) @comment.save end 我假设这是SQL注入 – 不安全。 但这样做的正确方法是什么?..网上的所有例子都涉及到发现。

Rails方法容易受到SQL注入?

什么是易受SQL注入攻击的Rails方法,以什么forms? 例如,我知道字符串参数容易受到攻击: Model.where(“name = #{params[:name}”) # unsafe 但参数化字符串或哈希不是: Model.where(“name = ?”, params[:name]) # safe Model.where(name: params[:name]) # safe 我主要想知道在where , order , limit和joins ,但想知道任何其他可能是攻击向量的方法。

这容易出现SQL注入吗?

在我的控制器操作中,我有以下内容: 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 在模型中: def self.search(search) if search.present? where(“category LIKE ? OR article_type LIKE ?”, “%#{search}%”,”%#{search}%”) else find(:all) end end 我知道如果你在查询中直接使用params,那么SQL注入是可能的。 在这里,我通过Article.search(params[:search])直接将params传递给where查询。 这容易出现SQL注入吗? […]

sails注入的Rails制动器警告

我的模型中有一个范围: scope :assigned_to_user, ->(user) { task_table = UserTask.table_name joins(“INNER JOIN #{task_table} ON #{task_table}.user_id = #{user.id} AND (#{task_table}.type_id = #{table_name}.type_id) AND (#{task_table}.manager_id = #{table_name}.manager_id) “) } 因此,在运行制动器报告后,我收到此警告: assigned_to_user | SQL Injection | Possible 所以我尝试了以下内容: scope :assigned_to_user, ->(user) { task_table = UserTask.table_name joins(ActiveRecord::Base::sanitize(“INNER JOIN #{task_table} ON #{task_table}.user_id = #{user.id} AND (#{task_table}.type_id = #{table_name}.type_id) AND (#{task_table}.manager_id = #{table_name}.manager_id) […]

这个SQL注入如何工作? 需要说明

我正在学习RoR /数据库,这个话题让我特别困惑。 在Agile Development with Rails 4一书中,他们举例说明了一个名为Dave的条目的所有订单列表: pos = Order.where(“name = ‘Dave’ and pay_type = ‘po”) 这本书继续说你永远不想做这样的事情: name = params[:name] pos = Order.where(“name = ‘#{name}’and pay_type = ‘po'”) 相反,你应该这样做: name = params[:name] pos = Order.where([“name = ? and pay_type = ‘po'”,name]) 我理解,SQL注入是一个概念,但有一些细节让我感到困惑。 对于初学者来说,SQL注入到底是如何工作的一种语法。 我知道,如果你插入一个像第一个例子那样的外部表单参数,有人可以删除一个表/数据库但是如何? 让我们说你有这个: name = params[:name] #DROP DATABASE database_name pos = Order.where(“name = […]