`
ali
  • 浏览: 53226 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

paginate_by_sql(原为find_by_sql)中如何避免sql 注入

阅读更多
在一些不得不使用find_by_sql的场合,何如避免sql注入攻击?
简单有效DRY的方法:
where column = #{Base.connection.quote(value)}
分享到:
评论
7 楼 ali 2008-02-28  
ok,是我笔误,是paginate_by_sql.
paginate_by_sql 接受象[where id=?,params[:id]]这样的Array参数吗?
6 楼 robbin 2008-02-28  
明明是你写的不对嘛,怎么能怪find_by_sql呢?

find_by_sql ["select ...... where id = ?", params[:id]]

我用占位符,请问你怎么给我SQL注入?

5 楼 ali 2008-02-28  
同上






4 楼 ali 2008-02-28  
不好意思,网络问题,重复提交了.
3 楼 ali 2008-02-28  
robbin 写道
你先说说看find_by_swql凭啥会有SQL注入问题?


当用到sql聚合函数,比如sum groub by,而且附带有查询条件的时候,不得不用动态生成的查询语句,如下:
select orders.*,(select sum(PAIR) from items where  order_id=orders.id) 'count' from  
orders where id=#{params[:id]} 


在这种情况下,就有注入的可能

2 楼 hapybird 2008-02-28  
find_by_swql是新的函数吗?还是笔误?
我记得这样子就可以了吧,["where aa=?,bb=?,cc=?",$aa,$bb,$cc]
1 楼 robbin 2008-02-28  
你先说说看find_by_swql凭啥会有SQL注入问题?

相关推荐

    mybatis数据库分页Spring原生例子

    在Spring的业务逻辑层(Service)中,我们可以注入`UserMapper`,并调用`findAll`方法实现分页查询。为了处理分页参数,可以创建一个Page对象,包含当前页码和每页大小: ```java @Service public class ...

    thinkPHP5解决不同服务器不同数据库表关联查询问题.docx

    需要注意的是,上述代码中使用`where()`条件时,应确保字符串拼接的安全性,避免SQL注入。在实际项目中,推荐使用参数绑定的方式,如`where('user_id', $item['id'])`。 此外,如果你需要在其他查询方法(如`select...

    Laravel开发-eloquent-query-object

    Laravel的软删除特性允许不真正从数据库中删除记录,而是设置一个`deleted_at`字段标记为已删除。使用`withTrashed`或`onlyTrashed`可以包含或仅显示已删除的记录。 **10. 自定义查询构造器** 可以通过扩展`...

    Laravel开发-database

    模型类提供了丰富的功能,如`save()`, `update()`, `delete()`, `find()`, `all()`, `where()`等方法,它们直接对应于基本的SQL操作。此外,Eloquent支持关系(如一对一、一对多、多对多),通过定义`hasOne()`, `...

    jfinal 简单增删改查(有分页功能)

    此外,还可以利用`setSqlId()`和`find()`结合自定义SQL语句进行复杂查询。 在分页功能的实现上,JFinal提供了`Page`类,它是分页查询的结果对象。开发者可以通过设置每页大小和当前页数,然后调用`Db.paginate()`...

    Laravel开发-laravel-fetchable

    Eloquent模型提供了丰富的查询构建器方法,如`where`、`orWhere`、`whereIn`、`orderBy`等,允许开发者构建复杂的SQL查询语句。 ```php $users = User::where('active', 1)->orderBy('name')->get(); ``` #### 2. ...

    Laravel开发-laravel-base-repository

    2. **读取(Read)**: 这个库可能包含多种读取数据的方法,如`all`获取所有记录,`find`根据主键查找单条记录,`findBy`按指定字段查找记录,以及`paginate`实现分页等。这些方法封装了Eloquent模型的对应方法,使得...

    ThinkPHP5查询数据及处理结果的方法小结

    这样,$package_infos数组中的每条记录都新增了一个"source_version"字段,其值为$version_name数组中"version_name"字段的值。 6. ThinkPHP5的三种查询数据库方式 ThinkPHP5支持多种方式查询数据库,本知识点总结...

    Laravel开发-slim-eloquent

    通过定义模型类,可以直接对数据进行CRUD操作,如`$user = User::find(1)`,无需编写SQL语句。 4. **分页功能**:在大型Web应用中,分页是必不可少的,它可以优化用户体验,避免一次性加载大量数据导致页面加载缓慢...

    Java 通用分页

    在Java开发中,分页是数据管理中一个非常常见的需求,尤其在大数据量的Web应用中,为了提高用户体验,我们通常需要将数据分批次展示,而不是一次性加载所有数据。这不仅可以减少服务器的压力,还能使用户界面更加...

    Laravel开发-modelo

    - **查询构建器**:通过`new QueryBuilder()`,模型可以执行更复杂的SQL查询,如联接(join)、分组(groupBy)、排序(orderBy)、分页(paginate)等。 - **关系(Eloquent Relationships)**:Laravel支持一对...

    最简单的分页

    SQL中的`LIMIT`和`OFFSET`常用于实现分页,但当页数增大时,性能会下降,因为`OFFSET`会跳过很多行。一种优化策略是使用`ROW_NUMBER()`窗口函数,配合子查询来获取指定页的数据。 4. **分页参数传递**:前端通常...

    cakephp2.1.1

    除此之外,CakePHP 2.1.1 引入了一些关键改进,如增强了安全性能,包括 CSRF(跨站请求伪造)保护和 SQL 注入防护。路由(Routing)系统也变得更加灵活,可以方便地定义和控制 URL 映射。错误处理和日志记录也得到了...

    thinkphp查询方式

    ThinkPHP支持SQL语句的直接执行,你可以通过`Db::query()`或`Db::execute()`方法进行查询和非查询操作。例如,获取所有用户数据: ```php $users = Db::query('SELECT * FROM user'); ``` 或者插入一条记录: ...

    掌握ThinkPHP5.0数据库和模型-离线版

    它支持自动路由、依赖注入、事件系统等特性,大大简化了Web应用的开发流程。 二、数据库基础 1. 数据库配置:在`config/database.php`文件中,你可以设置数据库连接信息,包括类型、用户名、密码、主机、端口、...

    个人博客数据库设计 gorm

    4. **分类(Category)**:文章可以归类到不同的分类中,我们为每个分类创建一个条目,并将文章与分类通过多对多关系关联: ```go type Category struct { gorm.Model Name string Posts []Post `gorm:"many2many...

    jfinalpluginsjfinal-dreampie.zip

     public List findBy(String where, Object... paras) {  return find(getSelectSql() getExceptSelectSql() getWhere(where), paras);  }  public List findTopBy(int topNumber, String where...

    node.js_sequelize

    Sequelize 是一个基于 Promise 的 Node.js ORM(对象关系映射),用于 PostgreSQL、MySQL、MariaDB、SQLite 和 Microsoft SQL Server 数据库。它具有强大的事务支持、关联关系、预读和延迟加载以及读取复制等功能,...

    CakePHP-1.2-Cheatsheet

    18. **isForeignKey(field)**: 判断字段是否为外键。 19. **isUnique(fields,[or])**: 检查字段组合是否唯一。 20. **query([sql])**: 执行任意SQL语句。 21. **read([fields,id])**: 读取指定ID的记录。 22. **save...

Global site tag (gtag.js) - Google Analytics