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

rails 防止SQL注入式攻击

阅读更多
[size=x-large][color=green] 防止SQL注入式攻击

  SQL 代码注入攻击是最常见的一种攻击WEB应用程序的方法。 这种攻击的结果是让你的数据库被破坏或者完全暴露。最好的防范SQL代码注入的方式是过滤掉所有输入的信息。 并且对最后的结果进行转义输出。
 
  解决方法:
   使用Active Record 提供的变量绑定功能对查询语句进行“消毒”,这些邦定的变量会成为你的SQL 语句的一部分。 考虑下面的方法, 他以 id 作为参数查询你的 记录。
def get_user
  @user = User.find(:first, :conditions => "id = #{params[:id]}")
end


如果想你期望的那样, params[:id] 包含了一个整型参数,那么这个语句就会如期执行。但是,如果一个用户传进的语句像 “1 or 1=1”会怎么样? 他会插入到生成的SQL语句中:
  
SELECT * FROM users WHERE (id = 1 OR 1=1)
这些语句SQL 将返回所用用户,因为 Boolean OR 个条件 1=1 永远是true , 对find 的调用将之返回一个用户, 但这里不能担保 id 为1 的用户一定被返回,返回结果依赖于数据库内部是如何来排序记录的。

下面get_user 的另一种实现方式, 利用一种绑定的参数来防止 SQL语义篡改。
def get_user
  @user = User.find(:all, :conditions => [ "id = ?", params[:id] ])
end
现在讲“1 OR 1=1 ”传入 find 的方法会产生如下 的SQl :
 SELECT * FROM users WHERE (id = '1 OR 1=1')
在这种情况下, id 将和整个字符串比较,数据库将试图把它转换为一个数字,这里转换的结果就是 1 , 只是把id 为1  的用户信息输出而已。[/color][/size]
6
6
分享到:
评论
1 楼 tcwt008 2008-08-26  
恩这是常见的 !网络安全问题!开发web必须注意的!

相关推荐

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rar

    27.1 SQL注入 479 27.2 用参数直接创建记录 481 27.3 不要相信ID参数 482 27.4 不要暴露控制器方法 483 27.5 跨站脚本(CSS/XSS) 483 27.6 防御session定置攻击 485 27.7 文件上传 486 27.8 不要以明文保存敏感信息...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...

    JAVA上百实例源码以及开源项目

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    java开源包1

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包11

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包2

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包3

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包6

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包5

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包10

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包8

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包7

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包9

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包101

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    Java资源包01

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

Global site tag (gtag.js) - Google Analytics