`
hideto
  • 浏览: 2677145 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails宝典之第二十五式: Sql injection

    博客分类:
  • Ruby
阅读更多
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查询条件。
分享到:
评论
4 楼 xxj 2007-08-01  
呵呵,peepcode的视频是收费的,他首页上只是一个preview:)

o(∩_∩)o...谢谢推荐,我看看去
3 楼 hideto 2007-08-01  
@xxj
谢谢你分享,peepcode首页上也有下载,不过railscasts这个系列比较基础,我写完这个系列再去看peepcode吧。

p.s. Verycd上看到《奋斗》了,很好看的电视剧哦
2 楼 xxj 2007-08-01  
peepcode的视频:http://lib.verycd.com/2007/05/10/0000149317.html

幸好不在论坛上,不然肯定被隐藏了
1 楼 xxj 2007-08-01  
兄台真是高产 一天好几篇,呵呵

在观看视频的时候还有这么一份好文章解读真的不错,多谢了!

提个建议:
rorcast的系列都是短小入门的视频,pepcode的一般都有一个多小时左右的教程。推荐那个:)

相关推荐

    Rails的精简版本Rails::API.zip

    Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    ### 二、为什么选择Rails来构建RESTful API 1. **快速开发**:Rails内置了许多实用的功能和库,如ActiveRecord ORM、MVC架构等,这些都能够极大地加快开发进度。 2. **代码简洁**:Rails遵循“约定优于配置”的原则...

    rails配置sqlserver2000

    在Ruby on Rails框架中,与SQLServer 2000集成可能会比与其他常见的数据库系统(如MySQL或PostgreSQL)稍复杂一些,因为SQLServer 2000的兼容性问题和缺少官方支持。然而,通过一些第三方库和适当的配置,我们仍然...

    Rails中应用Ext.tree:以中国的省市地区三级联动选择为例

    在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种...通过学习这个实例,开发者可以掌握如何在Rails应用中集成第三方库,处理层级数据,以及创建交互式的前端界面。这对于提升Web应用的用户体验非常有价值。

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    #### 六、添加第二个路由 - **配置**:在`config/routes.rb`文件中添加新的路由规则,例如`get 'new_route' =&gt; 'controller#action'`。 - **效果**:这将在应用中增加一个新的URL路径,指向指定控制器的动作。 ###...

    Rails相关电子书汇总

    1. **ActiveRecord**:这是Rails的ORM(对象关系映射)组件,它允许开发者通过Ruby对象与数据库进行交互,无需编写SQL代码。 2. **ActionController**:负责处理HTTP请求,并将数据转发给相应的模型和视图。它管理...

    Ruby-SQLServerRailsActiveRecord的SQLServer适配器

    `activerecord-sqlserver-adapter`是一个第三方库,专门为Rails提供了一个针对SQL Server的适配器。它允许开发者使用Rails的ActiveRecord模式与SQL Server进行交互,从而充分利用ActiveRecord的ORM(对象关系映射)...

    Advanced Rails

    5. **Rails安全**:学习如何防止常见的Web攻击,如SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)。了解授权库如Pundit和CanCanCan,以及如何安全地处理用户输入和密码存储。 6. **部署与维护**:了解如何在各种...

    sql_tracker:Rails SQL查询跟踪器

    Rails SQL查询跟踪器 sql_tracker通过订阅Rails的sql.active_record事件通知来跟踪SQL查询。 然后,它汇总并生成报告,以为您提供有关Rails应用程序中发生的所有SQL查询的见解。安装将此行添加到您的应用程序的...

    java基础之rails命令大全.pdf

    ### Java基础之Rails命令大全知识点解析 #### 一、Rails 命令概述 Rails 是一个用于 Web 开发的框架,它基于 Ruby 语言。Rails 遵循 MVC(Model-View-Controller)架构模式,使得 Web 应用程序的开发更加高效、简洁...

    Ruby on Rails入门例子

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...

    Ruby-sqltrackerRailsSQL查询跟踪器

    Ruby-sqltracker是一款针对Rails应用的SQL查询跟踪工具,它主要设计用于性能监控,帮助开发者识别和优化数据库查询效率。Rails框架是用Ruby语言编写的,广泛用于构建Web应用程序。在复杂的Rails应用中,数据库查询的...

    Rails 101 入门电子书

    - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器和视图。 - 在浏览器中查看结果。 #### 六、Rails的路由 - **概念介绍**: 路由是连接用户请求URL与应用...

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成.zip

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    Rails 101S

    ### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...

    [Rails] Crafting Rails Applications (英文版)

    [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-useful-resources:学习RubyOnRails的有用链接集合

    程序员专用刷题rails-有用的资源 学习 Ruby On Rails 的有用链接集合。 对新手而言 指南: Michael Hartl 书籍/教程: 奥丁项目课程: Ruby 课程(包括元编程): Rails 上的 API 书: 如何学习导轨 1 年内的导轨: ...

Global site tag (gtag.js) - Google Analytics