SpeedPHP/安全过滤
SpeedPHP | 快速入门 | 访问交互 | 数据操作 | 框架概述 | 模板引擎 | 优化加速 | 开发指南 | 数据模型 | API参考 |
在SpeedPHP框架中,数据库防注入攻击主要采取了“安全过滤”的方式。安全过滤是针对从浏览器中提交的数据进行过滤操作,以防止SQL注入。
通常情况下,我们使用SpeedPHP的数据库操作——spModel的find/findAll/create/update/delete等多个函数的时候,条件condition均可以是数组形式和字符串形式两种。
数组形式将被自动过滤[ ]
$rows = array( 'name' => "'jake'", 'contents' => "大家好 AND 1=1", ); $result = spClass('guestbook')->findAll($rows); echo spClass('guestbook')->dumpSql();
输出:SELECT * FROM guestbook WHERE name = jake AND contents = '大家好 AND 1=1'
从上面代码可以看到findAll会自动将$rows数组内容,过滤成SQL语句可以接受的字符串。
字符串手动过滤[ ]
以下是一个模糊查找的例子:
$obj = spClass('guestbook'); $keyword = urldecode($this->spArgs('keyword')); $condition = ' contents like '.$obj->escape('%'.$keyword.'%'); $result = $obj->findAll($condition); echo spClass('guestbook')->dumpSql();
假设提交的keyword是“好”,那么输出是:
SELECT * FROM guestbook WHERE contents like '%好%'
我们看到,escape函数可以为字符串增加单引号,并转换字符串内部的单引号及其他一些符号为过滤状态。
注意:spModel的自动过滤实际上也是使用了escape函数进行过滤。
一般而言,安全过滤是在SpeedPHP框架中默认存在的,所以只在以下情况下,需要手动来过滤:
- 存在提交参数来需要进行数据库查找或插入、更新、删除数据。
- 只能用数组形式的条件。
参考来源[ ]
http://speedphp.com/manual.html
SpeedPHP使用手册导航 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|