Sql injection是老问题,对如下查询:
def index
@tasks = Task.find(:all, :conditions => "name LIKE '%#{params[:query]}%'")
end
当用户输入的query条件加上单引号时很容易通过sql injection来攻击我们的Rails程序
而我们使用如下查询方式就可以避免sql注入问题:
def index
@tasks = Task.find(:all, :conditions => ["name LIKE ?", '%' + params[:query] + '%'])
end
为什么?
先来看看active_record文档里的一段话:
# == Conditions
#
# Conditions can either be specified as a string, array, or hash representing the WHERE-part of an SQL statement.
# The array form is to be used when the condition input is tainted and requires sanitization. The string form can
# be used for statements that don't involve tainted data. The hash form works much like the array form, except
# only equality and range is possible. Examples:
#
# class User < ActiveRecord::Base
# def self.authenticate_unsafely(user_name, password)
# find(:first, :conditions => "user_name = '#{user_name}' AND password = '#{password}'")
# end
#
# def self.authenticate_safely(user_name, password)
# find(:first, :conditions => [ "user_name = ? AND password = ?", user_name, password ])
# end
#
# def self.authenticate_safely_simply(user_name, password)
# find(:first, :conditions => { :user_name => user_name, :password => password })
# end
# end
#
# The <tt>authenticate_unsafely</tt> method inserts the parameters directly into the query and is thus susceptible to SQL-injection
# attacks if the <tt>user_name</tt> and +password+ parameters come directly from a HTTP request. The <tt>authenticate_safely</tt> and
# <tt>authenticate_safely_simply</tt> both will sanitize the <tt>user_name</tt> and +password+ before inserting them in the query,
# which will ensure that an attacker can't escape the query and fake the login (or worse).
OK,第一种是不安全的,后两者都是安全的。因为后两者都会使用sanitize方法来escape查询条件。
分享到:
相关推荐
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
### 二、为什么选择Rails来构建RESTful API 1. **快速开发**:Rails内置了许多实用的功能和库,如ActiveRecord ORM、MVC架构等,这些都能够极大地加快开发进度。 2. **代码简洁**:Rails遵循“约定优于配置”的原则...
在Ruby on Rails框架中,与SQLServer 2000集成可能会比与其他常见的数据库系统(如MySQL或PostgreSQL)稍复杂一些,因为SQLServer 2000的兼容性问题和缺少官方支持。然而,通过一些第三方库和适当的配置,我们仍然...
在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种...通过学习这个实例,开发者可以掌握如何在Rails应用中集成第三方库,处理层级数据,以及创建交互式的前端界面。这对于提升Web应用的用户体验非常有价值。
#### 六、添加第二个路由 - **配置**:在`config/routes.rb`文件中添加新的路由规则,例如`get 'new_route' => 'controller#action'`。 - **效果**:这将在应用中增加一个新的URL路径,指向指定控制器的动作。 ###...
1. **ActiveRecord**:这是Rails的ORM(对象关系映射)组件,它允许开发者通过Ruby对象与数据库进行交互,无需编写SQL代码。 2. **ActionController**:负责处理HTTP请求,并将数据转发给相应的模型和视图。它管理...
`activerecord-sqlserver-adapter`是一个第三方库,专门为Rails提供了一个针对SQL Server的适配器。它允许开发者使用Rails的ActiveRecord模式与SQL Server进行交互,从而充分利用ActiveRecord的ORM(对象关系映射)...
5. **Rails安全**:学习如何防止常见的Web攻击,如SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)。了解授权库如Pundit和CanCanCan,以及如何安全地处理用户输入和密码存储。 6. **部署与维护**:了解如何在各种...
Rails SQL查询跟踪器 sql_tracker通过订阅Rails的sql.active_record事件通知来跟踪SQL查询。 然后,它汇总并生成报告,以为您提供有关Rails应用程序中发生的所有SQL查询的见解。安装将此行添加到您的应用程序的...
### Java基础之Rails命令大全知识点解析 #### 一、Rails 命令概述 Rails 是一个用于 Web 开发的框架,它基于 Ruby 语言。Rails 遵循 MVC(Model-View-Controller)架构模式,使得 Web 应用程序的开发更加高效、简洁...
Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...
Ruby-sqltracker是一款针对Rails应用的SQL查询跟踪工具,它主要设计用于性能监控,帮助开发者识别和优化数据库查询效率。Rails框架是用Ruby语言编写的,广泛用于构建Web应用程序。在复杂的Rails应用中,数据库查询的...
- 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器和视图。 - 在浏览器中查看结果。 #### 六、Rails的路由 - **概念介绍**: 路由是连接用户请求URL与应用...
webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...
Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
程序员专用刷题rails-有用的资源 学习 Ruby On Rails 的有用链接集合。 对新手而言 指南: Michael Hartl 书籍/教程: 奥丁项目课程: Ruby 课程(包括元编程): Rails 上的 API 书: 如何学习导轨 1 年内的导轨: ...